Ejecutar un comandoExecuting a Command

Cada proveedor de datos .NET Framework incluido en .NET Framework dispone de su propio objeto command que hereda de DbCommand.Each .NET Framework data provider included with the .NET Framework has its own command object that inherits from DbCommand. El proveedor de datos .NET Framework para OLE DB incluye un objeto OleDbCommand, el proveedor de datos .NET Framework para SQL Server incluye un objeto SqlCommand, el proveedor de datos .NET Framework para ODBC incluye un objeto OdbcCommand y el proveedor de datos .NET Framework para Oracle incluye un objeto OracleCommand.The .NET Framework Data Provider for OLE DB includes an OleDbCommand object, the .NET Framework Data Provider for SQL Server includes a SqlCommand object, the .NET Framework Data Provider for ODBC includes an OdbcCommand object, and the .NET Framework Data Provider for Oracle includes an OracleCommand object. Cada uno de estos objetos expone métodos para ejecutar comandos que se basan en el tipo de comando y el valor devuelto deseado, tal como se describe en la tabla siguiente.Each of these objects exposes methods for executing commands based on the type of command and desired return value, as described in the following table.

Get-HelpCommand Valor devueltoReturn Value
ExecuteReader Devuelve un objeto DataReader.Returns a DataReader object.
ExecuteScalar Devuelve un solo valor escalar.Returns a single scalar value.
ExecuteNonQuery Ejecuta un comando que no devuelve ninguna fila.Executes a command that does not return any rows.
ExecuteXMLReader Devuelve un valor XmlReader.Returns an XmlReader. Solo está disponible para un objeto SqlCommand.Available for a SqlCommand object only.

Cada objeto command fuertemente tipado admite también una enumeración CommandType que especifica cómo se interpreta una cadena de comando, tal como se describe en la tabla siguiente.Each strongly typed command object also supports a CommandType enumeration that specifies how a command string is interpreted, as described in the following table.

CommandTypeCommandType DESCRIPCIÓNDescription
Text Comando de SQL que define las instrucciones que se van a ejecutar en el origen de datos.An SQL command defining the statements to be executed at the data source.
StoredProcedure Nombre del procedimiento almacenado.The name of the stored procedure. Puede usar la propiedad Parameters de un comando para tener acceso a los parámetros de entrada y de salida y a los valores devueltos, independientemente del método Execute al que se llame.You can use the Parameters property of a command to access input and output parameters and return values, regardless of which Execute method is called. Al usar ExecuteReader, no es posible el acceso a los valores devueltos y los parámetros de salida hasta que se cierra DataReader.When using ExecuteReader, return values and output parameters will not be accessible until the DataReader is closed.
TableDirect Nombre de una tabla.The name of a table.

EjemploExample

En el ejemplo de código siguiente se muestra cómo se crea un objeto SqlCommand para ejecutar un procedimiento almacenado mediante el establecimiento de sus propiedades.The following code example demonstrates how to create a SqlCommand object to execute a stored procedure by setting its properties. Para especificar el parámetro de entrada del procedimiento almacenado se usa un objeto SqlParameter.A SqlParameter object is used to specify the input parameter to the stored procedure. El comando se ejecuta con el método ExecuteReader y el resultado de SqlDataReader se muestra en la ventana de consola.The command is executed using the ExecuteReader method, and the output from the SqlDataReader is displayed in the console window.

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();
        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

Solución de problemas de comandosTroubleshooting Commands

El proveedor de datos .NET Framework para SQL Server agrega contadores de rendimiento que permiten detectar problemas intermitentes relacionados con errores en la ejecución de comandos.The .NET Framework Data Provider for SQL Server adds performance counters to enable you to detect intermittent problems related to failed command executions. Para obtener más información, vea contadores de rendimiento.For more information see Performance Counters.

Vea tambiénSee also