在Oracle.ManagedDataAccess.Client ExecuteScalar上抛出NullReferenceException

时间:2015-09-29 19:15:42

标签: c# oracle

我遇到了在多线程程序上抛出间歇性异常的问题。 这些异常来自对OracleCommand.ExecuteScalar的调用。 使用的查询是count(*),因此无法返回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

0 个答案:

没有答案