2014-11-24 110 views
1

我在这里发布查询第一次,所以请忽略我的格式。使用oledbcommand.executeNonQuery()更新MS Access记录问题,结果不更新

我正尝试使用更新命令更新我的.accdb文件,但oledbcommand.executeNonQuery()的结果为0因此结果未在数据库中更新。

虽然我没有收到任何错误。

这是我在做什么。

string vsql = string.Format("UPDATE DefTask_List SET [Action][email protected] WHERE [SNo][email protected]"); 
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但这是工作的罚款。

回答

2

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

OleDbCommand.Parameters property

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

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

这就是为什么你的第一个@ActionOleDbCommand比赛在你AddWithValue@SNo比赛@SNo在你AddWithValue@Action

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

切换您的参数订单,并使用.Add方法,而不是AddWithValue。它可能产生意想不到的结果读;

还可以使用using statement处置您的OleDbConnectionOleDbCommand,而不是手动调用.Dispose().Close()方法。

using(OleDbConnection vcon = new OleDbConnection(conString)) 
using(OleDbCommand vcom = vcon.CreateCommand()) 
{ 
    vcom.CommandText = "UPDATE DefTask_List SET [Action][email protected] WHERE [SNo][email protected]"; 
    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(); 
} 
+0

谢谢..代码现在工作后,改变命令的顺序 – 2014-11-24 12:16:54

+0

@KaranGoel很高兴帮助。 – 2014-11-24 12:18:21