为什么IDataReader会丢失一行?

jos*_*hua 5 c# sql asp.net enterprise-library

我正面临这个问题.我有一个存储过程,当我执行它时返回6行.

但是当我使用时检索应用程序中的行时ExecuteReader,它只返回5行.为什么会失去一排?

我的存储过程包含5个union语句,这些语句从单个表中填充:

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

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

dbase是我的数据库对象.并且cmdSqlCommand用来调用存储过程.

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
Run Code Online (Sandbox Code Playgroud)

gbn*_*gbn 12

你的第一个dr.Read是前进到第一行.DataTable.Load正在读取剩余的行而不是第一行

使用HasRows测试是否存在,并且Read在之前不使用DataTable.Load

编辑:

只需加载DataTable而不先测试:然后在DataTable上进行测试.IDataReader接口中没有HasRows.