Język

Wykonywanie polecenia

Każdy dostawca danych ADO.NET ma własny obiekt polecenia, który dziedziczy z DbCommand. .NET Framework Dostawca danych dla OLE DB zawiera obiekt OleDbCommand, Microsoft.Data.SqlClient zawiera obiekt SqlCommand, .NET Framework Dostawca danych for ODBC zawiera obiekt OdbcCommand, a .NET Framework Dostawca danych for 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

Microsoft.Data.SqlClient udostępnia liczniki wydajności systemu Windows w .NET Framework i EventCounters w nowoczesnym .NET. Aby uzyskać więcej informacji, zobacz Liczniki wydajności.

Zobacz też