[英]object reference not set to an instance of an object when using parameter
有人可以告訴我如何將對象引用設置為實例嗎? ....這里,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();
}
謝謝大家的幫助! 我知道了!
編輯:您的代碼有很多錯誤:
user_id
參數 InsertCommand
嘗試使用適配器的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();
}
}
我認為user_id
不是可為空的列,它在您的參數為空時發生。 首先是,參數名稱不匹配。 之后,當文本框為空時,仍然可能發生這種情況。 最好在客戶端進行檢查以進行驗證。
我懷疑adap.InsertCommand
在以下行中為null:
adap.InsertCommand.Parameters.Add
在上一行中,使用以下構造函數:
adap = new OracleDataAdapter("insert into ...", con);
但是此構造函數初始化SelectCommand
而不是InsertCommand
。 因此adap.InsertCommand
仍將具有其默認值null。
然后,您的代碼繼續嘗試使用此適配器填充DataTable:
adap.Fill(ds,"A");
但這也不起作用:您需要執行SelectCommand
。
要填充數據集,您的代碼可能應該類似於以下內容:
adap = new OracleDataAdapter("SELECT ... FROM ... WHERE ...", con);
adap.SelectCommand.Parameters.Add(... any parameters you need ...);
adap.Fill(ds, "A");
現在已經過了斷點,尚未對oracle數據庫表進行任何更改! 為什么會這樣。
我認為您誤會了DataAdapters的工作方式。
要將數據從數據庫獲取到DataTable中,您需要:
要將數據從DataTable插入數據庫,您需要:
更新/刪除數據庫中的行與插入類似,但是使用UpdateCommand和DeleteCommand。
您提供的參數為空。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.