Обработка ExecuteScalar (), когда никакие результаты не возвращаются

Я использую следующий SQL-запрос и ExecuteScalar() метод для выборки данных из базы данных Oracle:

sql = "select username from usermst where userid=2"
string getusername = command.ExecuteScalar();

Это показывает мне это сообщение об ошибке:

Система. NullReferenceException: Ссылка на объект не набор к экземпляру объекта

Эта ошибка происходит, когда нет никакой строки в таблице базы данных для userid=2.
Как я должен обработать эту ситуацию?

55
задан Hakan Fıstık 23 July 2018 в 15:27
поделиться

4 ответа

Небольшая догадка: если проверить стек на наличие исключения, то провайдер ADO.NET для Oracle считывает лежащий в основе строк, чтобы получить первое значение.

Если нет строки, то нет и значения.

Для обработки этого случая выполните для читателя и обработайте Next(), возвращая false для случая отсутствия совпадений.

.
0
ответ дан 26 November 2019 в 17:43
поделиться

Сначала необходимо убедиться, что ваш объект команды не является нулевым. Затем необходимо установить свойство CommandText команды на sql запрос. Наконец, вы должны сохранить возвращаемое значение в объектной переменной и проверить, не является ли оно нулевым, прежде чем использовать его:

command = new OracleCommand(connection)
command.CommandText = sql
object userNameObj = command.ExecuteScalar()
if (userNameObj != null)
  string getUserName = userNameObj.ToString()
 ...

Я не уверен насчет синтаксиса VB, но вы поняли идею.

49
ответ дан 26 November 2019 в 17:43
поделиться

Следующая строка:

string getusername = command.ExecuteScalar();

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

string getusername = (string)command.ExecuteScalar();

Обычный оператор приведения завершится ошибкой, если объект равен нулю. Попробуйте использовать as-оператор, например:

string getusername = command.ExecuteScalar() as string;
10
ответ дан 26 November 2019 в 17:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: