2011-01-03 6 views
3

残念ながら、勢力が強く、不運にもレコードを更新しようとしているため、Microsoft Accessを使用しています。 C#OleDbConnectionを使用したMicrosoft Access UPDATEコマンドとコマンドが動作しない

この

はコードです:

private void UpdateContact(Contact contact) 
{ 
    using (OleDbConnection db = new OleDbConnection(_connString)) 
    { 
     string query = "UPDATE [Contact] SET [FirstName] = @FirstName, [LastName] = @LastName, [MobileNumber] = @MobileNumber WHERE [Id] = @Id"; 

     OleDbCommand cmd = new OleDbCommand(query, db) { CommandType = CommandType.Text }; 
     cmd.Parameters.AddWithValue("@Id", contact.Id); 
     cmd.Parameters.AddWithValue("@FirstName", contact.FirstName); 
     cmd.Parameters.AddWithValue("@LastName", contact.LastName); 
     cmd.Parameters.AddWithValue("@MobileNumber", contact.MobileNumber); 

     db.Open(); 

     int rowsAffected = cmd.ExecuteNonQuery(); 

     db.Close(); 
    } 
} 

すべては、例外なく、なしにrowsAffectedは、いずれかの罰金のようです。常に0が返されます。 デバッグ中に値をチェックし、その値を保持する必要があります。 MS Access 2007で作成されたアクセスファイルの種類は2002-2003です。

私は間違って何を考えていますか?

答えて

5

は...つまりFIRSTNAME、文の順序でID

+0

あなたのパラメータを追加し

string query = "UPDATE [Contact] SET [FirstName] = ? [LastName] = ?, [MobileNumber] = ? WHERE [Id] = ?" 

を試してみてくださいそれは長い時間を過ごしていた...頭のバンジーン 'から私を助けて、チップのために余裕があった –

+0

MS Accessは本当に吸う。標準的なSQLルールに従っていなくても。私は自分のクエリにパラメータを渡していますが、そのSQLクエリでは名前でパラメータを言及していますが、MSアクセスはパラメータ名を無視して、クエリに現れるフィールドのシーケンスで取ります。このような良いデータベースバックエンドの本当に奇妙な動作。 –

関連する問題