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

Posted

技术标签:

【中文标题】VBScript:将具有空值的参数传递给存储过程?【英文标题】:VBScript: Passing a parameter with a null value to a stored procedure? 【发布时间】:2010-11-12 16:29:27 【问题描述】:

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

【问题讨论】:

Burnt,您能否提供一些示例代码,说明您希望如何传递空值...在您的 ADO Command 对象上构建内联字符串或键入参数? 【参考方案1】:

使用命令对象将 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

抱歉,我在命名数据库中的字段时没有考虑太多。

【讨论】:

【参考方案2】:

试试 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

去看看。

【讨论】:

【参考方案3】:

如果您正在构建字符串并检查/防范 SQL 注入,您可以简单地在 SQL 字符串中使用单词 null 或逗号分隔的 EXEC 语句。

'calling a stored proc.
strSQL = "EXEC UpdateCustomer @CustomerID=" & iCustomerID + ",@PhoneNumber=null"

这里是如何在手动构建的字符串中使用 null 发送到数据库

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

【讨论】:

不幸的是,我必须使用存储过程来保持项目的一致性。有没有办法可以使用存储过程? @Burnt:您能否编辑您的问题以显示您如何使用存储过程?这里的答案显示了使用存储过程的一种方式,也许您正在使用另一种方式。请包含一些代码,它肯定会有所帮助。【参考方案4】:

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

【讨论】:

以上是关于VBScript:将具有空值的参数传递给存储过程?的主要内容,如果未能解决你的问题,请参考以下文章

JQuery ajax - 如何传递具有空值的数组参数

将表值参数传递给具有不同字段数的存储过程

如何将参数传递给 Microsoft Sync 2.1 生成的存储过程

将表中的列值作为参数传递给存储过程 sql

如何使用 ShellExecute 从 VBScript 将参数传递给批处理文件 [重复]

我可以将参数传递给 VBScript(使用 cscript 启动的 vbs 文件)吗?