Как получить скалярную величину из хранимой процедуры (ADO.NET)

!important является частью CSS1.

Браузеры, поддерживающие его: IE5.5+, Firefox 1+, Safari 3+, Chrome 1+.

Это означает, что-то вроде:

Используйте меня, если вокруг нет ничего более важного!

Не могу сказать, что лучше.

7
задан Andy Mikula 10 July 2009 в 16:43
поделиться

2 ответа

Либо вы используете ExecuteScalar, как предложил Эндрю, либо вам придется немного изменить свой код:

CREATE PROCEDURE dbo.CountRowsInTable(@RowCount INT OUTPUT)
AS BEGIN
  SELECT
    @RowCount = COUNT(*)
  FROM 
    SomeTable
END

, а затем использовать этот вызов ADO.NET для получения значения:

using(SqlCommand cmdGetCount = new SqlCommand("dbo.CountRowsInTable", sqlConnection))
{
  cmdGetCount.CommandType = CommandType.StoredProcedure;

  cmdGetCount.Parameters.Add("@RowCount", SqlDbType.Int).Direction = ParameterDirection.Output;

  sqlConnection.Open();

  cmdGetCount.ExecuteNonQuery();

  int rowCount = Convert.ToInt32(cmdGetCount.Parameters["@RowCount"].Value);

  sqlConnection.Close();
}

Marc

PS: но в этом конкретном примере, я думаю, альтернатива с простым выполнением ExecuteScalar проще и понятнее. Этот метод может работать нормально, если вам нужно вернуть более одного значения (например, количество из нескольких таблиц и т. Д.).

7
ответ дан 6 December 2019 в 15:29
поделиться

Когда вы выполняете вызов запроса ExecuteScalar - это возвращает результат.

Выполняет запрос и возвращает первый столбец первой строки в возвращенном наборе результатов по запросу. Дополнительные столбцы или строки игнорируются.

Поскольку вы возвращаете только одно значение, оно вернет только значение из выражения count . Вам нужно будет привести результат этого метода к int .

6
ответ дан 6 December 2019 в 15:29
поделиться
Другие вопросы по тегам:

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