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

Posted

技术标签:

【中文标题】使用 oledbcommand.executeNonQuery() 更新 MS Access 记录时出现问题,结果未更新【英文标题】:Issue in updating MS Access records using oledbcommand.executeNonQuery(), result not updating 【发布时间】:2014-11-24 11:37:23 【问题描述】:

我是第一次在这里发布查询,所以,请忽略我的格式。

我正在尝试使用更新命令更新我的 .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】:

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

来自OleDbCommand.Parameters property

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

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

这就是为什么OleDbCommand 中的第一个@ActionAddWithValue 中的@SNo 匹配,而@SNoAddWithValue 中的@Action 匹配。

由于你可能没有这样的数据,所以不会有更新操作。

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

Can we stop using AddWithValue() already?

还可以使用using statement 来处理您的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();

【讨论】:

谢谢..更改命令顺序后代码现在可以工作 @KaranGoel 很高兴为您提供帮助。

以上是关于使用 oledbcommand.executeNonQuery() 更新 MS Access 记录时出现问题,结果未更新的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)