为什么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
您的第一个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;