2

如果有的话,以下传递参数的方式有什么区别。

SQLStr = "SELECT * FROM TABLE_NAME WHERE ID = ? "
command = new oleDbCommand(SQLStr, conn)
Command.Parameters.AddWithValue("@ID", Request.Querystring("ID"))

比。

SQLStr = "SELECT * FROM TABLE_NAME WHERE ID = @ID "
Command = new oleDbCommand(SQLStr, conn)
Command.Parameters.AddWithValue("@ID", Request.Querystring("ID"))

也许在这个例子中没有,但是这两种方法可以有不同的含义吗?也许当我需要两次传递相同的值并且我很想使用相同的变量名时?

谢谢。

4

1 回答 1

3

OleDbCommand不支持命名参数。即使您@在当前查询中使用命名参数,它们的顺序也重要。目前您只有一个参数,因此您不会看到差异。

请参阅:OleDbCommand.Parameters 属性

当 CommandType 设置为 Text 时,OLE DB .NET 提供程序不支持将参数传递给 SQL 语句或由 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 的值,这是错误的。

于 2014-08-22T18:31:31.783 回答