2017-07-06 11 views
1

msアクセスデータベースをWindowsアプリケーションで更新しようとしていますが、苦労しています。私はそれを実行すると、私はエラーが発生しないが、私はそれをテストするときに1〜2回のように更新しますが、私は再び3回それを行う場合は、再び動作しません。パラメータを使用してmsアクセスデータベースを更新する方法C#

これは私が

Conn.Open(); 
Command.CommandType = CommandType.Text; 
Command.CommandText ="UPDATE TABLE SET [email protected] WHERE id = @ID"; 

Command.Parameters.AddWithValue("@qty", txtQty.Text); 
Command.Parameters.AddWithValue("@ID", txtID.Text); 
Command.ExecuteNonQuery(); 
Conn.Close(); 

を使用するコードである私は、この権利をやったり、正しいそれを持っていることの右のトラックに感じたが、その後、私は思った問題のよりのようです。すべてのヘルプは素晴らしいことだ

+0

OLEDBプロバイダを参照してください** position **パラメータのみをサポートしています。したがって、パラメータの名前付け方法は関係ありません。本当に注意する必要があるのは、SQLステートメントに表示される**正しい順序**で指定することです(この場合は、ここでは、例) –

答えて

1
  • 数量及びIdはうまくいけば整数であり、あなたがそのように渡す必要があります。
  • またTableは予約語です。これが実際にテーブルの名前であれば、角括弧で囲む必要があります。
  • また、パラメータに正しいdb型を渡し、これを許可しないAddWithvalueは使用しないでください。

コード

Conn.Open(); 
Command.CommandType = CommandType.Text; 
Command.CommandText ="UPDATE [TABLE] SET c_qty= ? WHERE id = ?"; 

Command.Parameters.Add(new OleDbParameter("@qty", OleDbType.Int) {Value = int.Parse(txtQty.Text)}); 
Command.Parameters.Add(new OleDbParameter("@ID", OleDbType.Int) {Value = int.Parse(txtID.Text)}); 
var rowsUpdated = Command.ExecuteNonQuery(); 
// output rowsUpdated to the log, should be 1 if id is the PK 
Conn.Close(); 

最後にあなたの使い捨てのためusingブロックを使用。ここで例外を取得する場合は、ガベージコレクションが実行されるまで接続が開いたままになります。つまり、このAccessデータベースへの他の接続の試行で問題が発生する可能性があります。 usingブロック

using (OleDbConnection Conn = new OleDbConnection("connectionStringHere")) 
using (OleDbCommand Command = new OleDbCommand("UPDATE [TABLE] SET c_qty= ? WHERE id = ?", Conn)) 
{ 
    Command.Parameters.Add(new OleDbParameter("@qty", OleDbType.Int) {Value = int.Parse(txtQty.Text)}); 
    Command.Parameters.Add(new OleDbParameter("@ID", OleDbType.Int) {Value = int.Parse(txtID.Text)}); 
    Conn.Open(); 

    var rowsUpdated = Command.ExecuteNonQuery(); 
    // output rowsUpdated to the log, should be 1 if id is the PK 
} 
最後に

のOleDbCommand名前付きパラメータをサポートしていないと改訂

、 `@ ID`のようなMS Accessのない* *サポート** **という名前のないパラメータについてOleDbCommand.Parameters

+0

その名前ではなく、私がここに投稿するために置いたものです。私はあなたのコードを試してみます –

+0

これはうまくいきました。私はそれを動作させるためにそれを微調整しなければならなかったが、今助けてくれてありがとう。 –

+0

@Don - 喜んで助けてくれてうれしく思います。 – Igor

関連する問題