Почему IDataReader теряет ряд? - PullRequest
       3

Почему IDataReader теряет ряд?

5 голосов
/ 06 декабря 2011

Я столкнулся с этой проблемой.У меня есть хранимая процедура, которая возвращает 6 строк, когда я ее выполняю.

Но когда я получаю строки в моем приложении, используя ExecuteReader, он возвращает только 5 строк. Почему теряется строка ??

Моя хранимая процедура состоит из 5 операторов объединения, которые заполняются из одной таблицы:

 dbase.AddInParameter(cmd, "@LoginUser", DbType.String, UserID);

   try
   {
      using (IDataReader  dr = dbase.ExecuteReader(cmd))
      if (dr.Read())
      {
         dt = new DataTable("DashBoard");
         dt.Load(dr);
      }
   }

dbase isмой объект базы данных.И cmd - это SqlCommand, используемый для вызова хранимой процедуры.

UserID - передача параметра

Код хранимой процедуры:

ALTER PROCEDURE [dbo].[USP_ViewAdminDashBoard](@LoginUser varchar(75)) 
    -- Add the parameters for the stored procedure here
AS
BEGIN

    SET NOCOUNT ON;
    SET DATEFORMAT DMY;
    DECLARE @LastLoginDate  as DateTime

        Select @LastLoginDate = dbo.UDF_GetLastLoginByUser(@LoginUser)
    Select 'Last Login Date', convert(varchar(12),@LastLoginDate,105)

    Union 
    Select  'Nos. Records pending for Upload' as Title, convert(varchar(5),COUNT(s.BatchID)) Total from  dbo.BREGISTRATIONENTRY s, Dbo.TBL_iBATCH B
    where  B.BatchID = s.BatchID And b.Forwarded = 0 and b.isBatchClosed = 1
END

Ответы [ 3 ]

12 голосов
/ 06 декабря 2011

Ваш первый dr.Read продвигается к первому ряду.DataTable.Load читает оставшиеся строки, но не первую строку

Используйте HasRows для проверки существования и не используйте Read до DataTable.Load

Редактировать:

Просто загрузите DataTable без предварительного тестирования, а затем протестируйте DataTable.В интерфейсе IDataReader нет HasRow.

0 голосов
/ 03 мая 2013

Джошуа, у меня также есть эта проблема, когда я использую корпоративную библиотеку более двух раз, даже если я использую один и тот же код, записанный, но оба раза, когда я обнаружил проблему в моей процедуре хранилища, должен быть какой-то неправильный выбор в запросе или другие мысли, какой сервер БД не обнаруживает и я решаю это и мой IDataReader выделил все строки и также использовал тот же способ, который предлагает 'gbn' используя (IDataReader dr = oDb.ExecuteReader (p_oDbCommand)) {

                if (dr != null)
                {

                   ds.Tables[0].Load(dr);
                }

            }
            return dt;
0 голосов
/ 06 декабря 2011

IDataReader - читатель пересылки, это означает, что когда вы читаете строку, эта строка будет удалена из программы чтения, и вы больше не сможете получить ее из программы чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...