Udostępnij za pośrednictwem


Wykonywanie polecenia

Każdy dostawca danych dołączony do .NET Framework ma własny obiekt polecenia, który dziedziczy z DbCommand. Dostawca danych .NET Framework dla OLE DB zawiera obiekt OleDbCommand, dostawca danych programu .NET Framework dla programu SQL Server zawiera obiekt SqlCommand, dostawca danych programu .NET Framework dla ODBC zawiera obiekt OdbcCommand, a dostawca danych programu .NET Framework dla oracle zawiera obiekt OracleCommand. Każdy z tych obiektów uwidacznia metody wykonywania poleceń na podstawie typu polecenia i żądanej wartości zwracanej, jak opisano w poniższej tabeli.

Komenda Wartość zwracana
ExecuteReader Zwraca obiekt DataReader.
ExecuteScalar Zwraca pojedynczą wartość skalarną.
ExecuteNonQuery Wykonuje polecenie, które nie zwraca żadnych wierszy.
ExecuteXMLReader Zwraca XmlReader. Dostępny tylko dla obiektu SqlCommand.

Każdy silnie typowany obiekt polecenia obsługuje również wyliczenie CommandType określające sposób interpretowania ciągu polecenia zgodnie z opisem w poniższej tabeli.

Typ polecenia Opis
Text Polecenie SQL definiujące instrukcje do wykonania w źródle danych.
StoredProcedure Nazwa procedury składowanej. Można użyć właściwości Parameters polecenia, aby uzyskać dostęp do parametrów wejściowych i wyjściowych i zwracanych wartości, niezależnie od tego, która metoda Execute jest wywoływana. W przypadku korzystania z ExecuteReaderwartości zwracane i parametry wyjściowe nie będą dostępne do momentu zamknięcia DataReader.
TableDirect Nazwa tabeli.

Przykład

W poniższym przykładzie kodu pokazano, jak utworzyć obiekt SqlCommand w celu wykonania procedury składowanej przez ustawienie jego właściwości. Obiekt SqlParameter służy do określania parametru wejściowego procedury składowanej. Polecenie jest wykonywane przy użyciu metody ExecuteReader, a dane wyjściowe z SqlDataReader są wyświetlane w oknie konsoli.

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($"{reader[0]}: {reader[1]:C}");
                }
            }
            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

Polecenia diagnostyczne

Dostawca danych programu .NET Framework dla programu SQL Server dodaje liczniki wydajności, aby umożliwić wykrywanie sporadycznych problemów związanych z nieudanymi wykonaniami poleceń. Aby uzyskać więcej informacji, zobacz liczniki wydajności .

Zobacz też