Sql 在asp classic中使用vb脚本参数化查询更新带有空字段的记录时显示错误

Sql 在asp classic中使用vb脚本参数化查询更新带有空字段的记录时显示错误,sql,vbscript,parameters,asp-classic,Sql,Vbscript,Parameters,Asp Classic,当我在经典ASP页面中使用参数化查询和VBScript通过带有一些空字段的update语句更新记录时,它显示错误且未更新 错误是: ADODB.Parameters (0x800A0E7C) Parameter object is improperly defined. Inconsistent or incomplete information was provided. ADODB.参数(0x800A0E7C) 参数对象定义不正确。不一致或不完整 提供了资料。 但当我填充所有字段并更新其

当我在经典ASP页面中使用参数化查询和VBScript通过带有一些空字段的update语句更新记录时,它显示错误且未更新

错误是:

ADODB.Parameters (0x800A0E7C) Parameter object is improperly defined. Inconsistent or incomplete information was provided. ADODB.参数(0x800A0E7C) 参数对象定义不正确。不一致或不完整 提供了资料。 但当我填充所有字段并更新其更新时。我的代码是:

0那么
strU=strU&“,Acdate=?”
其他的
strU=strU&“
如果结束
strU=strU&“where-Aid=?”
'========================== 
'当我传递null值时,上面的代码可以很好地工作,但我也想更新记录中的null值。记录中未更新空值。请帮帮我
使用objCmd
.ActiveConnection=MM\u目录\u字符串
.CommandText=str
.CommandType=adCmdText
.Parameters.Append(.CreateParameter(@paramg1),adInteger,adParamInput,StrStateID))
.Parameters.Append(.CreateParameter(“@paramg2”,adInteger,adParamInput,StrCityID))
.Parameters.Append(.CreateParameter(“@paramg3”,adInteger,adParamInput,strCenter))
.Parameters.Append(.CreateParameter(@paramg4),adVarChar,adParamInput,len(StrName)))
.Parameters.Append(.CreateParameter(@paramg5),adVarChar,adParamInput,6))
.Parameters.Append(.CreateParameter(@paramg6),adVarChar,adParamInput,len(StrContno)))
.Parameters.Append(.CreateParameter(@paramg7),adVarChar,adParamInput,len(StrMail)))
.Parameters.Append(.CreateParameter(@paramg8),adVarChar,adParamInput,len(a_名称)))
如果Len(dt)>0,则
.Parameters.Append(.CreateParameter(@paramg9),adVarChar,adParamInput,len(dt)))
如果结束
.Parameters.Append(.CreateParameter(@paramg10),adInteger,adParamInput,StaffId))
.Parameters(“@paramg1”).Value=StrStateID
.Parameters(“@paramg2”).Value=StrCityID
.Parameters(“@paramg3”).Value=StrCenterID
.Parameters(“@paramg4”).Value=StrName
.Parameters(“@paramg5”).Value=StrGender
.Parameters(“@paramg6”).Value=StrContno
.Parameters(“@paramg7”).Value=StrMail
.Parameters(“@paramg8”).Value=a_名称
如果Len(dt)>0,则
.Parameters(“@paramg9”).Value=dt
如果结束
.Parameters(“@paramg10”).Value=StaffId
以
Set objRS=objCmd.Execute()
%>

当我提交所有值时,它会更新,但当我提交一些字段时,它会显示上面所写的错误,但它会更新,不会出现任何错误。请帮助我。

如果您有一个
UPDATE
语句需要10个参数,那么您必须传递10个参数。这意味着在
CreateParameter()
方法中填充参数
.Value
或指定值,否则会出现错误

如果需要
更新
是动态的,则在检查传递的值时,将查询与参数一起构建

重要提示:

这段代码不是一个完整的解决方案,它只是演示了如何以动态方式构建查询字符串和参数

str=“更新管理集”
'在定义参数时进一步向下
如果Len(StrStateID&“”)大于0,则
str=str&“Astate=?,”
.Parameters.Append(.CreateParameter(@paramg1),adInteger,adParamInput,StrStateID))
如果结束
'对参数2-8重复此操作
'...
'然后在最后一个参数上(在SET语句中)
如果Len(dt&“”)大于0,则
str=str&“Acdate=?”,注意不要用逗号
.Parameters.Append(.CreateParameter(@paramg9),adVarChar,adParamInput,len(dt)))
.Parameters(“@paramg9”).Value=dt
如果结束
str=str&“where-Aid=?”
'不要忘记WHERE子句的剩余参数
'应始终传递此消息,否则代码将失败。
.Parameters.Append(.CreateParameter(@paramg10),adInteger,adParamInput,StaffId))

注意: 有更有效的方法可以产生这种效果,比如使用
数组
构建期望的参数字段和值,然后使用
For
循环动态构建查询和
参数
对象


我用您的代码进行了编辑,但在.Parameters.Append(.CreateParameter…@lokeshpurohit)行显示错误“Microsoft VBScript运行时(0x800A01F9)无效或不合格引用”,您不能仅使用该代码,我给出了“要点”您需要做什么。您仍然需要您的代码,或者对
参数的引用不起作用。请查看如何将其添加到您的代码中,如果您仍然有问题,请将更新后的代码发布到原始问题中,我将尝试帮助您。@lokeshpurohit记住您仍然需要定义
参数(@paramg10”)
或您的
WHERE
子句将失败。将更新答案以突出显示这一点。我已编辑了上面的代码,请查看。当我传递空值时,它工作正常。它不显示错误,但我也要在记录中更新相同的值。请帮助我how@lokeshpurohit您没有按照我的指示操作,您需要构建查询字符串(
str
)当您检查应该传递哪些值时(
如果Len(YourValue&“”)>0,那么
)。您不能只执行一个
参数
,然后期望它工作,需要对任何可以作为NULL传递的
参数
执行该操作。这就是您仍然存在问题的原因。