簡體   English   中英

為什么IDataReader會丟失一行?

[英]Why does IDataReader lose a row?

我正面臨這個問題。 我有一個存儲過程,當我執行它時返回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);
      }
   }

dbase是我的數據庫對象。 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

你的第一個dr.Read正在前進到第一行。 DataTable.Load正在讀取剩余的行而不是第一行

使用HasRows測試是否存在,並且不要在DataTable.Load之前使用Read

編輯:

只需加載DataTable而不先測試:然后在DataTable上進行測試。 IDataReader接口中沒有HasRows。

joshua我在使用企業庫兩次以上時也有這個問題,即使我使用相同的代碼寫下來但是我在我的商店程序中發現問題的時候必須在查詢中有任何錯誤的選擇或者認為其他哪個數據庫服務器沒有檢測到我解決了它,我的IDataReader選擇所有行,並使用與'gbn'建議相同的方式使用(IDataReader dr = oDb.ExecuteReader(p_oDbCommand)){

                if (dr != null)
                {

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

            }
            return dt;

IDataReader是一個前向閱讀器,它意味着當你讀取一行時,該行將從閱讀器中刪除,你不能再從閱讀器中獲取它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM