Выполнение команды (ADO.NET)

Каждый поставщик данных .NET Framework, включенный в состав .NET Framework, имеет собственный объект команды, наследуемый от DbCommand. Поставщик данных .NET Framework для OLE DB содержит объект OleDbCommand, поставщик данных .NET Framework для SQL Server — объект SqlCommand, поставщик данных .NET Framework для ODBC — объект OdbcCommand, а поставщик данных .NET Framework для Oracle — объект OracleCommand. Каждый из этих объектов предоставляет методы выполнения команд с учетом типа команды и требуемого возвращаемого значения, как описано в следующей таблице.

Команда

Возвращаемое значение

ExecuteReader

Возвращает объект DataReader.

ExecuteScalar

Возвращает одно скалярное значение.

ExecuteNonQuery

Выполняет команду, которая не возвращает строк.

ExecuteXMLReader

Возвращает значение типа XmlReader. Этот метод предусмотрен только для объекта SqlCommand.

Каждый строго типизированный объект команды поддерживает также перечисление CommandType, которое указывает способ интерпретации строки команды, как описано в следующей таблице.

CommandType

Описание

Text

Команда SQL, определяющая инструкции, которые выполняются применительно к источнику данных.

StoredProcedure

Имя хранимой процедуры. Свойство команды Parameters может использоваться для доступа к входным и выходным параметрам и возвращаемым значениям независимо от вызываемого метода Execute. При использовании ExecuteReader возвращаемые значения и выходные параметры будут недоступными, пока не будет закрыт DataReader.

TableDirect

Имя таблицы.

Пример

Следующий пример кода демонстрирует способ создания объекта SqlCommand для выполнения хранимой процедуры путем установки его свойств. Объект SqlParameter используется для задания входных параметров хранимой процедуры. Команда выполняется с помощью метода ExecuteReader, и выходное значение из SqlDataReader отображается в окне консоли.

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()
        Dim 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 Sub
static void GetSalesByCategory(string connectionString, 
    string categoryName)
{
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
        // Create the command and set its properties.
        SqlCommand command = new SqlCommand();
        command.Connection = connection;
        command.CommandText = "SalesByCategory";
        command.CommandType = CommandType.StoredProcedure;

        // Add the input parameter and set its properties.
        SqlParameter parameter = 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();
        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();
    }
}

Команды устранения неполадок

Поставщик данных .NET Framework для SQL Server добавляет счетчики производительности, позволяя обнаруживать периодически возникающие проблемы, связанные со сбоями команд. Дополнительные сведения см. в разделе Счетчики производительности (ADO.NET).

См. также

Другие ресурсы

Команды и параметры (ADO.NET)

Объекты DataAdapter и DataReader (ADO.NET)

Working with DataReaders