0

我正在使用经典的 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 服务器显示此“exec usp_client_onsite_search 10,'1'”

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

4

3 回答 3

2

我不确定您是在询问 NULL 还是参数顺序。

在参数顺序上,如果将命令对象的 NamedParameters 属性设置为“True”,则参数将按名称传递(有关此属性的更多详细信息,请参阅 MSDN)

至于NULL,不传vbNull,试试传Null。但是我不确定这是否可行。

但是,如果您让命名参数正常工作,那么如果您正在调用的存储过程中的参数有默认值,您就可以这样做。这种方式简单地不指定参数将在目标存储过程中给出一个 NULL 值。

于 2009-10-19T22:14:22.883 回答
1

试试这个:

.Parameters.Append 
.CreateParameter("Firstname", adVarchar, adParamInput , 50 , Null )
于 2009-10-19T21:09:38.307 回答
1

IIRC 此行为取决于您使用的 SQL 驱动程序。我过去也看到过这种行为,更改驱动程序将纠正这种行为。

对于 SQL Server,ADO 有几种选择,例如 de ODBC 驱动程序、OLEDB 驱动程序、MSDASQL 驱动程序、SQL Server Native Client 驱动程序等。您使用的是哪一种?

于 2009-10-19T21:10:19.023 回答