SqlCommand.ExecuteScalar Metoda

Definicja

Wykonuje zapytanie i zwraca pierwszą kolumnę pierwszego wiersza w zestawie wyników zwróconym przez zapytanie. Dodatkowe kolumny lub wiersze są ignorowane.

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

Zwraca

Pierwsza kolumna pierwszego wiersza w zestawie wyników lub odwołanie o wartości null (Nothing w Visual Basic), jeśli zestaw wyników jest pusty. Zwraca maksymalnie 2033 znaki.

Implementuje

Wyjątki

Użyto SqlDbType innego elementu niż Binary lub VarBinary , gdy Value ustawiono wartość Stream. Aby uzyskać więcej informacji na temat przesyłania strumieniowego, zobacz Obsługa przesyłania strumieniowego sqlClient.

-lub-

Użyto SqlDbType innego niż Char, NChar, NVarChar, VarChar lub Xml, gdy Value ustawiono wartość TextReader.

-lub-

Inny SqlDbType niż Xml był używany, gdy Value ustawiono wartość XmlReader.

Wystąpił wyjątek podczas wykonywania polecenia względem zablokowanego wiersza. Ten wyjątek nie jest generowany podczas korzystania z usługi Microsoft .NET Framework w wersji 1.0.

-lub-

Wystąpił limit czasu podczas operacji przesyłania strumieniowego. Aby uzyskać więcej informacji na temat przesyłania strumieniowego, zobacz Obsługa przesyłania strumieniowego sqlClient.

Zamknięty SqlConnection lub porzucony podczas operacji przesyłania strumieniowego. Aby uzyskać więcej informacji na temat przesyłania strumieniowego, zobacz Obsługa przesyłania strumieniowego sqlClient.

Wystąpił błąd w StreamXmlReader obiekcie lub TextReader podczas operacji przesyłania strumieniowego. Aby uzyskać więcej informacji na temat przesyłania strumieniowego, zobacz Obsługa przesyłania strumieniowego sqlClient.

XmlReader Obiekt Streamlub TextReader został zamknięty podczas operacji przesyłania strumieniowego. Aby uzyskać więcej informacji na temat przesyłania strumieniowego, zobacz Obsługa przesyłania strumieniowego sqlClient.

Przykłady

Poniższy przykład tworzy obiekt , SqlCommand a następnie wykonuje go przy użyciu polecenia ExecuteScalar. Przykład jest przekazywany ciąg reprezentujący nową wartość, która ma zostać wstawiona do tabeli, oraz ciąg używany do nawiązywania połączenia ze źródłem danych. Funkcja zwraca nową wartość kolumny Identity , jeśli nowy wiersz został wstawiony, 0 po awarii.

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

Uwagi

ExecuteScalar Użyj metody , aby pobrać pojedynczą wartość (na przykład wartość agregowaną) z bazy danych. Wymaga to mniejszego ExecuteReader kodu niż użycie metody, a następnie wykonania operacji, które należy wygenerować przy użyciu danych zwracanych przez SqlDataReaderelement .

Typowe ExecuteScalar zapytanie można sformatować tak, jak w poniższym przykładzie języka C#:

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

Dotyczy

Zobacz też