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

时间:2016-04-27 17:46:49

标签: c# sql oledb

发现了一些奇怪的东西, 如果我为这样的命令编写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枚举器。

谢谢, 利亚姆

1 个答案:

答案 0 :(得分:2)

首先,你真的不想使用你的第二种方法(字符串连接),因为它可能导致各种SQL注入的肮脏以及涉及错误传递参数的问题。

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

  

OLE DB .NET提供程序不支持传递的命名参数   SQL语句或由a调用的存储过程的参数   CommandType设置为Text时的OleDbCommand。在这种情况下,   必须使用问号(?)占位符

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

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