指定参数占位符时"?"和"@NAME"之间的区别?



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

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"))

也许不是在这个例子中,但这两个方法可能有不同的含义吗?也许当我需要传递相同的值两次,我会试图使用相同的变量名?

谢谢。

OleDbCommand不支持命名参数。即使您在当前查询中对@使用命名参数,它们的顺序也只会影响。当前你只有一个参数,所以你不会看到差异。

看到:OleDbCommand。参数属性

OLE DB .NET提供程序不支持传递命名参数对象调用的SQL语句或存储过程的参数"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的值,这是错误的。

最新更新