SqlCommand.ExecuteScalar Метод

Определение

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

public override object ExecuteScalar ();
public object ExecuteScalar ();

Возвращаемое значение

Первый столбец первой строки набора результатов или пустая ссылка (Nothing в Visual Basic), если набор результатов пуст. Возвращает не более 2033 символов.

Реализации

Исключения

Если SqlDbType для параметра задано значение Stream, отличное от Binary или VarBinary, использовалось Value значение . Дополнительные сведения о потоковой передаче см. в разделе Поддержка потоковой передачи SqlClient.

-или-

Если SqlDbType для параметра задано значение TextReader, кроме Char, NChar, NVarChar, VarChar или Xml, использовался объект , отличный от ValueChar, NChar, NVarChar, VarChar или Xml.

-или-

Объект , отличный SqlDbType от XML , использовался, когда Value для параметра задано значение XmlReader.

Возникло исключение при выполнении команды в заблокированной строке. Это исключение не создается при использовании платформы Microsoft .NET Framework версии 1.0.

-или-

Во время операции потоковой передачи истекло время ожидания. Дополнительные сведения о потоковой передаче см. в разделе Поддержка потоковой передачи SqlClient.

Подключение SqlConnection, закрытое или удаленное во время операции потоковой передачи. Дополнительные сведения о потоковой передаче см. в разделе Поддержка потоковой передачи SqlClient.

Во время операции потоковой передачи возникла ошибка в объекте Stream, XmlReader или TextReader. Дополнительные сведения о потоковой передаче см. в разделе Поддержка потоковой передачи SqlClient.

Объект Stream, XmlReader или TextReader был закрыт во время операции потоковой передачи. Дополнительные сведения о потоковой передаче см. в разделе Поддержка потоковой передачи SqlClient.

Примеры

В следующем примере создается SqlCommand и выполняется с помощью ExecuteScalar. В этом примере передается строка, представляющая новое значение для вставки в таблицу, и строка, используемая для подключения к источнику данных. Функция возвращает новое значение столбца Identity , если была вставлена новая строка, 0 при сбое.

static public int AddProductCategory(string newName, string connString)
{
    Int32 newProdID = 0;
    string sql =
        "INSERT INTO Production.ProductCategory (Name) VALUES (@Name); "
        + "SELECT CAST(scope_identity() AS int)";
    using (SqlConnection conn = new SqlConnection(connString))
    {
        SqlCommand cmd = new SqlCommand(sql, conn);
        cmd.Parameters.Add("@Name", SqlDbType.VarChar);
        cmd.Parameters["@name"].Value = newName;
        try
        {
            conn.Open();
            newProdID = (Int32)cmd.ExecuteScalar();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
    }
    return (int)newProdID;
}

Комментарии

Используйте метод , ExecuteScalar чтобы получить одно значение (например, агрегированное) из базы данных. Для этого требуется меньше кода, чем при использовании ExecuteReader метода , а затем выполнение операций, необходимых для создания одного значения с использованием данных, возвращаемых SqlDataReader.

Типичный ExecuteScalar запрос можно отформатировать, как показано в следующем примере C#:

cmd.CommandText = "SELECT COUNT(*) FROM dbo.region";
Int32 count = (Int32) cmd.ExecuteScalar();

Применяется к

Продукт Версии
.NET Core 1.0, Core 1.1, 6 (package-provided), 8 (package-provided)
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7 (package-provided), 4.7, 4.7.1 (package-provided), 4.7.1, 4.7.2 (package-provided), 4.7.2, 4.8 (package-provided), 4.8, 4.8.1
.NET Standard 2.0 (package-provided)

См. также раздел