2017-01-18 57 views
0

使用此代码更新记录的MS Access:更新查询没有错误,但什么都不做

var query = "UPDATE myTable SET name = @name where id = @id"; 
using (DbCommand cmd = new OleDbCommand(query, connection)) 
{ 
    try 
    { 
     cmd.Parameters.Add(new OleDbParameter("@id", item.Id)); 
     cmd.Parameters.Add(new OleDbParameter("@name", item.Name));    
     cmd.ExecuteNonQuery(); 
    } 
    catch (Exception e) { } 
} 

但记录没有更新。我没有错误。该记录存在于数据库中。到底是怎么回事?

+1

UPDATE语句,如果没有数据更新将不会返回一个错误。要确定记录是否已更新,请检查DbCommand.ExecuteNonQuery的返回值。结果将包含受影响记录的数量。值为零意味着没有记录被更新。 – Eric

回答

1

我不知道为什么,但你必须按照查询字符串中显示的顺序添加查询参数。所以,这两条线

cmd.Parameters.Add(new OleDbParameter("@id", item.Id)); 
cmd.Parameters.Add(new OleDbParameter("@name", item.Name)); 

翻转

cmd.Parameters.Add(new OleDbParameter("@name", item.Name)); 
cmd.Parameters.Add(new OleDbParameter("@id", item.Id)); 
+0

wut?什么?为什么?呃?谁? –

+4

是的,这是因为MS Access **的OleDb提供程序不支持** actual * named *参数 - 它只支持**位置**参数。 –

相关问题