SqlDataReader не возвращает все записи (3-я попытка)

Мы пытались найти решение этой проблемы дважды, но, к сожалению, эти ответы не нашлиЯ обеспечил постоянное исправление, так что вот я, давая ему еще одну попытку.

У меня есть хранимая процедура SQL Server, которая возвращает список из 1,5 миллионов целочисленных идентификаторов. Я вызываю этот SP из кода ASP.NET/VB.NET и выполняю SqlDataReader:

m_dbSel.CommandType = CommandType.StoredProcedure
m_dbSel.CommandText = CstSearch.SQL.SP_RS_SEARCH_EX
oResult = m_dbSel.ExecuteReader(CommandBehavior.CloseConnection)

Затем я передаю этот читатель конструктору классов для создания универсального списка (целочисленного). Код очень простой:

Public Sub New(i_oDataReader As Data.SqlClient.SqlDataReader)

    m_aFullIDList = New Generic.List(Of Integer)

    While i_oDataReader.Read
        m_aFullIDList.Add(i_oDataReader.GetInt32(0))
    End While

    m_iTotalNumberOfRecords = m_aFullIDList.Count

End Sub

Проблема в том, что это неЕсли не прочитать все 1,5 миллиона записей, это число является непоследовательным, окончательное число может составить 500 000 или 1 миллион и т. д. (чаще всего "магия» количество524289 записи возвращаются). Я'мы пытались использоватьCommandBehavior.SequentialAccess установка при выполнении команды, но результаты также оказались противоречивыми.

Когда я запускаю SP в SSMS, он почти сразу возвращает определенное количество записей и отображает их, но затем продолжает работать еще несколько секунд, пока не будут выполнены все 1,5 миллиона записей - имеет ли это какое-либо отношение к этому?

ОБНОВИТЬ

Через некоторое время я обнаружил, что в очень-очень редких случаях код цикла выше выдает исключение:

System.NullReferenceException: ссылка на объект не установлена на экземпляр объекта. в System.Data.SqlClient.SqlDataReader.ReadColumnHeader (Int32 i)

Так что некоторый внутренний сбой действительно случается. Также похоже, что если я заменю

While i_oDataReader.Read
  m_aFullIDList.Add(i_oDataReader.GetInt32(0))
End While

который имеет дело с целыми числами с

While i_oDataReader.Read
   m_aFullIDList.Add(i_oDataReader(0))
End While

это имеет дело с объектами - кажется, что код работает без сбоев и возвращает все записи.

Пойди разберись.

Ответы на вопрос(2)

Ваш ответ на вопрос