SqlCommand.ExecuteScalar Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
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();