经典ASP参数传递空值(或空parms)和排序

时间:2009-10-19 21:03:27

标签: sql asp-classic adodb

我正在使用经典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'”

换句话说,参数不是按名称传递的;他们按顺序通过。有些可能不会出现在每次通话中。

3 个答案:

答案 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驱动程序等。您使用的是哪一个?