SqlCommand.ExecuteScalar Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Spustí dotaz a vrátí první sloupec prvního řádku v sadě výsledků dotazu vrácené dotazem. Další sloupce nebo řádky jsou ignorovány.
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
Návraty
První sloupec prvního řádku v sadě výsledků dotazu nebo odkaz s hodnotou null (Nothing
v jazyce Visual Basic), pokud je sada výsledků dotazu prázdná. Vrátí maximálně 2033 znaků.
Implementuje
Výjimky
Při SqlDbType nastavení na Streamhodnotu byla použita Value jiná hodnota než Binary nebo VarBinary. Další informace o streamování najdete v tématu Podpora streamování SqlClient.
-nebo-
Při SqlDbType nastavení na TextReaderhodnotu se použila Value jiná hodnota než Char, NChar, NVarChar, VarChar nebo Xml.
-nebo-
Při SqlDbType nastavení na XmlReaderhodnotu se použila Value jiná hodnota než XML.
Při provádění příkazu na uzamčený řádek došlo k výjimce. Tato výjimka není generována, pokud používáte rozhraní Microsoft .NET Framework verze 1.0.
-nebo-
Během operace streamování došlo k vypršení časového limitu. Další informace o streamování najdete v tématu Podpora streamování SqlClient.
Zavřený SqlConnection nebo vynechaný během operace streamování. Další informace o streamování najdete v tématu Podpora streamování SqlClient.
Během operace streamování došlo v objektu Streamnebo TextReaderXmlReader k chybě. Další informace o streamování najdete v tématu Podpora streamování SqlClient.
Objekt Streamnebo XmlReaderTextReader byl zavřený během operace streamování. Další informace o streamování najdete v tématu Podpora streamování SqlClient.
Příklady
Následující příklad vytvoří SqlCommand a pak ho spustí pomocí ExecuteScalar. Příklad je předán řetězec představující novou hodnotu, která má být vložena do tabulky, a řetězec pro připojení ke zdroji dat. Funkce vrátí novou hodnotu sloupce Identita , pokud byl vložen nový řádek, při selhání 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
Poznámky
Použijte metodu ExecuteScalar k načtení jedné hodnoty (například agregované hodnoty) z databáze. To vyžaduje méně kódu než použití ExecuteReader metody a provedení operací potřebných k vygenerování jedné hodnoty pomocí dat vrácených metodou SqlDataReader.
Typický ExecuteScalar dotaz je možné naformátovat jako v následujícím příkladu jazyka C#:
cmd.CommandText = "SELECT COUNT(*) FROM dbo.region";
Int32 count = (Int32) cmd.ExecuteScalar();