SqlCommand.ExecuteScalar Metod

Definition

Kör frågan och returnerar den första kolumnen i den första raden i resultatuppsättningen som returneras av frågan. Ytterligare kolumner eller rader ignoreras.

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

Returer

Den första kolumnen i den första raden i resultatuppsättningen eller en nullreferens (Nothing i Visual Basic) om resultatuppsättningen är tom. Returnerar högst 2 033 tecken.

Implementeringar

Undantag

En SqlDbType annan än Binär eller VarBinary användes när Value var inställd på Stream. Mer information om strömning finns i SqlClient Streaming Support.

-eller-

En SqlDbType annan än Char, NChar, NVarChar, VarChar eller Xml användes när Value var inställd på TextReader.

-eller-

Ett SqlDbType annat än XML användes när Value var inställt på XmlReader.

Ett undantag inträffade när kommandot kördes mot en låst rad. Det här undantaget genereras inte när du använder Microsoft .NET Framework version 1.0.

-eller-

En timeout inträffade under en strömningsåtgärd. Mer information om strömning finns i SqlClient Streaming Support.

Den SqlConnection stängda eller borttagna under en strömningsåtgärd. Mer information om strömning finns i SqlClient Streaming Support.

Ett fel uppstod i ett Stream- XmlReader eller TextReader -objekt under en strömningsåtgärd. Mer information om strömning finns i SqlClient Streaming Support.

Objektet Stream, XmlReader eller TextReader stängdes under en strömningsåtgärd. Mer information om strömning finns i SqlClient Streaming Support.

Exempel

I följande exempel skapas en SqlCommand och sedan körs den med hjälp av ExecuteScalar. Exemplet skickas en sträng som representerar ett nytt värde som ska infogas i en tabell och en sträng som ska användas för att ansluta till datakällan. Funktionen returnerar värdet för den nya identitetskolumnen om en ny rad infogades, 0 vid fel.

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

Kommentarer

ExecuteScalar Använd metoden för att hämta ett enda värde (till exempel ett aggregeringsvärde) från en databas. Detta kräver mindre kod än att använda ExecuteReader metoden och sedan utföra de åtgärder som du behöver för att generera det enskilda värdet med hjälp av de data som returneras av en SqlDataReader.

En typisk ExecuteScalar fråga kan formateras som i följande C#-exempel:

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

Gäller för

Se även