为什么idatreader丢失一行

本文关键字:一行 idatreader 为什么 | 更新日期: 2023-09-27 18:16:49

我正面临这个问题。我有一个存储过程,当我执行它时返回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是我的数据库对象。cmd是用来调用存储过程的SqlCommand

UserID is parameter is passing

存储过程代码为:

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

为什么idatreader丢失一行

您的第一个dr.Read正在前进到第一行。数据表。Load正在读取剩余的行,但不读取第一行

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

编辑:

先加载数据表而不测试,然后在数据表上测试。IDataReader接口中没有HasRows

IDataReader是前向读取器,这意味着当你读取一行时,该行将从读取器中删除,你不能再从读取器中获取它

joshua我也有这个问题,而使用企业库超过两次,即使我使用相同的代码写下来,但这两次我都在我的存储过程中发现了一个问题,在查询中必须有任何错误的选择或任何其他db服务器不检测的想法,我解决它和我的IDataReader选择所有行,也使用相同的方式建议'gbn'使用(IDataReader dr = oDb.ExecuteReader(p_oDbCommand)){

                if (dr != null)
                {
                   ds.Tables[0].Load(dr);
                }
            }
            return dt;