大家好,当我进行更新或删除时,我得到了这个错误我该怎么办
OleDbConnection con = new
OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
Application.StartupPath + "\\db\\it.accdb");
con.Open();
OleDbCommand cmd = new OleDbCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
string query = "UPDATE data SET [Target Name]= '" +textBox1.Text+ "' where ID = '" + textBox9.Text + "' ";
cmd.CommandText = query;
cmd.ExecuteNonQuery();
con.Close();
答案 0 :(得分:0)
首先要始终使用参数化查询。之后检查Id的类型,它可能是一个int,所以当你添加该参数时,请确保将该值添加为int类型。
另见https://msdn.microsoft.com/en-us/library/system.data.oledb.oledbcommand.parameters(v=vs.110).aspx
说明
当CommandType设置为Text时,OLE DB .NET提供程序不支持将参数传递给SQL语句或OleDbCommand调用的存储过程的命名参数。在这种情况下,必须使用问号(?)占位符。
重构代码
using (OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + MediaTypeNames.Application.StartupPath + "\\db\\it.accdb"))
using (OleDbCommand cmd = new OleDbCommand())
{
cmd.Connection = con;
cmd.CommandType = CommandType.Text;
cmd.CommandText = "UPDATE data SET [Target Name]= ? where ID = ?";
cmd.Parameters.Add(new OleDbParameter("@target", OleDbType.VarChar)).Value = textBox1.Text;
cmd.Parameters.Add(new OleDbParameter("@id", OleDbType.Integer)).Value = int.Parse(textBox9.Text);
con.Open();
cmd.ExecuteNonQuery();
}
请注意:
using
块中,因此即使发生异常也会对它们进行处理/清理。int
,这很关键,因为否则可以将其视为不是(基于您的摘要的根)的字符串。