使用带有vbscript的参数化查询在asp经典中使用空字段更新记录时显示错误

时间:2014-08-28 14:13:18

标签: sql vbscript parameters asp-classic

当我使用参数化查询和经典ASP页面中的VBScript通过更新语句更新记录和一些空字段时,它显示错误而不是更新。

错误是:

ADODB.Parameters (0x800A0E7C)

Parameter object is improperly defined. Inconsistent or incomplete 
information was provided.

但是当我填写所有字段并更新其更新时。我的代码很自然:

<%
Dim objRS, objCmd, str

Set objCmd  = Server.CreateObject("ADODB.Command")
Set Objrs   = Server.CreateObject("ADODB.Recordset")

'@lankymart  i have edited code as below

'=========================
str = "update admin set Astate=?, Acity=?, Acenterid=?, Aname=?, gender=?, Acontact=?, Aemail=?,  ACreatedBy=? where Aid=?"
If Len(dt) > 0 Then
strU = strU & ", Acdate=? "
else
strU = strU & ""
end if
strU = strU & "where Aid=?"
'========================== 

'above code is working fine as its escaping when i pass null value but i want to update null value in record too. null value is not updating in record. please help me  

With objCmd
.ActiveConnection = MM_connDUdirectory_STRING
.CommandText = str
.CommandType = adCmdText

.Parameters.Append(.CreateParameter("@paramg1", adInteger, adParamInput, ,StrStateID))
.Parameters.Append(.CreateParameter("@paramg2", adInteger, adParamInput, ,StrCityID))
.Parameters.Append(.CreateParameter("@paramg3", adInteger, adParamInput, ,StrCenterID))
.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_name)))
 If Len(dt) > 0 Then
.Parameters.Append(.CreateParameter("@paramg9", adVarChar, adParamInput, len(dt)))
end if
.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_name
 If Len(dt) > 0 Then
.Parameters("@paramg9").Value = dt
end if
.Parameters("@paramg10").Value = StaffId

end with 
Set objRS = objCmd.Execute()
%>

当我提交所有值,然后更新但是当我提交一些字段而不是显示我上面写的错误但它应该更新没有任何错误。请帮帮我。

1 个答案:

答案 0 :(得分:0)

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

如果您需要UPDATE动态构建查询以及参数,则检查值是否正在传递。

  

重要提示:

     

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

str = "update admin set "

'Further down while defining parameters
If Len(StrStateID & "") > 0 Then
  str = str & "Astate=?, "
  .Parameters.Append(.CreateParameter("@paramg1", adInteger, adParamInput, ,StrStateID))
End If

'Repeat for Parameters 2 - 8
'...

'Then on your last parameter (in the SET statement)
If Len(dt & "") > 0 Then
  str = str & "Acdate=? " 'Notice no comma
  .Parameters.Append(.CreateParameter("@paramg9", adVarChar, adParamInput, len(dt)))
  .Parameters("@paramg9").Value = dt
End If

str = str & "where Aid=?"

'Don't forgot the remaining Parameter for the WHERE clause
'This should always be passed or the code will fail.
.Parameters.Append(.CreateParameter("@paramg10", adInteger, adParamInput, ,StaffId))

  

注意:   有更有效的方法可以生成此方法,例如使用Array构建预期的参数字段和值,然后使用Parameter循环动态构建查询和For对象。