VB6 + SQL-Server:如何使用ADODB.Command执行带有命名参数的查询?

Joã*_*cus 4 sql-server vb6

我一直在尝试使用ADODB.Command执行参数化查询.我知道我可以用"?" 对于参数,但我的查询相当大,我真的不想跟踪参数的确切顺序.我尝试过以下内容:

objCmd.CommandType = adCmdText
objCmd.CommandText = "SELECT ... WHERE field1=@p_Field1 ...."    
Dim objParam As ADODB.Parameter
Set objParam = objCmd.CreateParameter("@p_Field1" ...)
objCmd.Parameters.Append objParam
...
objCmd.Open
Run Code Online (Sandbox Code Playgroud)

它适用于存储过程参数(显然设置CommandType = adCmdStoredProc),但由于查询本身的动态特性,我无法在存储过程中执行此操作.当我尝试运行查询时,我收到错误:

 Must declare the scalar variable "@p_Field1"
Run Code Online (Sandbox Code Playgroud)

有没有其他方法可以不涉及使用存储过程或(argh)连接查询本身中的参数值而根本不使用参数?

pod*_*ska 10

您可以这样做,以允许您重用参数

objCmd.CommandText = "declare @var1 int, @var2 int, @var3 int; " & _
    "select @var1 = ?, @var2 = ?, @var3 = ?;" & _
    "select ... where field1 = @var1 or field4 = @var1 or field2 = @var2 ... "
Run Code Online (Sandbox Code Playgroud)

并以正常的有序方式添加参数.


Cra*_*gTP 6

我已经有一段时间没有使用 VB6 了,但是您是否尝试过将 Command 对象上的 NamedParameters 属性设置为 True?

IE。

objCmd.NamedParameters = True
Run Code Online (Sandbox Code Playgroud)