如果有,下列传递参数的方法有什么区别。
SQLStr = "SELECT * FROM TABLE_NAME WHERE ID = ? "
command = new oleDbCommand(SQLStr, conn)
Command.Parameters.AddWithValue("@ID", Request.Querystring("ID"))
Vs以上。
SQLStr = "SELECT * FROM TABLE_NAME WHERE ID = @ID "
Command = new oleDbCommand(SQLStr, conn)
Command.Parameters.AddWithValue("@ID", Request.Querystring("ID"))
也许不是在这个例子中,但这两种方法有不同的含义吗?也许当我需要两次传递相同的值时,我很想使用相同的变量名?
感谢。
答案 0 :(得分:3)
OleDbCommand
不支持命名参数。即使您在当前查询中使用带有@
的命名参数,他们的订单仅重要。目前您只有一个参数,因此您赢了“t = t看到差异。
请参阅:OleDbCommand.Parameters Property
OLE DB .NET提供程序不支持传递的命名参数 SQL语句或由a调用的存储过程的参数 CommandType设置为Text时的OleDbCommand。在这种情况下, 必须使用问号(?)占位符。例如:
SELECT * FROM Customers WHERE CustomerID = ?
因此,添加OleDbParameter对象的顺序 OleDbParameterCollection必须直接对应于该位置 命令中参数的问号占位符 文本。
请考虑以下具有多个参数的示例:
SQLStr = "SELECT * FROM TABLE_NAME WHERE ID = @ID AND NAME = @Name";
Command = new oleDbCommand(SQLStr, conn);
Command.Parameters.AddWithValue("@Name", "ABC");
Command.Parameters.AddWithValue("@ID", Request.Querystring("ID")); //'A1'
由于@Name
在参数集合中的@ID
之前添加,因此查询将如下所示:
SELECT * FROM TABLE_NAME WHERE ID = 'ABC' AND NAME = 'A1`; //assuming ID is A1
请注意,ID获取了NAME参数的值,因此NAME获取了ID的值,这是错误的。