Dela via


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 ExecuteReaderkommer 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.

Se även