Framework Version: v4.0.30319
Description: The process was terminated due to an unhandled exception.
Exception Info: System.AccessViolationException
Stack:
at Oracle.DataAccess.Client.OracleParameter.SetStatus(Int32)
at Oracle.DataAccess.Client.OracleParameter.PreBind(Oracle.DataAccess.Client.OracleConnection, IntPtr, Int32, Boolean)
at Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery()
我的应用程序因此异常而崩溃。上下文是:我们正在尝试执行一个接受两个参数的存储过程,我们正在对命令文本中的参数使用名称绑定。
例子:
OraCommand.CommandText = "begin LOAD_UTILS.TRUNCATE_TABLE(:a1,:a2); end;"
OraCommand.Parameters.Add(New OracleParameter("a1", OracleDbType.Varchar2, 1000))
OraCommand.Parameters(0).Direction = ParameterDirection.Input
OraCommand.Parameters(0).Value = params(2)
OraCommand.Parameters.Add(New OracleParameter("a2", OracleDbType.Varchar2, 1000))
OraCommand.Parameters(1).Direction = ParameterDirection.Input
OraCommand.Parameters(1).Value = params(3)
我观察到的奇怪之处是,我们在 for 循环中运行这些语句以进行一定次数的重试,以防万一出现任何错误,OraCommand 是一个实例变量,因此参数集合不会被清除。
在第 1 次迭代中:添加参数 a1、a2
在第 2 次迭代中:前两个参数已经存在,我们再次添加名称为 a1 和 a2 的参数。...
没有看到问题,当我在每次迭代开始时清除参数集合时,但我无法提出导致问题的理论,有什么想法吗?