用于插入值的参数化查询

我试图使用参数化查询将值插入Access数据库:

private void button1_Click(object sender, EventArgs e) { if (validationcontrol()) { MessageBox.Show(cmbjobcode.SelectedValue.ToString()); OleDbConnection oleDbConnection1 = new System.Data.OleDb.OleDbConnection(connString); oleDbConnection1.Open(); OleDbCommand oleDbCommand1 = new System.Data.OleDb.OleDbCommand("INSERT INTO quotationmastertable (quotationcode ,jobcode , jobpk , sillabordercharges , battabordercharges , driverpayment , rent , extra , total , discount , remark ,amount ) Values (?,?,?,?,?,?,?,?,?,?,?,?) ", oleDbConnection1); oleDbCommand1.Parameters.Add(txtquotationno.Text); oleDbCommand1.Parameters.Add(cmbjobcode.Text); oleDbCommand1.Parameters.Add(cmbjobcode.SelectedValue); oleDbCommand1.Parameters.Add(int.Parse(txtsilabordercharges.Text)); oleDbCommand1.Parameters.Add(int.Parse(txtbattacharges.Text)); oleDbCommand1.Parameters.Add(int.Parse(txtdriverpayment.Text)); oleDbCommand1.Parameters.Add(int.Parse(txtrent.Text)); oleDbCommand1.Parameters.Add(int.Parse(txtextra.Text)); oleDbCommand1.Parameters.Add(int.Parse(txttotal.Text)); oleDbCommand1.Parameters.Add(int.Parse(txtdiscount.Text)); oleDbCommand1.Parameters.Add(txtremark.Text); oleDbCommand1.Parameters.Add(int.Parse(txtamount.Text)); oleDbCommand1.CommandType = CommandType.Text; oleDbCommand1.ExecuteNonQuery(); oleDbConnection1.Close(); MessageBox.Show(txtquotationno.Text); } } 

但我在第一行本身得到一个例外:

 oleDbCommand1.Parameters.Add(txtquotationno.Text); 

例外是

OleDbParameterCollection仅接受非null的OleDbParameter类型对象,而不接受String对象。

我是编程新手; 任何人都可以帮我指出我的错误?

期望OleDBParameter对象的Add对象的单个参数。 你只是传递字符串和数据。

一个简单的解决方法是使用AddWithValue方法:

 oleDbCommand1.Parameters.AddWithValue("?", txtquotationno.Text); oleDbCommand1.Parameters.AddWithValue("?", cmbjobcode.Text); 

OleDB并不真正使用参数名称,它是基于索引的,这就是为什么你可以为每个参数传递问号作为名称。 您必须确保您的参数与查询语句的顺序相同。

您正在尝试将字符串添加到参数集合中。 试试这个(将OleDbType.VarChar, 50更改为数据库中数据列的实际类型。

 oleDbCommand1.Parameters.Add("@quot", OleDbType.VarChar, 50).Value = txtquotationno.Text; 

有关示例,请参阅msdn: http : //msdn.microsoft.com/en-us/library/system.data.oledb.oledbparameter.aspx