Share via


Introducción a los objetos DataCommand en Visual Studio

ADO.NET ofrece dos modos básicos para trabajar con datos: usar un conjunto de datos o trabajar directamente con una base de datos. En el modelo de conjunto de datos, se crea un almacén en memoria de los registros con los que se desea trabajar, se carga el almacén mediante un adaptador de datos, se manipula los datos y, a continuación, opcionalmente, se utiliza el adaptador de datos para escribir los cambios en la base de datos. Para obtener información general sobre este tema, vea Introducción al acceso a datos con ADO.NET.

Como alternativa, se puede trabajar directamente con la base de datos. En este modelo, se configura un objeto de comando de datos con una instrucción SQL o el nombre de un procedimiento almacenado y, a continuación, se ejecuta el comando de datos. Si el comando devuelve un conjunto de resultados, se utiliza un objeto de lector de datos para recuperar la información.

Bajo algunas circunstancias, no se puede usar un conjunto de datos. Por ejemplo, si se desea crear elementos de base de datos como las tablas, se deberán usar comandos de datos.

**Nota   **Para obtener información acerca de la elección entre conjuntos de datos y comandos de datos, vea Recomendaciones sobre la estrategia de acceso a datos.

Acerca de comandos de datos

Un comando de datos contiene una referencia a una instrucción SQL o a un procedimiento almacenado que se puede ejecutar directamente. Un comando de datos es una instancia de la clase OleDbCommand, SqlCommand, OdbcCommand o OracleCommand; al igual que otras clases similares, la clase OleDbCommand se puede utilizar con cualquier proveedor OLE DB, la clase SqlCommand está optimizada para utilizarla con SQL Server 7.0 o posterior, la clase OdbcCommand es para utilizarla con orígenes de datos ODBC y la clase OracleCommand es para utilizarla con bases de datos de Oracle.

Nota   Para Oracle, el objeto OracleCommand (a diferencia de los objetos OleDbCommand, SqlCommand y OdbcCommand) no admite una propiedad CommandTimeout. Definir un tiempo de espera de comando no tiene efecto y el valor devuelto es siempre cero.

Nota de seguridad   Cuando utilice comandos de datos con una propiedad CommandType definida como Text, compruebe con cuidado la información que se envía desde el cliente antes de pasarla a la base de datos. Usuarios con malas intenciones podrían intentar enviar (insertar) instrucciones de SQL modificadas o adicionales con el fin de obtener acceso no autorizado o dañar la base de datos. Antes de transferir la entrada del usuario a una base de datos, debe comprobar siempre que la información es válida. Un procedimiento recomendado es utilizar siempre que sea posible consultas parametrizadas o procedimientos almacenados.

Con los comandos de datos, puede realizar las siguientes acciones en la aplicación:

  • Ejecutar comandos Select que devuelvan un resultado que se pueda leer directamente, en vez de cargarlo en un conjunto de datos. Para leer los resultados, se usa un lector de datos (un objeto OleDbDataReader, SqlDataReader, OdbcDataReader o OracleDataReader), que actúa como un cursor de sólo avance y sólo lectura, y al que se pueden enlazar controles. Ésta es una estrategia muy útil para reducir el uso de memoria y cargar datos de sólo lectura muy rápido.
  • Ejecutar comandos de definición de base de datos (DDL) para crear, editar y quitar tablas, procedimientos almacenados y otras estructuras de base de datos. Por supuesto, debe tener permisos para realizar estas acciones.
  • Ejecutar comandos para obtener información del catálogo de base de datos.
  • Ejecutar comandos SQL dinámicos para actualizar, insertar o eliminar registros, en vez de actualizar tablas de un conjunto de datos y, a continuación, copiar los cambios a la base de datos.
  • Ejecutar comandos que devuelvan un valor escalar (es decir, un único valor), como el resultado de una búsqueda de autenticación de una tarjeta de crédito o un valor calculado.
  • Ejecutar comandos que devuelvan datos de una base de datos SQL Server (versión 7.0 o posterior) en formato XML. Un uso habitual es ejecutar una consulta y devolver datos en formato XML, aplicarle una transformación XSLT para convertir los datos a HTML y, a continuación, enviar el resultado a un explorador.

Cómo funcionan los comandos de datos

Las propiedades del comando de datos contienen toda la información necesaria para ejecutar un comando con una base de datos. Esto incluye:

  • Una conexión   El comando hace referencia a una conexión que utiliza para comunicarse con la base de datos.
  • **El nombre o el texto de un comando   **El comando incluye el texto real de una instrucción SQL o el nombre de un procedimiento almacenado que se va a ejecutar.
  • **Parámetros   **Un comando podría requerir el paso de valores de parámetros junto con el comando (parámetros de entrada). En comando también podría devolver valores en el formato de un valor devuelto o valores del parámetro de salida. Cada comando tiene una colección de parámetros que puede establecer o leer individualmente para pasar o recibir valores.

Los comandos de datos se ejecutan usando un método apropiado a los resultados que se espera obtener. Por ejemplo, si se espera obtener un conjunto de resultados, se invocará al método ExecuteReader del comando, que devuelve registros a un lector de datos. Si se ejecuta un comando Update, Insert o Delete, se llamará al método ExecuteNonQuery, que devuelve un valor que indica el número de filas afectadas.

Varios conjuntos de resultados

Un uso habitual de los comandos de datos es devolver un único conjunto de resultados. No obstante, los comandos de datos pueden ejecutar procedimientos que devuelvan varios conjuntos de resultados. Esto puede ocurrir de varias formas. Una es que el comando haga referencia a un procedimiento almacenado que devuelva varios conjuntos de resultados. El comando también puede tener dos (o más) instrucciones o nombres de procedimientos almacenados. En este caso, las instrucciones o los procedimientos se ejecutan secuencialmente y devuelven varios resultados con una única llamada.

La devolución de varios conjuntos de resultados le permite optimizar el uso de una única conexión abierta. Los usos habituales incluyen:

  • La ejecución de varias consultas, cada una de las cuales devuelve un conjunto de resultados independiente.
  • La ejecución de una instrucción Update o Insert seguida de una instrucción Select que devuelve una versión actualizada del registro o los registros modificados, incluidos los valores establecidos por la base de datos (como valores de incremento automático).

Si especifica varias instrucciones o procedimientos para un comando, todos deben ser del mismo tipo. Por ejemplo, puede ejecutar instrucciones SQL o procedimientos almacenados sucesivos. No obstante, no puede mezclar llamadas a un procedimiento almacenado y a instrucciones SQL en el mismo comando. Para obtener más información, vea Recuperar datos mediante DataReader.

Nota   Para Oracle, el proveedor de datos de .NET Framework para Oracle no admite instrucciones SQL en lotes. Sin embargo, sí permite utilizar varios parámetros de salida REF CURSOR para llenar un conjunto de datos, cada uno en su propia tabla de datos. Debe definir los parámetros, marcarlos como parámetros de salida e indicar que son tipos de datos REF CURSOR. Tenga en cuenta que no podrá utilizar el método Update cuando se llene el objeto OracleDataAdapter con los parámetros REF CURSOR en un procedimiento almacenado, porque Oracle no proporciona la información necesaria para determinar los nombres de la tabla y de las columnas cuando se ejecuta la instrucción de SQL.

Ejecutar el comando de datos

Después de configurar las propiedades del comando de datos, se puede ejecutar el comando. Los comandos de datos admiten cuatro métodos de ejecución; el método que tiene que llamar depende de la instrucción o el procedimiento que se va a ejecutar y los resultados que espera. Puede ejecutar y devolver:

Cómo utilizan los comandos de datos los adaptadores de datos

Si ya ha trabajado con conjuntos de datos y adaptadores de datos, mucho de lo que va a leer acerca de los comandos de datos le será familiar. De hecho, un adaptador de datos utiliza comandos de datos para leer de una base de datos y escribir en ella. Los adaptadores de datos pueden contener hasta cuatro objetos de comandos de datos, uno en cada una de sus propiedades SelectCommand, UpdateCommand, InsertCommand y DeleteCommand.

Cuando se utiliza un adaptador de datos, éste realiza eficazmente las mismas operaciones con los comandos que se desea. Por ejemplo, cuando se llama al método Fill del adaptador, este último ejecuta el comando de datos en su propiedad SelectCommand y usa un lector de datos para rellenar el conjunto de resultados en la tabla del conjunto de datos especificada. De igual manera, cuando se llama al método Update del adaptador, éste ejecuta el comando apropiado (en las propiedades UpdateCommand, InsertCommand y DeleteCommand) para cada registro modificado en la tabla del conjunto de datos. El adaptador de datos también asegura que se pasan los parámetros apropiados con comandos.

Un punto importante es que el adaptador de datos está diseñado para utilizar comandos para interactuar específicamente con un conjunto de datos. No obstante, cuando utiliza comandos de datos, puede realizar las mismas funciones como si se tratara de un adaptador, pero tiene más control sobre cómo y cuándo se ejecutan los comandos y, especialmente, sobre lo que sucede con el resultado de los comandos.

Para obtener más información acerca de los adaptadores de datos y sobre el modo en que utilizan los comandos de datos, vea Introducción a los adaptadores de datos.

Vea también

OleDbCommand (Clase) | SqlCommand (Clase) | OdbcCommand (Clase) | Recomendaciones sobre la estrategia de acceso a datos | Trabajar con comandos de datos: proceso de alto nivel | Ejecutar un comando