当我使用参数化查询和经典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()
%>
当我提交所有值,然后更新但是当我提交一些字段而不是显示我上面写的错误但它应该更新没有任何错误。请帮帮我。
答案 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
对象。