我试图使用命名参数通过Adodb.Command但没有运气下面的查询。
Select * From mytable Where col1 = Lower(@param1) And col2 = Upper(@param2) And col3 = @param1
该代码我用类似的东西。
Dim cmd
Set cmd = Server.CreateObject("Adodb.Command")
cmd.NamedParameters = True
cmd.CommandType = adCmdText
cmd.CommandText = "Select * From mytable Where col1 = Lower(@param1) And col2 = Upper(@param2) And col3 = @param1"
cmd.Parameters.Append cmd.CreateParameter("@param1", adVarchar, adParamInput, 20, "some text 1")
cmd.Parameters.Append cmd.CreateParameter("@param2", adVarchar, adParamInput, 20, "some text 2")
Set cmd.ActiveConnection = cn
Dim rs
Set rs = cmd.Execute
问题是,这将导致在RDBMS侧的错误。
Microsoft OLE DB Provider for SQL Server error '80040e14'
Must declare the scalar variable "@param1".
有没有任何麻烦,如果查询是存储过程调用。 所以,我想namedparameters会影响它调用存储过程只有命令对象。 当我使用SQL Server Profiler跟踪查询,只见刚才下面的查询运行(注意,没有参数声明,没有赋值)。
SQL:BatchStarting Select * From mytable Where col1 = Lower(@param1) And col2 = Upper(@param2)
SQL:BatchCompleted Select * From mytable Where col1 = Lower(@param1) And col2 = Upper(@param2)
不过,我需要做的是对本地有所不同的查询。 我该怎么办呢,什么是最好的做法做,没有字符串连接等。我不想与准备问号查询,我不喜欢传递参数与命令(这是neccesary带有问号的和没有命名参数)并多次。 任何帮助将不胜感激。
更新的误解:我正在寻找,不是取决于数据库是一个通用的解决方案。