2017-01-18 7 views
0

がレコードMSアクセス:更新クエリにエラーがないが、何も

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) { } 
} 

を更新するには、このコードを使用していないんしかし、レコードが更新されません。私は間違いがない。レコードはDBに存在します。何が起こっている?

+1

更新文に次の2行

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

を反転。レコードが更新されたかどうかを確認するには、DbCommand.ExecuteNonQueryの戻り値を確認します。結果には、影響を受けるレコードの数が含まれます。値が0の場合は、レコードが更新されなかったことを意味します。 – Eric

答えて

1

理由はわかりませんが、クエリ文字列に表示される順序でクエリのパラメータを追加する必要があります。だから、何のデータが更新されていない場合は、エラーを返しません

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

wut?何?どうして?ああ?誰? –

+4

はい、それはMS Access **のOleDbプロバイダが** actual * named *パラメータをサポートしていないためです。** position **パラメータのみをサポートしています。 –

関連する問題