Sql server VBScript:将具有空值的参数传递给存储过程?

Sql server VBScript:将具有空值的参数传递给存储过程?,sql-server,vbscript,parameters,ado,Sql Server,Vbscript,Parameters,Ado,在VBScript(ASP环境)中,是否可以将具有空值的参数传递给存储过程?如果要生成字符串并检查/防止SQL注入,只需在SQL字符串或逗号分隔的EXEC语句中使用null一词即可 'calling a stored proc. strSQL = "EXEC UpdateCustomer @CustomerID=" & iCustomerID + ",@PhoneNumber=null" 下面介绍如何在手动构建的字符串中使用null发送到DB strSQL = "UPDATE Cust

在VBScript(ASP环境)中,是否可以将具有空值的参数传递给存储过程?

如果要生成字符串并检查/防止SQL注入,只需在SQL字符串或逗号分隔的EXEC语句中使用null一词即可

'calling a stored proc.
strSQL = "EXEC UpdateCustomer @CustomerID=" & iCustomerID + ",@PhoneNumber=null"
下面介绍如何在手动构建的字符串中使用null发送到DB

strSQL = "UPDATE Customer SET PhoneNumber = null WHERE CustomerID = " + iCustomerID

使用命令对象将null传递给存储过程

Set cn = CreateObject("ADODB.Connection")
Set cmd = CreateObject("ADODB.Command")
cn.Open "Provider=SQLOLEDB.1;Integrated Security=SSPI;Data Source=.\Test"
Set cmd.ActiveConnection = cn
cmd.CommandText = "TestTable.sp_ModifyData"
cmd.CommandType = 4
cmd.NamedParameters = True

set cnParam = cmd.CreateParameter("@RowID",3,3,,-1)
cmd.Parameters.Append cnParam
set cnParam = cmd.CreateParameter("@AddRemoveModify",3,1,,0)
cmd.Parameters.Append cnParam
set cnParam = cmd.CreateParameter("@Value1",3,1,,0)
cmd.Parameters.Append cnParam
set cnParam = cmd.CreateParameter("@Value2",8,1,-1,"Test")
cmd.Parameters.Append cnParam
set cnParam = cmd.CreateParameter("@value3",5,1,,null)
cmd.Parameters.Append cnParam
set cnParam = cmd.CreateParameter("@value4",5,1,,0)
cmd.Parameters.Append cnParam
set cnParam = cmd.CreateParameter("@value5",8,1,-1,"")
cmd.Parameters.Append cnParam
cmd.Execute
cn.Close
Set cmd = Nothing
Set cn = Nothing

很抱歉,我没有仔细考虑数据库中字段的命名。

请尝试vbNullString或vbNullChar。您可能还需要adParamNullable

set cnParam = cmd.CreateParameter("@value3",5,1,,vbNullString)  
cnParam.Attributes = adParamNullable  
cmd.Parameters.Append cnParam
更新:

事实上,这对我很有效:

set cnParam = cmd.CreateParameter("@value3",5,1,,Null)  
cnParam.Attributes = adParamNullable  
cmd.Parameters.Append cnParam
嗯,这也奏效了:

set cnParam = cmd.CreateParameter("@value3",5,1,,Null)  
cmd.Parameters.Append cnParam

如图所示。

简短回答:将参数值设置为
Null
(VBScript关键字)。

请提供一些有关如何传递Null的示例代码。。。ADO命令对象上的内联字符串生成或类型化参数?不幸的是,我必须使用存储过程来保持项目中的一致性。有没有一种方法可以使用存储过程?@burnd:你能编辑你的问题来展示你是如何使用存储过程的吗?这里的答案显示了使用存储过程的一种方法,也许您正在使用另一种方法。请包括一些代码,这肯定会有帮助。