Я использую следующий SQL-запрос и ExecuteScalar()
метод для выборки данных из базы данных Oracle:
sql = "select username from usermst where userid=2"
string getusername = command.ExecuteScalar();
Это показывает мне это сообщение об ошибке:
Система. NullReferenceException: Ссылка на объект не набор к экземпляру объекта
Эта ошибка происходит, когда нет никакой строки в таблице базы данных для userid=2
.
Как я должен обработать эту ситуацию?
Небольшая догадка: если проверить стек на наличие исключения, то провайдер ADO.NET для Oracle считывает лежащий в основе строк, чтобы получить первое значение.
Если нет строки, то нет и значения.
Для обработки этого случая выполните для читателя и обработайте Next()
, возвращая false для случая отсутствия совпадений.
Сначала необходимо убедиться, что ваш объект команды не является нулевым. Затем необходимо установить свойство CommandText команды на sql запрос. Наконец, вы должны сохранить возвращаемое значение в объектной переменной и проверить, не является ли оно нулевым, прежде чем использовать его:
command = new OracleCommand(connection)
command.CommandText = sql
object userNameObj = command.ExecuteScalar()
if (userNameObj != null)
string getUserName = userNameObj.ToString()
...
Я не уверен насчет синтаксиса VB, но вы поняли идею.
есть несколько дополнительных подсказок , которые могут помочь. . пример:
using System;
using System.Data;
using System.Data.SqlClient;
class ExecuteScalar
{
public static void Main()
{
SqlConnection mySqlConnection =new SqlConnection("server=(local)\\SQLEXPRESS;database=MyDatabase;Integrated Security=SSPI;");
SqlCommand mySqlCommand = mySqlConnection.CreateCommand();
mySqlCommand.CommandText ="SELECT COUNT(*) FROM Employee";
mySqlConnection.Open();
int returnValue = (int) mySqlCommand.ExecuteScalar();
Console.WriteLine("mySqlCommand.ExecuteScalar() = " + returnValue);
mySqlConnection.Close();
}
}
из этой здесь
Следующая строка:
string getusername = command.ExecuteScalar();
... будет пытаться неявно преобразовать результат в строку, как показано ниже:
string getusername = (string)command.ExecuteScalar();
Обычный оператор приведения завершится ошибкой, если объект равен нулю. Попробуйте использовать as-оператор, например:
string getusername = command.ExecuteScalar() as string;