错误:经典ASP的ADODB代码不支持参数类型

时间:2017-05-04 07:51:21

标签: oracle vbscript asp-classic

我编写了代码来插入用oracle pl / sql编写的调用参数化存储过程。我已正确地给出了所有参数,如下面的代码所示。

 function CallSp(str_id, ref_no, note, userId, strdatestamp, writtenDate)
   Dim strcon2 : set strcon2=server.createObject("ADODB.Connection")
   Dim strcmd2
   Dim sql2
   Dim ReturnVal
   strcon2.Open "Proper Connectionstring provided here"
   sql2 = "Fr_Store_Notes"

   Set strcmd2 = Server.CreateObject("ADODB.Command")
   Set strcmd2.ActiveConnection = strCOn2
   strcmd2.CommandText = sql2
   strcmd2.CommandType = 4
   strcmd2.Parameters.Refresh
   strcmd2.Parameters.Append strcmd2.CreateParameter("p_str_id", 12,1)
   strcmd2.Parameters("p_str_id") = str_id
   strcmd2.Parameters.Append strcmd2.CreateParameter("p_ref_no", 12,1)
   strcmd2.Parameters("p_ref_no") = ref_no
   strcmd2.Parameters.Append strcmd2.CreateParameter("p_UserId", 12,1)
   strcmd2.Parameters("p_UserId") = userId
   strcmd2.Parameters.Append strcmd2.CreateParameter("p_note", 12,1)
   strcmd2.Parameters("p_note") = note
   strcmd2.Parameters.Append strcmd2.CreateParameter("p_Datestamp", 12,1)
   strcmd2.Parameters("p_Datestamp") = strdatestamp
   strcmd2.Parameters.Append strcmd2.CreateParameter("p_WrittenDate", 12,1)
   strcmd2.Parameters("p_WrittenDate") = writtenDate
   strcmd2.Parameters.Append strCmd2.CreateParameter("p_return", 3, 2)
   strcmd2.Execute
   ReturnVal = strcmd2.Parameters("p_return").Value

   CallSp=ReturnVal
   set strCmd2=Nothing
   strCon2.close
end function

但我收到错误

  行strcmd2.Execute

不支持

参数类型

数据库存储过程如下所示,如果我们从数据库

执行它,则工作正常
create or replace
procedure Fr_Store_Notes (
  P_STR_ID IN VARCHAR2,
  p_Ref_no in VARCHAR2,
  P_UserId in VARCHAR2,
  P_Note IN VARCHAR2,
  P_datestamp IN VARCHAR2,
  p_WrittenDate IN VARCHAR2,
  p_return OUT number)
AS
BEGIN
--Expected Code Block is there and working fine
End;

任何人都可以帮我解决这个问题

1 个答案:

答案 0 :(得分:1)

更新: - 显然经过一些研究(因为我不能与Oracle合作) ADODB不支持adVariant 12,您应该使用adVarChar 200

请参阅A: Classic ASP calling Oracle stored procedure with OraOleadb Driver

保留下面的答案,因为一旦解决了这个问题,它可能仍然有用。

原因是,一旦ADODB与连接定义的提供程序进行通信,特定错误通常是数据类型不匹配。

与您的ADODB.Command对象相比,只是查看Oracle中的过程定义,我可以看到p_return参数似乎不正确。我在previous answersimilar question进行了讨论。

根据Data Type Mapping (ADO中数据类型映射的绝佳资源) adInteger 3地图在Oracle中Int而不是Number。相反,您应该使用adNumeric 131来修复该特定错误。

尝试更改此行

strcmd2.Parameters.Append strCmd2.CreateParameter("p_return", 3, 2)

strcmd2.Parameters.Append strCmd2.CreateParameter("p_return", 131, 2)

有用的链接