SQL Datareader не содержит значений - PullRequest
1 голос
/ 19 ноября 2011

Я работаю с проектом последние 4 месяца. Мы используем пользовательские рамки для разработки. Проблема, о которой я говорю, работала для всех остальных классов. Но впервые я сталкиваюсь с этим странным инцидентом. Теперь прямо к точке разрыва.

Мой фреймворк похож на

public static List<ViewNotSetBillableCoursesEntity> GetAllNotSetBillableCources()
        {
            try
            {
                List<ViewNotSetBillableCoursesEntity> entities = new List<ViewNotSetBillableCoursesEntity>();
                string command = SELECT;
                SqlConnection sqlConnection = MSSqlConnectionHandler.GetConnection();
                SqlDataReader dataReader = QueryHandler.ExecuteSelect(command, sqlConnection);

                entities = Maps(dataReader);
                dataReader.Close();
                return entities;
            }
            catch (Exception exception)
            {
                throw exception;
            }
        }

В вышеупомянутом методе dataReader отправляется методу Maps.

Метод Карт - ......

private static List<ViewNotSetBillableCoursesEntity> Maps(SqlDataReader theReader)
    {
        SQLNullHandler nullHandler = new SQLNullHandler(theReader);
        // the incident is happening here, the SQLNullHandler is given below.
        List<ViewNotSetBillableCoursesEntity> entities = null;
        while (theReader.Read())
        {
            if (entities == null)
            {
                entities = new List<ViewNotSetBillableCoursesEntity>();
            }
            ViewNotSetBillableCoursesEntity entity = Mapper(nullHandler);
            entities.Add(entity);
        }

        return entities;
    }

SQLNullHandler приведен ниже:

puplic Class SQLNullHandler
  {
      private IDataReader _reader;
      public SQLNullHandler(IDataReader reader)
        {
            _reader = reader;
        }
      #region Get Null value
    public static object GetNullValue(int Value)
    {
        if(Value==0)
        {
            return null;
        }
        else
        {
            return Value;
        }
    }

    public static object GetNullValue(double Value)
    {
        if (Value == 0)
        { 
            return null; 
        }
        else
        { 
            return Value; 
        }
    }

    public static object GetNullValue(decimal Value)
    {
        if (Value == 0)
        { 
            return null; 
        }
        else
        { 
            return Value; 
        }
    }

    public static object GetNullValue(DateTime Value)
    {
        if(DateTime.MinValue==Value)
        {
            return null;
        }
        else
        {
            return Value;
        }
    }

    public static object GetNullValue(string Value)
    {
        if(Value.Length<=0)
        {
            return null;
        }
        else
        {
            return Value;
        }
    }
    #endregion
      public IDataReader  Reader
    {
        get{return _reader;}
    }
     public bool IsNull(int index)
    {
        return _reader.IsDBNull(index);
    }

    public int GetInt32(int i)
    {
        return _reader.IsDBNull(i)? 0 : _reader.GetInt32(i);
    }

    public byte GetByte(int i)
    {
        return _reader.IsDBNull(i)? (byte)0 : _reader.GetByte(i);
    }
           //and so on for all possible type for this app
  }

Забавно, что для всех этих классов эти методы и строки кода работают очень хорошо, но в этом сценарии после строки SQLNullHandler nullHandler = new SQLNullHandler (theReader); держатель данных становится пустым. Мои вопросы

  1. Почему это происходит, а затем,
  2. что можно сделать, чтобы решить эту проблему?
...