0

我正在尝试更新一个经典的 ASP 应用程序,并且作为更新的一部分,我尝试使用带有参数化查询的字符串连接替换动态 SQL。

问题是参数不接受超过 210 个字符的值。

我收到以下错误...

ADODB.Parameter 错误“800a0d5d”

应用程序为当前操作使用了错误类型的值。

/admin/Save_product_subcategories.asp,第 30 行

我的第一次尝试看起来像这样......

SQLString = "UPDATE Product_SubCategories 
    SET SubCategory=?, Description=? 
    WHERE SubCategoryID=?"

Set courseCommand = Server.CreateObject("ADODB.Command") 
courseCommand.ActiveConnection = objConn
courseCommand.CommandText = SQLString

courseCommand.Parameters(0).value = cleanCategory 
courseCommand.Parameters(1).Value = cleanDescription
courseCommand.Parameters(2).value = cleanSubCategoryId 

我试过手动设置参数类型并增加参数的大小......

courseCommand.Parameters(1).Type = 203
courseCommand.Parameters(1).Size = 300
courseCommand.Parameters(1).Type = adLongVarWChar

我也尝试使用 command.CreateParameter 方法创建参数,但这会产生相同的错误。

param = courseCommand.CreateParameter(,,,,cleanDescription)
'or
param = courseCommand.CreateParameter(,adLongVarWChar,,,cleanDescription)
'or
param = courseCommand.CreateParameter(,adLongVarWChar,,300,cleanDescription)
courseCommand.Parameters(1) = param

我开始认为我唯一的选择是回到动态 sql。

编辑:

我尝试附加参数,而不是使用数组索引将其添加到集合中,但此后没有任何参数起作用。

提供程序错误“80020005”

类型不匹配。

/admin/Save_product_subcategories.asp,第 31 行

4

1 回答 1

0

对于其他寻找此答案的人来说,答案是使用 Recordset。

SQLString = "select  * from Product_SubCategories where 1=0"

Set rs= Server.CreateObject("ADODB.Recordset") 
rs.open  SQLString , objConn, 1,3 'open as keyset ,lock optimistic that will create empty recordset for you
' Add new record
rs.AddNew
'assign values
rs("SubCategoryID")=cleanSubCategoryId
rs("Description")=cleanDescription
rs("SubCategory")=cleanCategory
' send new record with values to database
rs.Update
'close recordset
rs.close
'destroy recordset object
se rs=nothing
于 2013-09-20T10:32:25.393 回答