Выполнение команды (ADO.NET)
Обновлен: November 2007
Каждый поставщик данных .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).