C# Oracle.ManagedDataAccess.Client ExecuteScalar上引发的NullReferenceException

C# Oracle.ManagedDataAccess.Client ExecuteScalar上引发的NullReferenceException,c#,oracle,C#,Oracle,我在多线程程序上遇到间歇性异常的问题。 这些异常来自对OracleCommand.ExecuteScalar的调用。 使用的查询是计数(*),因此不可能返回null 这是调用ExecuteScalar的C代码 public bool HasCodUniorgLinkedToREP(long numIdRep) { string strQuery = "select count(*) from tbl_uniorgrep where num_idrep = :p_n

我在多线程程序上遇到间歇性异常的问题。 这些异常来自对OracleCommand.ExecuteScalar的调用。 使用的查询是计数(*),因此不可能返回null

这是调用ExecuteScalar的C代码

    public bool HasCodUniorgLinkedToREP(long numIdRep)
    {
        string strQuery = "select count(*) from tbl_uniorgrep where num_idrep = :p_num_idrep";

        using (OracleCommand oraCmdUniorg = OraLib.CreateCommand(strQuery, oraConn))
        {
            oraCmdUniorg.Parameters.Add("p_num_idrep", OracleDbType.Decimal, numIdRep, ParameterDirection.Input);

            try
            {
                if (Convert.ToInt32(oraCmdUniorg.ExecuteScalar()) != 0)
                    return true;
                else
                    return false;
            }
            catch (Exception ex)
            {
                Exception e = new Exception("Error Message.", ex);
                e.Data.Add("REP ID", numIdRep);
                throw e;
            }
        }
    }
此代码引发的异常如下所示:

Exception Info:
Type: System.NullReferenceException
Message: Object reference not set to an instance of an object.
Source: Oracle.ManagedDataAccess
Stack Trace:
   at OracleInternal.ServiceObjects.OracleCommandImpl.ExtractAccessorValuesIntoParam(OracleParameterCollection paramColl, OracleConnection connection, Int32 paramCount, String commandText, Int64 longFetchSize, Int64 clientInitialLOBFS, Int64 internalInitialLOBFS, Int64[] scnFromExecution, Boolean bCallFromExecuteReader)
   at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Boolean fillRequest, CommandBehavior behavior)
   at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteReader()
   at Oracle.ManagedDataAccess.Client.OracleCommand.ExecuteScalar()
   at FassiLib.REPCollector.DB.REP.HasCodUniorgLinkedToREP(Int64 numIdRep)
有人知道为什么会抛出此异常吗

有时,它在执行过程中由多个线程抛出。其他时间仅由一个线程执行。 大多数异常执行根本不会抛出

该程序具有批处理行为,每次执行大约创建70个线程


TIA

您的连接对象oraConn是否存在,是否实例化并打开?我曾经遇到过类似的问题。OracleCommand的实例方法不能保证线程安全。对它是一个类变量,在类构造函数上创建/实例化/打开。@Edgarochacarvalho,非常有趣。我将用静态方法进行测试。。。忘了我最后的评论吧。ExecuteScalar没有静态版本。我将使用OracleDataAdapter/DataSet重写。