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字段是“是/否”,因此您不能'No'在其中存储字符串。

因此,解决方案是使用“-1是”和0“否”的值。没有引号。

注意:不建议使用评论中的解决方法来更改数据库本身的列类型。

另一件事是通过使用变量的参数而不是直接使用用户输入来避免 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 回答