Я выполняю несколько SQL-запросов в виде пакета, а затем возвращаю все наборы результатов обратно в пакет. То, как мой код в настоящее время составляется, первый набор результатов пропускается. Теперь, когда я это знаю, я мог бы просто добавить другой оператор вне моего цикла, который получает первый результат, однако мне интересно, есть ли более элегантное решение этой проблемы.
Вот некоторый sudo-код происходящего:
DbDataReader reader= /*some stuff that returns a batch of results...*/;
while (reader.NextResult())
{
while (reader.Read())
{
if (!reader.IsDBNull(0))
{
//do things with the data....
}
}
}
Теперь я ожидал бы, что NextResult () продвигает вас к первому результату при первом вызове, что, похоже, делает Read (). Однако то, что он действительно делает, это приводит вас ко второму результату при первом вызове. Я неправильно понимаю, как вы собираетесь использовать этот метод, или вы действительно должны сделать что-то вроде следующего:
DbDataReader reader= /*some stuff that returns a batch of results...*/;
//this deals with the row in the the very first result
while (reader.Read())
{
if (!reader.IsDBNull(0))
{
//do things with the data....
}
}
//this deals with the rest of the rows...
while (reader.NextResult())
{
while (reader.Read())
{
if (!reader.IsDBNull(0))
{
//do exact same things with the data....
//is this not pretty klugey?
}
}
}
Это кажется мне гнилым стилем программирования, но я не вижу выхода из этого. Кто-нибудь знает более изящное решение для этого?