SqlCommand.ExecuteScalar Метод

Определение

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

public:
 override System::Object ^ ExecuteScalar();
public:
 virtual System::Object ^ ExecuteScalar();
public override object ExecuteScalar();
public object ExecuteScalar();
override this.ExecuteScalar : unit -> obj
abstract member ExecuteScalar : unit -> obj
override this.ExecuteScalar : unit -> obj
Public Overrides Function ExecuteScalar () As Object
Public Function ExecuteScalar () As Object

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

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

Реализации

Исключения

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

–или–

Если SqlDbType задано значение "Char", "NChar", "NVarChar", Value" или TextReader"

–или–

Значение SqlDbType , отличное от xml , использовалось при Value установке XmlReader.

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

–или–

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

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

Ошибка произошла в объекте StreamXmlReader или 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;
}
Public Function AddProductCategory( _
  ByVal newName As String, ByVal connString As String) As Integer
    Dim newProdID As Int32 = 0
    Dim sql As String = _
     "INSERT INTO Production.ProductCategory (Name) VALUES (@Name); " _
       & "SELECT CAST(scope_identity() AS int);"

    Using conn As New SqlConnection(connString)
        Dim cmd As New SqlCommand(sql, conn)
        cmd.Parameters.Add("@Name", SqlDbType.VarChar)
        cmd.Parameters("@Name").Value = newName
        Try
            conn.Open()
            newProdID = Convert.ToInt32(cmd.ExecuteScalar())
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try
    End Using

    Return newProdID
End Function

Комментарии

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

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

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

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

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