OracleCommand ExecuteScalar иногда возвращает ноль

1

Я использую следующий код для выполнения скалярного SQL-запроса в С#. Иногда это прерывается с исключением NullReferenceException, где я устанавливаю 'res'. Любые идеи, почему это иногда случается? (возможно, когда я делаю несколько запросов одновременно) Примечание: я использую тот же запрос... и иногда он возвращает null.

public void ExecScalarQuery(String query)
{
    OracleConnection conn = new OracleConnection(connectionString);
    try
    {
        conn.Open();
        OracleCommand cmd = new OracleCommand();
        cmd.Connection = conn;
        cmd.CommandText = query;// "select count(*) from SALES_ADVENTUREWORKS2012.SALESORDERDETAIL where PRODUCTID=709";
        cmd.CommandType = CommandType.Text;
        cmd.CommandTimeout = QUERY_TIMEOUT;
        String res = cmd.ExecuteScalar().ToString();
    }
    finally
    {
        conn.Close();
    }
}
  • 0
    Если запрос возвращает null ... тогда вы не можете вызвать toString () для него.
  • 1
    Вы также должны иметь OracleConnection и OracleCommand в using блоков.
Показать ещё 2 комментария
Теги:

1 ответ

2

Не является неожиданным, что ExecuteScalar() может вернуть null значение. Проще говоря, это происходит потому, что вы выполнили запрос, который не возвращал результирующий набор.

Вы должны следить за тем, когда это произойдет:

String res = "";
Object o = cmd.ExecuteScalar();
if (o != null)
    res = o.ToString();
  • 3
    Чтобы быть справедливым по отношению к спрашивающему, обычно выберите count (*) никогда не возвращает ноль
  • 0
    @DarrenKopp Конечно, вы предполагаете, что закомментированный SQL - это тот, который выдается при возникновении ошибки. Неопределенность вопроса и высказывание «возможно, когда я делаю несколько запросов одновременно» говорит о том, что вы, вероятно, ошибаетесь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню