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