2016-08-10 2 views
2

데이터베이스가 너무 커서 처음 SQL을 테스트 할 때 select *을 수행하고 첫 번째 행만 반환했습니다.SqlCommand는 한 행만 반환합니다.

SqlCommand sqlCmd = new SqlCommand(); 
SqlDataReader reader; 

sqlCmd.CommandText = "SELECT * FROM Log"; 
sqlCmd.CommandType = CommandType.Text; 
sqlCmd.Connection = myConnection; 

myConnection.Open(); 

reader = sqlCmd.ExecuteReader(); 

Log logs = null; 

while (reader.Read()) 
{ 
    logs = new Log(); 
    logs.Id = Convert.ToInt32(reader.GetValue(0)); 
} 

return logs; 
myConnection.Close(); 

내 솔루션에 어떤 문제가 있습니까?

+1

reader.GetValue (0) 항상 0 번째 기록을 반환해야합니다 ? – mmcrae

+0

위치 0에있는 값 열 이름은 무엇입니까? 디버거를 사용하여 레코드 개수를 확인하십시오. 로그에'Add' 메소드가 있습니까? – MethodMan

+4

루프의 반복마다'logs'를 대체합니다. 아마도'List '또는 그와 같은 것을 추가하려고합니다. 가지고 계시 겠지만 실제로는 하나의 기록 만 얻을 수 있습니다. –

답변

9

루프에서 항상 변수 logs의 인스턴스를 다시 작성하여 이전 쿼리를 덮어 쓰고 쿼리에서 반환 한 마지막 레코드의 값으로 끝납니다. 당신은 당신은 그리드에 대한 데이터 소스로이 목록을 사용하거나 당신의 미래 참조를 위해 그것을 유지할 수

List<Log> logs = new List<Log>(); 
    while (reader.Read()) 
    { 
     Log current = new Log(); 
     logs.Id = Convert.ToInt32(reader.GetValue(0)); 
     logs.Add(current); 
    } 

List<Log> ...

foreach(Log log in logs) 
     MessageBox.Show(log.Id); 
+0

정말 좋은 :) – Werdna

관련 문제