2010-04-06 3 views
1

시나리오는 다음과 같습니다. datatable.load를 사용하여 sqldatareader를 datatable로 변환하려고 할 때 아무것도 반환하지 않는 것처럼 보이는 sqldatareader 쿼리가 있습니다.VB.net 디버그 sqldatareader - 직접 실행 창

그래서 디버깅하기 위해 sqldatareader에 들어가기 전에 상세한 SQL 쿼리를 가져 와서 올바르게 형식화되었는지 확인하십시오. 복사하여 SQL 서버에 붙여 넣기하여 실행하고 반환하는지 확인합니다. 그것은 하나의 행입니다.

Visual Studio로 돌아가서 프로그램을 계속 진행하면서 datatable을 만들고 sqldatareader를로드하려고 시도하지만 빈 판독기 만 반환합니다. 나는 무슨 일이 벌어지고 있는지 당혹 스럽다.

는 여기 코드 (안 정확한 SQL의 내가 사용 쿼리하지만 닫기)의 버전을 복사 할 수 있습니다 :

Dim cn As New SqlConnection 
cn.ConnectionString = <connection string details here> 
cn.Open() 
Dim sqlQuery As String = "select * from Products where productid = 5" 
Dim cm As New SqlCommand(sqlQuery, cn) 
Dim dr As SqlDataReader = cm.ExecuteReader() 

Dim dt as new DataTable 
dt.load(dr) 

DT는 내용을 가지고 있어야하지만 비어. SQL 쿼리를 SQL 서버에 복사하고 실행하면 결과 행이 표시됩니다.

내가 잘못하고있는 아이디어가 있습니까?

######### UPDATE ############

나는 지금 내가 함께 얻을 수보다 하나 개 적은 행을 반환하는 것으로 보인다 것으로 나타났습니다 각 SQL 쿼리. 그래서, 만약 내가 SQL을 직접 실행하고 1 행을 얻으면 데이터 테이블에 0 행이있는 것 같습니다. 쿼리가 4 행을 반환하면 데이터 테이블에 3이 있습니다! 아주 이상한, 어떤 아이디어?

######### 후 업데이트 ############

좋아 나는를 사용하기 전에 DataReader가의 행을 계산하는 루프를 완료했습니다 datatable.load 메소드. 내 테스트 쿼리에서 datatable.load 메서드를 사용하자마자 datareader에서 4 행 (올바른 값)을 얻습니다. 데이터 테이블이 비어 있다고 말합니다. 어떻게됩니까?

###### 좋아

는 그래서는 DataReader를이 행 수를 얻기 위해 그것을 통해 반복, 단방향 일이 보인다는 지금까지 코드의 다른 비트에 관한 한 기본적으로 비어 있습니다. 그것이 단지 앞으로이고, 읽히고 난 후에 'reset'을하지 않을 것이다라는 것을 깨닫지 못했다.

+0

나는 VB.Net이 (더 나은 용어가 부족하여) 파싱하는 방식 때문에 매우 유사한 결과를 보았습니다 ... Tablenames 및/또는 Columnnames와 같은 []와 같이 사용할 수있는 "명백한"구문 메커니즘을 사용해보십시오. SQL 문 등 ... .load 대신 SqlDataAdapter (.fill)를 사용하여 데이터가 표시되는지 확인할 수도 있습니다 쪽으로. – tobrien

+0

예, SqlDataReader는 설명서에서 "앞으로 SQL Server 데이터베이스에서 전달 전용 스트림을 읽는 방법을 제공합니다." http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldatareader.aspx –

답변

1

삽입 dt.load (DR) 현제 라인, 디버그 창에서 값을 확인 :

cm.ExecuteReader(CommandBehavior.CloseConnection); 
:

Debug.WriteLine("Datareader has rows: " & dr.HasRows) 

또한 당신의 연결에 cm.ExecuteReader()을 변경하여 종료됩니다 확인

+1

또한 DataReader가 끝나면 닫으십시오. http://msdn.microsoft.com/en-us/library/haa3afyz(VS.80).aspx – DOK

+0

좋아, 위의 모든 것을 시도하고 내가 어떻게에, 감사를 얻을 볼 수 있습니다! –