[英]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.