我第一次在这里发帖子,所以,请忽略我的格式。
我正在尝试使用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
,其插入方式和删除数据方式相同,但工作正常。
答案 0 :(得分:2)
OleDbCommand
不支持命名参数。唯一的问题是他们的命令。
来自OleDbCommand.Parameters
property
OLE DB .NET提供程序不支持传递的命名参数 参数...
因此,将OleDbParameter对象添加到的顺序 OleDbParameterCollection必须直接对应于的位置 命令文本中参数的问号占位符。
这就是为什么@Action
中的OleDbCommand
与@SNo
中的AddWithValue
匹配@SNo
以及@Action
与AddWithValue
匹配的原因在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}}