2011-12-06 2 views
5

이 문제가 발생합니다. 나는 그것을 실행할 때 6 행을 반환하는 저장 프로 시저가 있습니다.IDataReader가 행을 잃는 이유는 무엇입니까?

그러나 내 응용 프로그램에서 ExecuteReader을 사용하여 행을 검색 할 때 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 내 데이터베이스 객체입니다

내 저장 프로 시저는 하나의 테이블에서 채워지고 5 조합 문으로 구성되어 있습니다. cmd은 저장 프로 시저를 호출하는 데 사용되는 SqlCommand입니다.

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 
+3

을 보여주십시오 암호. –

+1

저장 프로 시저도 함께 표시하십시오. – Fischermaen

답변

12

가 첫 번째 dr.Read는 첫 번째 행에 진행되고 :

UserID는 매개 변수가

저장 프로 시저 코드가 전달된다. 첫 번째 테스트하지 않고

는 그냥 DataTable을로드하십시오 DataTable.Load는 나머지 행이 아닌 첫 번째 행

사용 HasRows 존재 여부를 테스트하고 DataTable.Load

편집하기 전에 Read를 사용하지 않는을 읽고 그런 다음 DataTable에서 테스트하십시오. IDataReader 인터페이스에는 HasRows가 없습니다.

+0

감사합니다. Pal i miss basic의 – joshua

+1

불행히도'IDataReader'는'HasRows'를 가지고 있지 않습니다. 그래서'DataTable'을 만들고 결과가 대신 행을 가지고 있는지 확인해보십시오. –

+0

@ C.Evenhuis : 예, 업데이트 할 것입니다. – gbn

0

IDataReader는 순방향 리더이므로 행을 읽을 때 해당 행이 리더에서 삭제되고 더 이상 리더에서 가져올 수 없음을 의미합니다.

+0

그것은 독자의 기본적인 행동입니다 – joshua

0

joshua 심지어 두 번 이상 같은 코드를 사용하여 엔터프라이즈 라이브러리를 사용하는 동안이 문제가 있지만 둘 다 시간이 내 저장소 프로 시저에 문제가있는 쿼리에서 잘못된 선택 또는 다른 db 서버가 감지하지 않고 난 내 IDataReader에 모든 행을 선택하고 또한 사용 'GBN'에 의해 제안으로 같은 방법을 사용 를 해결하고 (IDataReader에의 닥터 = oDb.ExecuteReader (p_oDbCommand)) {

   if (dr != null) 
       { 

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

      } 
      return dt; 
관련 문제