Köra ett kommando
Varje .NET Framework-dataprovider som ingår i .NET Framework har ett eget kommandoobjekt som ärver från DbCommand. .NET Framework-dataprovidern för OLE DB innehåller ett OleDbCommand objekt, .NET Framework Data Provider för SQL Server innehåller ett SqlCommand objekt, .NET Framework Data Provider för ODBC innehåller ett OdbcCommand objekt och .NET Framework Data Provider för Oracle innehåller ett OracleCommand objekt. Vart och ett av dessa objekt exponerar metoder för att köra kommandon baserat på typen av kommando och önskat returvärde, enligt beskrivningen i följande tabell.
Command | Returvärde |
---|---|
ExecuteReader |
Returnerar ett DataReader objekt. |
ExecuteScalar |
Returnerar ett enskilt skalärt värde. |
ExecuteNonQuery |
Kör ett kommando som inte returnerar några rader. |
ExecuteXMLReader |
Returnerar en XmlReader. Endast tillgängligt för ett SqlCommand objekt. |
Varje starkt skrivet kommandoobjekt stöder också en CommandType uppräkning som anger hur en kommandosträng tolkas, enligt beskrivningen i följande tabell.
CommandType | beskrivning |
---|---|
Text |
Ett SQL-kommando som definierar de instruktioner som ska köras i datakällan. |
StoredProcedure |
Namnet på den lagrade proceduren. Du kan använda Parameters egenskapen för ett kommando för att komma åt indata- och utdataparametrar och returnera värden, oavsett vilken metod som Execute anropas. När du använder ExecuteReader kommer returvärden och utdataparametrar inte att vara tillgängliga förrän den DataReader har stängts. |
TableDirect |
Namnet på en tabell. |
Exempel
I följande kodexempel visas hur du skapar ett SqlCommand objekt för att köra en lagrad procedur genom att ange dess egenskaper. Ett SqlParameter objekt används för att ange indataparametern till den lagrade proceduren. Kommandot körs med metoden ExecuteReader och utdata från SqlDataReader visas i konsolfönstret.
static void GetSalesByCategory(string connectionString,
string categoryName)
{
using (SqlConnection connection = new(connectionString))
{
// Create the command and set its properties.
SqlCommand command = new()
{
Connection = connection,
CommandText = "SalesByCategory",
CommandType = CommandType.StoredProcedure
};
// Add the input parameter and set its properties.
SqlParameter parameter = new()
{
ParameterName = "@CategoryName",
SqlDbType = SqlDbType.NVarChar,
Direction = ParameterDirection.Input,
Value = categoryName
};
// Add the parameter to the Parameters collection.
command.Parameters.Add(parameter);
// Open the connection and execute the reader.
connection.Open();
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
Console.WriteLine("{0}: {1:C}", reader[0], reader[1]);
}
}
else
{
Console.WriteLine("No rows found.");
}
reader.Close();
}
}
}
Shared Sub GetSalesByCategory(ByVal connectionString As String, _
ByVal categoryName As String)
Using connection As New SqlConnection(connectionString)
' Create the command and set its properties.
Dim command As SqlCommand = New SqlCommand()
command.Connection = connection
command.CommandText = "SalesByCategory"
command.CommandType = CommandType.StoredProcedure
' Add the input parameter and set its properties.
Dim parameter As New SqlParameter()
parameter.ParameterName = "@CategoryName"
parameter.SqlDbType = SqlDbType.NVarChar
parameter.Direction = ParameterDirection.Input
parameter.Value = categoryName
' Add the parameter to the Parameters collection.
command.Parameters.Add(parameter)
' Open the connection and execute the reader.
connection.Open()
Using reader As SqlDataReader = command.ExecuteReader()
If reader.HasRows Then
Do While reader.Read()
Console.WriteLine("{0}: {1:C}", _
reader(0), reader(1))
Loop
Else
Console.WriteLine("No rows returned.")
End If
End Using
End Using
End Sub
Felsöka kommandon
.NET Framework-dataprovidern för SQL Server lägger till prestandaräknare så att du kan identifiera tillfälliga problem som rör misslyckade kommandokörningar. Mer information finns i Prestandaräknare.