有人可以告诉我如何将对象引用设置为实例吗? .... 这里,user_id是将文本框值带入sql语句的参数。
private void button1_Click(object sender, EventArgs e)
{
OracleConnection con = new OracleConnection("Data Source=KBETEST; Persist Security Info=TRUE; User ID=dbo; Password=dbo123; Unicode=True");
DataSet ds = new DataSet();
OracleDataAdapter adap = new OracleDataAdapter();
OracleCommandBuilder b = new OracleCommandBuilder(adap);
adap = new OracleDataAdapter("insert into banks_ben_branch_99 (ben_bank_id, ben_brn_code, brn_name,ben_brn_addr1, ben_brn_loc, ben_brn_state, ben_brn_city, ben_bank_city, coun_code,brn_stat, remarks, brn_id, user_id, pc_tcp_ip, rtgs_stat, pay_brn_code,sys_date) select bankid,benbrn_code,brn_name,substr(brn_addr,1,100),brn_loc, brn_stat, brn_city, brn_city, coun_code,'A', remarks, '15', :user_id,'172.20.1.109', rtgs_stat, benbrn_code,sysdate from bbbt",con);
adap.InsertCommand.Parameters.Add("user_id", OracleType.VarChar,20, "user_id").Value = textBox1.Text;
adap.Fill(ds,"A");
DataTable table = ds.Tables["A"];
dataGridView1.DataSource = ds.Tables["A"];
con.Dispose();
}
谢谢!
修改
private void button1_Click(object sender, EventArgs e)
{
OracleConnection con = new OracleConnection("Data Source=KBETEST; Persist Security Info=TRUE; User ID=dbo; Password=dbo123; Unicode=True");
DataSet ds = new DataSet();
OracleDataAdapter adap = new OracleDataAdapter();
OracleCommandBuilder b = new OracleCommandBuilder(adap);
string str = "insert into banks_ben_branch_99 (ben_bank_id, ben_brn_code, brn_name,ben_brn_addr1, ben_brn_loc, ben_brn_state, ben_brn_city, ben_bank_city, coun_code,brn_stat, remarks, brn_id, user_id, pc_tcp_ip, rtgs_stat, pay_brn_code,sys_date) select bankid,benbrn_code,brn_name,substr(brn_addr,1,100),brn_loc, brn_stat, brn_city, brn_city, coun_code,'A', remarks, '15', :user_id, '172.20.1.109', rtgs_stat, benbrn_code,sysdate from bbbt";
con.Open();
adap.InsertCommand = new OracleCommand(str, con);
adap.InsertCommand.Parameters.Add("user_id", OracleType.VarChar,20).Value = textBox1.Text;
adap.InsertCommand.ExecuteNonQuery();
con.Dispose();
}
感谢大家的帮助!!我明白了!
答案 0 :(得分:3)
编辑:您的代码存在多处问题:
user_id
参数,尽管它在SQL中InsertCommand
我怀疑你根本不应该使用数据适配器。如果您只需要插入一些数据,请使用:
using (var connection = new OracleConnection(...)
{
connection.Open();
string sql = "insert into banks_ben_branch_99 [... as before ...]";
using (var command = new OracleCommand(sql, conn))
{
command.Parameters.Add("user_id", OracleType.VarChar, 20)
.Value = textBox1.Text;
command.ExecuteNonQuery();
}
}
答案 1 :(得分:2)
我怀疑adap.InsertCommand
在以下行中为空:
adap.InsertCommand.Parameters.Add
在上一行中,您使用以下构造函数:
adap = new OracleDataAdapter("insert into ...", con);
但是此构造函数初始化SelectCommand
,而不是InsertCommand
。因此,adap.InsertCommand
仍将具有其默认值null。
然后您的代码继续尝试使用此适配器填充DataTable:
adap.Fill(ds,"A");
但这也不起作用:您需要SelectCommand
才能执行此操作。
要填充DataSet,您的代码应该类似于:
adap = new OracleDataAdapter("SELECT ... FROM ... WHERE ...", con);
adap.SelectCommand.Parameters.Add(... any parameters you need ...);
adap.Fill(ds, "A");
现在正在传递断点,没有对oracle数据库表进行任何更改!为什么会这样。
我认为你误解了DataAdapter的工作原理。
要将数据库中的数据导入DataTable,您需要:
要从DataTable将数据插入数据库,您需要:
更新/删除数据库中的行与插入类似,但使用UpdateCommand和DeleteCommand。
答案 2 :(得分:1)
您提供的参数为null。