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 注入问题以及涉及参数传递不正确的问题。
如果您使用 OleDbConnection
或 OleDbCommand
而不是 SqlConnection
和 SqlCommand
,您可能需要 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();
刚刚发现了一些奇怪的东西, 如果我为这样的命令编写 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 注入问题以及涉及参数传递不正确的问题。
如果您使用 OleDbConnection
或 OleDbCommand
而不是 SqlConnection
和 SqlCommand
,您可能需要 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();