使用 oledbcommand.executeNonQuery() 更新 MS 访问记录时出现问题,结果未更新
本文关键字:更新 问题 结果 记录 访问记 executeNonQuery oledbcommand 访问 MS 使用 | 更新日期: 2023-09-27 18:31:46
我第一次在这里发布查询,所以,请忽略我的格式。
我正在尝试使用更新命令更新我的.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
,也与我插入和删除数据的方式相同,但这工作正常。
OleDbCommand
不支持命名参数。唯一的问题是他们的命令。
从OleDbCommand.Parameters
属性
OLE DB .NET 提供程序不支持用于传递的命名参数 参数。。。
因此,将 OleDbParameter 对象添加到 OleDbParameterCollection 必须直接对应于 命令文本中参数的问号占位符。
这就是为什么您在OleDbCommand
中的第一个@Action
与AddWithValue
中的@SNo
比赛,并在AddWithValue
中与@Action
@SNo
匹配。
由于您可能没有这样的数据,因此不会有更新操作。
切换参数顺序并使用推荐.Add
方法而不是AddWithValue
。它可能会产生意外的结果。读;
- 我们可以停止使用
AddWithValue()
吗?
还可以使用 using
语句来释放OleDbConnection
和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();
}