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:
 virtual System::Object ^ ExecuteScalar();
public:
 override System::Object ^ ExecuteScalar();
public object ExecuteScalar();
public override object ExecuteScalar();
abstract member ExecuteScalar : unit -> obj
override this.ExecuteScalar : unit -> obj
override this.ExecuteScalar : unit -> obj
Public Function ExecuteScalar () As Object
Public Overrides 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 innej wartości 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 —

Użyto SqlDbType innej wartości niż Xml , gdy Value ustawiono wartość XmlReader.

Wystąpił wyjątek podczas wykonywania polecenia względem zablokowanego wiersza. Ten wyjątek nie jest generowany w przypadku korzystania z programu 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.

Stream Obiekt XmlReaderlub 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 został wstawiony nowy wiersz, 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 mniej kodu niż przy użyciu ExecuteReader metody, a następnie wykonanie operacji, które należy wygenerować pojedynczą SqlDataReaderwartość przy użyciu danych zwracanych przez element .

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ż