У вас проблема с ...
while (dr.HasRows)
{
/* If this loop is entered, it will run
* indefinitely until the datareader miraculously
* loses all its rows in a hole somewhere */
}
Это либо никогда не войдет, либо создаст бесконечный цикл ... либо у него нет строк, либо есть строки. Я думаю, что вы имели в виду:
while (dr.Read())
{
/* Do something with the current record */
}
dr.Read()
возвращается к следующей записи и возвращает истину или ложь в зависимости от того, есть запись для чтения или нет. Когда считыватель данных инициализируется, первая запись не выбрана . Его нужно выбрать, вызвав dr.Read()
, который затем вернет true, если найдена первая строка, и действительно вернет true, пока Read () не будет вызван, когда в данный момент находится в последней строке - т.е. больше не осталось строк для чтения. 1011 *
dr.HasRows
- это просто свойство, которое сообщает вам, содержит ли заголовок данных строки ... которые, если это произойдет, сохранят строки отсюда до вечности. Например, вы должны использовать это, если хотите что-то сделать, если у него есть строки, а что-то еще, если его нет:
if (dr.HasRows)
{
while (dr.Read())
{
/* Display data for current row */
}
}
else
{
Console.WriteLine("I didn't find any relevant data.");
}