【问题标题】:Issue in updating MS Access records using oledbcommand.executeNonQuery(), result not updating使用 oledbcommand.executeNonQuery() 更新 MS Access 记录时出现问题,结果未更新
【发布时间】: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,这与我插入和删除数据的方式相同,但工作正常。

【问题讨论】:

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


    【解决方案1】:

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

    来自OleDbCommand.Parameters property

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

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

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

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

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

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

    【讨论】:

    • 谢谢..更改命令顺序后代码现在可以工作
    • @KaranGoel 很高兴为您提供帮助。
    猜你喜欢
    • 2016-01-19
    • 1970-01-01
    • 2020-10-12
    • 2021-09-15
    • 2013-01-28
    • 2021-04-12
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    相关资源
    最近更新 更多