使用 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.executeNonQuery() 更新 MS 访问记录时出现问题,结果未更新

OleDbCommand不支持

命名参数。唯一的问题是他们的命令。

OleDbCommand.Parameters属性

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

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

这就是为什么您在OleDbCommand中的第一个@ActionAddWithValue中的@SNo比赛,并在AddWithValue中与@Action @SNo匹配。

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

切换参数顺序并使用推荐.Add方法而不是AddWithValue。它可能会产生意外的结果。读;

  • 我们可以停止使用AddWithValue()吗?

还可以使用 using 语句来释放OleDbConnectionOleDbCommand,而不是手动调用.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();
}