使用oledbcommand.executeNonQuery()更新MS Access记录时出现问题,结果未更新

时间:2014-11-24 11:37:23

标签: c# ms-access-2007 oledb oledbcommand

我第一次在这里发帖子,所以,请忽略我的格式。

我正在尝试使用update命令更新我的.accdb文件,但oledbcommand.executeNonQuery()的结果为0,因此结果未在数据库中更新。

虽然我没有收到任何错误。

这就是我在做什么。

string vsql = string.Format("UPDATE DefTask_List SET [Action]=@Action WHERE  [SNo]=@SNo");
vcom.Parameters.AddWithValue("@SNo", row.Cells[0].Value.ToString());
vcom.Parameters.AddWithValue("@Action", comboBox1.Text);

OleDbCommand vcom = new OleDbCommand(vsql, vcon);
vcon.Open();
int k = vcom.ExecuteNonQuery();
vcom.Dispose();
vcon.Close();

请注意,SNo在我的.accdb文件中是autonumber,其插入方式和删除数据方式相同,但工作正常。

1 个答案:

答案 0 :(得分:2)

OleDbCommand不支持命名参数。唯一的问题是他们的命令。

来自OleDbCommand.Parameters property

  

OLE DB .NET提供程序不支持传递的命名参数   参数...

     

因此,将OleDbParameter对象添加到的顺序   OleDbParameterCollection必须直接对应于的位置   命令文本中参数的问号占位符。

这就是为什么@Action中的OleDbCommand@SNo中的AddWithValue匹配@SNo以及@ActionAddWithValue匹配的原因在AddWithValue

由于您可能没有这样的数据,因此不会进行更新操作。

切换参数订单并使用推荐的.Add方法代替OleDbConnection。它可能会产生意外的结果。读;

还可以使用using statement来处理您的OleDbCommand.Dispose(),而不是手动调用.Close()using(OleDbConnection vcon = new OleDbConnection(conString)) using(OleDbCommand vcom = vcon.CreateCommand()) { vcom.CommandText = "UPDATE DefTask_List SET [Action]=@Action WHERE [SNo]=@SNo"; vcom.Parameters.Add("?", OleDbType.VarChar).Value = comboBox1.Text; vcom.Parameters.Add("?", OleDbType.Integer).Value = (int)row.Cells[0].Value; // I assume your column types are NVarchar2 and Int32 vcon.Open(); int k = vcom.ExecuteNonQuery(); } 方法。

{{1}}