使用 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
中的第一个@Action
与AddWithValue
中的@SNo
匹配,而@SNo
与AddWithValue
中的@Action
匹配。
由于你可能没有这样的数据,所以不会有更新操作。
切换您的参数顺序并使用推荐的.Add
方法而不是AddWithValue
。它可能会产生意想不到的结果。阅读;
AddWithValue()
already?
还可以使用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 很高兴为您提供帮助。以上是关于使用 oledbcommand.executeNonQuery() 更新 MS Access 记录时出现问题,结果未更新的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)