0

私は次のコードを試しました:

OleDbConnection My_Connection = new OleDbConnection("Provider=Microsoft.Jet...
My_Connection.Open();
string sql = " UPDATE Rooms SET [Room Status] = 'Taken', [Available] = 'No' WHERE [RoomNumber] = " + textBox5.Text;
OleDbCommand My_Command = new OleDbCommand(sql, My_Connection);
My_Command.ExecuteNonQuery();
My_Connection.Close();

エラーは次のとおりです。条件式のデータ型の不一致

4

1 に答える 1

2

上記のコメントに示されているように、Availableフィールドは Yes/No であるため、そのような文字列を格納することはできません'No'

-1したがって、解決策は、はいの値といいえの値を使用することです0。引用符なし。

注: コメントで行われている、データベース自体の列の種類を変更する回避策はお勧めしません。

もう 1 つの方法は、ユーザー入力を直接使用する代わりに変数のパラメーターを使用して、SQL インジェクションの可能性を回避することです。したがって、最終的なコードは次のようになります

OleDbConnection My_Connection = new OleDbConnection("Provider=Microsoft.Jet...
My_Connection.Open();
string sql = " UPDATE Rooms SET [Room Status] = 'Taken', [Available] = 0"+
             " WHERE [RoomNumber] = ?";
OleDbCommand My_Command = new OleDbCommand(sql, My_Connection);
My_Command.Parameters.AddWithValue("RoomNumber",  Convert.ToInt32(textBox5.Text));
My_Command.ExecuteNonQuery();
My_Connection.Close();

はるかに安全です!

于 2013-04-21T07:31:38.927 に答える