发现了一些奇怪的东西, 如果我为这样的命令编写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枚举器。
谢谢, 利亚姆
答案 0 :(得分:2)
首先,你真的不想使用你的第二种方法(字符串连接),因为它可能导致各种SQL注入的肮脏以及涉及错误传递参数的问题。
如果您使用OleDbConnection
或OleDbCommand
而不是SqlConnection
和SqlCommand
,则可能需要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();