SQL UPDATE 命令不适用于 Command.Parameters。Add/AddWithValue

SQL UPDATE command won't work with Command.Parameters.Add/AddWithValue

刚刚发现了一些奇怪的东西, 如果我为这样的命令编写 SQL 语句:

command.CommandText = "UPDATE LoginTbl SET PW = @pw WHERE TwyID = @twyID";
command.Parameters.AddWithValue("@pw", pw_txt.Text);
command.Parameters.AddWithValue("@twyID", TwyID.ToString());
command.ExecuteNonQuery();

SQL 命令将 运行 无异常抛出,但它根本不更新数据库。 奇怪的是,如果我写没有参数的命令:

command.CommandText = "UPDATE LoginTbl SET PW = '"+pw_txt.Text+ "' WHERE TwyID = '"+TwyID.ToString()+"'";
command.ExecuteNonQuery();

SQL 命令 运行 非常完美,但这次它实际上更新了数据库!

这让我有些困惑,因为我非常习惯在大多数 SQL 命令中使用参数。

想知道是否有人知道为什么 UPDATE 语句特别不接受 OleDbParameters 枚举器。

谢谢, 利亚姆

首先,您真的不想使用第二种方法(字符串连接),因为它会导致各种 SQL 注入问题以及涉及参数传递不正确的问题。

如果您使用 OleDbConnectionOleDbCommand 而不是 SqlConnectionSqlCommand,您可能需要 try not using named parameters as they are not supported :

The OLE DB .NET Provider does not support named parameters for passing parameters to an SQL statement or a stored procedure called by an OleDbCommand when CommandType is set to Text. In this case, the question mark (?) placeholder must be used

而只是使用 ? 代替。只需确保以正确的顺序添加参数即可:

command.CommandText = "UPDATE LoginTbl SET PW = ? WHERE TwyID = ?";
command.Parameters.AddWithValue("@pw", pw_txt.Text);
command.Parameters.AddWithValue("@twyID", TwyID.ToString());
command.ExecuteNonQuery();