2017-01-18 58 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 *參數 - 它只支持**位置**參數。 –

相關問題