2016-08-10 4 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? также используйте отладчик, чтобы узнать, что такое количество записей. имеет ли журнал метод «Добавить»? – MethodMan

+4

Вы заменяете 'logs' каждую итерацию цикла. Вероятно, вы хотите добавить в «Список » или что-то в этом роде. Поскольку у вас есть это, вы действительно можете получить только одну запись. –

ответ

9

В вашей петле вы постоянно воссоздаете экземпляр переменной logs, тем самым перезаписывая предыдущую и заканчивая значением последней записи, возвращаемой вашим запросом. Вам нужен List<Log>

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

Вы можете использовать этот список в качестве источника данных для сетки или просто сохранить его для будущих ссылок ...

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

очень приятно :) – Werdna

Смежные вопросы