Состояние записи в считывателе данных - PullRequest
0 голосов
/ 23 марта 2020

Вот мой код:

SqlCommand command = new SqlCommand("select * from table1 where col1 = 'YES'", conn);
command.CommandType = CommandType.Text;
SqlDataReader dr = command7.ExecuteReader();

if (dr.RecordsAffected>0)
{

}

запрос на выборку проходит условие для нескольких значений, но все же обходит условие if.

1 Ответ

2 голосов
/ 23 марта 2020

См. Документацию . Оператор выбора не влияет на строки, он не вставляет, не удаляет и не обновляет строки. Таким образом, значение всегда будет 0 с выбором. Если вы хотите проверить, есть ли возвращенные записи, используйте HasRows.

using(SqlCommand command = new SqlCommand("select * from table1 where col1 = 'YES'", conn))
{
  command.CommandType = CommandType.Text;
  using(SqlDataReader dr = command7.ExecuteReader()) {
    if (dr.HasRows) {

    }
  }
}

Примечания:

  • Оберните ваши экземпляры там, где реализован тип IDisposable в блоке using, чтобы гарантировать, что неуправляемые ресурсы всегда высвобождаются.
  • Если у вас есть входные данные, которые вы хотите использовать в своих выражениях, тогда используйте параметры вместо значений жесткого кодирования. Не ясно, так ли это в данном случае, поэтому я оставил утверждение как есть.
  • Если вы собираетесь читать данные обратно в считывателе, вам не следует использовать *, вместо этого укажите имена столбцов в ВЫБРАТЬ. Это может защитить ваш код от изменений в схеме, таких как порядок определения столбцов в таблице. Пример: SELECT col1, col2, col3 FROM table....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...