【问题标题】:ora-01036 illegal variable name/number ExecuteNonQuery call usingVB.Netora-01036 非法变量名称/编号 ExecuteNonQuery 调用使用 VB.Net
【发布时间】:2015-03-11 17:18:41
【问题描述】:

我在通过 .NET 执行 Oracle 查询时遇到问题。我对从 .Net 调用 Oracle 命令很陌生(我来自 mySQL 背景),因此非常感谢任何帮助!

我先构建一个查询字符串...

declare 
pDate date; 
pErrorCode binary_integer; 
pErrorInfo varchar2(500); 
begin 
date := to_date(:Date, 'YYYY-MM-DD'); 
AnUpdateRoutine(:VehicleID, :ContractID, :DriverID, :pDate, :pDriverContribution, pErrorCode, pErrorInfo); 
end;

然后我添加我的参数...

cmd2.Parameters.Add(":VehicleID", OracleDbType.Int32).Value = CInt(HiddenField.Get("ID"))
cmd2.Parameters.Add(":ContractID", OracleDbType.Int32).Value = CInt(HiddenField.Get("ContractID"))
cmd2.Parameters.Add(":DriverID", OracleDbType.Int32).Value = CInt(cbCurrentDriver.Value)
cmd2.Parameters.Add(":pDate", OracleDbType.Date).Value = Date.Now()
cmd2.Parameters.Add(":pDriverContribution", OracleDbType.NVarchar2).Value = DBNull.Value
cmd2.Parameters.Add("pErrorCode", OracleDbType.NVarchar2).Value = 0
cmd2.Parameters.Add("pErrorInfo", OracleDbType.NVarchar2).Value = 0
cmd2.ExecuteNonQuery()

在 ExecuteNonQuery() 调用中出现异常... ORA-01036: 非法变量名称/编号

过程的定义

procedure AnUpdateRoutine(pVehicleID in T_FM_VEHICLE.F_VEH_ID%type,
                              pContractID in T_FM_CONTRACT.F_CON_ID%type,
                              pDriverID in T_FM_DRIVER.F_DVR_ID%type,
                              pDateTimeOn in date,
                              pDriverContribution in T_FM_DRIVER_CHG.F_DCH_DVR_CONTRIBUTION%type,
                              pErrorCode out binary_integer,
                              pErrorInfo out TErrorInfo);

pVehicleID、pContractID、pDriverID 和 pDateTimeOn 是强制性的。

【问题讨论】:

  • 匿名块中有 6 个绑定变量,并且在 .Net 代码中设置了 7 个参数。现在,为什么你完全需要匿名块?只需使用ExecuteNonQuery 直接调用AnUpdateRoutine。另一件事是 - 你的最后一个参数是自定义类型,但你试图用它填充 varchar2
  • 您可能需要编写具有OracleCustomTypeMappingAttribute 属性的类来创建映射到TErrorInfo 的类型

标签: .net oracle executenonquery ora-01036


【解决方案1】:

我可能是错的,因为我已经有一段时间没有被 Oracle 强加给我了,但是......

pErrorCode 应该是 :pErrorCode

:pErrorInfo 也有同样的问题?

【讨论】:

  • 谢谢,但是当我在 pErrorCode 和 pErrorInfo 之前添加冒号时,它给了我错误:“ORA-01008:并非所有变量都绑定”。我最初省略了冒号,因为它们是 OUT 参数,你知道这样做是否正确吗?
  • 请注意,伙计-已经有一段时间了...虽然它没有响铃-而且参数的方向应该对命名产生影响似乎也不合逻辑.. .
猜你喜欢
  • 2013-01-06
  • 2011-10-05
  • 1970-01-01
  • 2020-07-29
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多