我正在使用经典ASP并尝试为具有可选(= NULL)参数的过程创建存储过程调用的参数。其中一个参数@maxrows是必需的。
当我尝试通过以下电话时:
With objCommand
.ActiveConnection = oConn
.CommandText = "usp_client_onsite_search"
.CommandType = adCmdStoredProc
.Parameters.Append .CreateParameter("maxRows",adInteger,adParamInput,4,10)
.Parameters.Append .CreateParameter("Firstname", adVarchar, adParamInput,50 , vbnull)
End With
SQL server显示“exec usp_client_onsite_search 10,'1'”
换句话说,参数不是按名称传递的;他们按顺序通过。有些可能不会出现在每次通话中。
答案 0 :(得分:2)
我不确定你是在询问NULL还是参数顺序。
在参数顺序上,如果将命令对象的NamedParameters属性设置为“True”,则参数将按名称传递(see the MSDN for more details on this property)
对于NULL,不要传递vbNull,而是尝试传递Null。但是我不确定这是否有效。
但是,如果您获得了命名参数,则可以在您调用的存储过程中存在参数的默认值时执行此操作。这种方式只是不指定参数将在目标sproc中给出NULL值。
答案 1 :(得分:1)
请改为尝试:
.Parameters.Append
.CreateParameter("Firstname", adVarchar, adParamInput , 50 , Null )
答案 2 :(得分:1)
IIRC此行为取决于您使用的SQL驱动程序。我过去也看到过这种行为,更改驱动程序会纠正这种行为。
对于SQL Server,ADO有几个选项,例如de ODBC驱动程序,OLEDB驱动程序,MSDASQL驱动程序,SQL Server Native Client驱动程序等。您使用的是哪一个?