3. DEFINICIÓN:
SqlCommand representa un procedimiento almacenado o una instrucción
de Transact-SQL que se ejecuta en una base de datos de SQL Server.
Un objeto SqlCommand se utiliza cuando necesitamos ejecutar un tipo de
sentencia Sql a la base de datos (estos tipos pueden ser: Delete, Update,
Insert o Select).
Cuando se crea una instancia de SqlCommand, las propiedades de
lectura y escritura se establecen en sus valores iniciales.
SqlCommand proporciona las siguientes propiedades y métodos de
ejecución de comandos en una base de datos de SQL Server:
4. PROPIEDADES:
NOMBRE DESCRIPCIÓN
ColumnEncryptionSetting Obtiene o establece la configuración del cifrado de columnas para este comando.
CommandText Obtiene o establece la instrucción de Transact-SQL, el nombre de tabla o el
procedimiento almacenado que se ejecutan en el origen de
datos.(Invalida DbCommand.CommandText).
CommandTimeout Obtiene o establece el tiempo de espera antes de terminar el intento de ejecutar un
comando y generar un error.(Invalida DbCommand.CommandTimeout).
CommandType Obtiene o establece un valor que indica cómo se interpreta la
propiedad CommandText.(Invalida DbCommand.CommandType).
Connection Obtiene o establece la interfaz SqlConnection que usa esta instancia
de SqlCommand.
Container Obtiene IContainer que contiene Component.(Heredado de Component).
DesignTimeVisible Obtiene o establece un valor que indica si el objeto de comando debe estar visible
en un control del Diseñador de Windows
Forms.(Invalida DbCommand.DesignTimeVisible).
5. Notification Obtiene o establece un valor que especifica el
objeto SqlNotificationRequest enlazado a este comando.
NotificationAutoEnlist Obtiene o establece un valor que indica si la aplicación debe recibir
automáticamente notificaciones de consulta de un
objeto SqlDependency común.
Parameters Obtiene la estructura SqlParameterCollection.
Site Obtiene o establece la ISite de la Component.(Heredado de Component).
Transaction Obtiene o establece la transacción SqlTransaction en la que se
ejecuta SqlCommand.
UpdatedRowSource Obtiene o establece la manera en que se aplican los resultados del comando
a DataRow cuando lo utiliza el
método Update de DbDataAdapter.(Invalida DbCommand.UpdatedRowSource
).
6. MÉTODOS:
NOMBRE DESCRIPCIÓN
BeginExecuteNonQuery() Inicia la ejecución asincrónica de la instrucción de Transact-SQL o del
procedimiento almacenado que describeSqlCommand.
BeginExecuteNonQuery(AsyncCallback, Object) Inicia la ejecución asincrónica de la instrucción de Transact-SQL o del
procedimiento almacenado que describe SqlCommand, dados un procedimiento
de devolución de llamada e información de estado.
BeginExecuteReader() Inicia la ejecución asincrónica de la instrucción de Transact-SQL o del
procedimiento almacenado que describe SqlCommand y recupera uno o varios
conjuntos de resultados del servidor.
BeginExecuteReader(AsyncCallback, Object) Inicia la ejecución asincrónica de la instrucción de Transact-SQL o del
procedimiento almacenado que describeSqlCommand y recupera uno o varios
conjuntos de resultados del servidor, dados un procedimiento de devolución de
llamada e información de estado.
BeginExecuteReader(AsyncCallback, Object,
CommandBehavior)
Inicia la ejecución asincrónica de la instrucción de Transact-SQL o del
procedimiento almacenado que describeSqlCommand, utilizando uno de los
valores de CommandBehavior y recuperando uno o varios conjuntos de
resultados del servidor, a partir del procedimiento de devolución de llamada e
información de estado dados.
7. BeginExecuteReader(CommandBehavior) Inicia la ejecución asincrónica de la instrucción de Transact-SQL o del procedimiento
almacenado que describe SqlCommand utilizando uno de los valores
de CommandBehavior.
BeginExecuteXmlReader() Inicia la ejecución asincrónica de la instrucción de Transact-SQL o del procedimiento
almacenado que describe SqlCommand y devuelve los resultados como un
objeto XmlReader.
BeginExecuteXmlReader(AsyncCallback, Object) Inicia la ejecución asincrónica de la instrucción de Transact-SQL o del procedimiento
almacenado que describe SqlCommand y devuelve los resultados como un
objeto XmlReader a través de un procedimiento de devolución de llamada.
Cancel() Intenta cancelar la ejecución de un SqlCommand.(Invalida DbCommand.Cancel()).
Clone() Crea un nuevo objeto SqlCommand que es una copia de la instancia actual.
CreateObjRef(Type) Crea un objeto que contiene toda la información relevante necesaria para generar a un
proxy que se utiliza para comunicarse con un objeto remoto.(Heredado
de MarshalByRefObject).
CreateParameter() Crea una nueva instancia de un objeto SqlParameter.
Dispose() Libera todos los recursos que usa Component.(Heredado de Component).
EndExecuteNonQuery(IAsyncResult) Finaliza la ejecución asincrónica de una instrucción de Transact-SQL.
8. EndExecuteReader(IAsyncResult) Finaliza la ejecución asincrónica de una instrucción de Transact-SQL y devuelve el
objeto SqlDataReadersolicitado.
EndExecuteXmlReader(IAsyncResult) Finaliza la ejecución asincrónica de una instrucción de Transact-SQL y devuelve los
datos solicitados como XML.
Equals(Object) Determina si el objeto especificado es igual al objeto actual.(Heredado de Object).
ExecuteNonQuery() Ejecuta una instrucción de Transact-SQL en la conexión y devuelve el número de
filas afectadas.(Invalida DbCommand.ExecuteNonQuery()).
ExecuteNonQueryAsync() Una versión asincrónica de ExecuteNonQuery, que ejecuta una instrucción SQL en
un objeto de conexión.
Invoca ExecuteNonQueryAsync con CancellationToken.None.(Heredado
de DbCommand).
ExecuteNonQueryAsync(CancellationToken) Versión asincrónica de ExecuteNonQuery, que ejecuta una instrucción de Transact-
SQL con la conexión y devuelve el número de filas afectadas. Token de cancelación
que se puede usar para solicitar que se abandone la operación antes de que
transcurra el tiempo de espera del comando. Las excepciones se mostrarán a
través del objeto Task devuelto.
(Invalida DbCommand.ExecuteNonQueryAsync(CancellationToken)).
9. ExecuteReader() Envía la propiedad CommandText a Connection y crea un
objeto SqlDataReader.
ExecuteReader(CommandBehavior) Envía CommandText a Connection y crea
un SqlDataReader mediante uno de los valores
de CommandBehavior.
ExecuteReaderAsync() Una versión asincrónica de ExecuteReader, que envía la
propiedad CommandText a la propiedad Connection y
compila SqlDataReader. Las excepciones se mostrarán a través del
objeto Task devuelto.
ExecuteReaderAsync(CancellationToken) Una versión asincrónica de ExecuteReader, que envía la
propiedad CommandText a la propiedad Connection y
compila SqlDataReader.
Token de cancelación que se puede usar para solicitar que se
abandone la operación antes de que transcurra el tiempo de espera
del comando. Las excepciones se mostrarán a través del objeto Task
devuelto.
ExecuteReaderAsync(CommandBehavior) Versión asincrónica de ExecuteReader, que envía la
propiedad CommandText a la propiedad Connection y
compila SqlDataReader. Las excepciones se mostrarán a través del
objeto Task devuelto.
10. ExecuteReaderAsync(CommandBehavior,
CancellationToken)
Versión asincrónica de ExecuteReader, que envía la
propiedad CommandText a la propiedad Connection y
compila SqlDataReader
Token de cancelación que se puede usar para solicitar que se abandone la
operación antes de que transcurra el tiempo de espera del comando. Las
excepciones se mostrarán a través del objeto Task devuelto.
ExecuteScalar() Ejecuta la consulta y devuelve la primera columna de la primera fila del
conjunto de resultados devuelto por la consulta. Las demás columnas o
filas no se tienen en cuenta.(Invalida DbCommand.ExecuteScalar()).
ExecuteScalarAsync() Una versión asincrónica de ExecuteScalar, que ejecuta la consulta y
devuelve la primera columna de la primera fila del conjunto de resultados
devuelto por la consulta. Se omiten todas las demás columnas y filas.
Invoca ExecuteScalarAsync con CancellationToken.None.(Heredado
de DbCommand).
11. ExecuteScalarAsync(CancellationToken) Versión asincrónica de ExecuteScalar que ejecuta la consulta
asincrónicamente y devuelve la primera columna de la primera fila
del conjunto de resultados que devuelve la consulta. Las demás
columnas o filas no se tienen en cuenta.
Token de cancelación que se puede usar para solicitar que se
abandone la operación antes de que transcurra el tiempo de espera
del comando. Las excepciones se mostrarán a través del objeto Task
devuelto.(Invalida DbCommand.ExecuteScalarAsync(CancellationTo
ken)).
ExecuteXmlReader() Envía CommandText a Connection y crea un objeto XmlReader.
ExecuteXmlReaderAsync() Una versión asincrónica de ExecuteXmlReader, que envía la
propiedad CommandText a la propiedadConnection y compila un
objeto XmlReader.
Las excepciones se mostrarán a través del objeto Task devuelto.
ExecuteXmlReaderAsync(CancellationToken) Una versión asincrónica de ExecuteXmlReader, que envía la
propiedad CommandText a la propiedad Connection y compila un
objeto XmlReader.
Token de cancelación que se puede usar para solicitar que se
abandone la operación antes de que transcurra el tiempo de espera
del comando. Las excepciones se mostrarán a través del objeto Task
devuelto.
12. GetHashCode() Sirve como la función hash predeterminada. (Heredado de Object).
GetLifetimeService() Recupera el objeto de servicio de duración actual que controla la directiva de
duración de esta instancia.(Heredado de MarshalByRefObject).
GetType() Obtiene el Type de la instancia actual.(Heredado de Object).
InitializeLifetimeService() Obtiene un objeto de servicio de duración para controlar la directiva de duración
de esta instancia.(Heredado de MarshalByRefObject).
Prepare() Crea una versión preparada del comando en una instancia de SQL
Server.(Invalida DbCommand.Prepare()).
ResetCommandTimeout() Restablece el valor predeterminado de la propiedad CommandTimeout.
ToString() Devuelve un String que contiene el nombre de la Component, si existe. Este
método no se debe invalidar.(Heredado de Component).
13. EJEMPLOS:
CREAR UN OBJETO SQLCOMMAND:
De manera similar a otros objetos C #, crea una instancia de un objeto SqlCommand a través de la nueva
declaración de instancia, de la siguiente manera:
SqlCommand cmd = new SqlCommand ("seleccionar CategoryName from Categories", conn);
La línea anterior es típica para crear instancias de un objeto SqlCommand. Toma un parámetro de cadena que
contiene el comando que desea ejecutar y una referencia a un objeto SqlConnection. SqlCommand tiene algunas
sobrecargas, que verá en los ejemplos:
CONSULTAR DATOS:
Al usar un comando de selección SQL, recuperas un conjunto de datos. Para lograr esto con un objeto SqlCommand,
se usa el método ExecuteReader, que devuelve un objeto SqlDataReader. El siguiente ejemplo muestra cómo usar el
objeto SqlCommand para obtener un objeto SqlDataReader:
//Creamos una instancia de un nuevo comando con una consulta y conexión:
SqlCommand cmd = new SqlCommand ("seleccionar CategoryName from Categories", conn);
//Llamamos al lector de ejecución para obtener resultados de consulta:
SqlDataReader rdr = cmd.ExecuteReader ();
14. En el ejemplo anterior, instanciamos un objeto SqlCommand, pasando la cadena de comando y el objeto de conexión
al constructor. Luego obtenemos un objeto SqlDataReader llamando al método ExecuteReader del objeto
SqlCommand, cmd.
INSERTAR DATOS:
Para insertar datos en una base de datos, usamos el método ExecuteNonQuery del objeto SqlCommand. El
siguiente código muestra cómo insertar datos en una tabla de base de datos:
// Preparamos el comando String
String string insertString = @ "
insertar en Categorías
(CategoryName, descripción)
valores ('Varios', 'Lo que no se ajusta en otro lado') ";
//Creamos una instancia de un nuevo comando con una consulta y conexión
SqlCommand cmd = new SqlCommand (insertString, conn);
//Llamamos a ExecuteNonQuery para enviar el comando
cmd.ExecuteNonQuery ();
Para ejecutar este comando, simplemente llamamos al método ExecuteNonQuery en la instancia de SqlCommand,
cmd.
15. ACTUALIZACIÓN DE DATOS:
El método ExecuteNonQuery también se usa para actualizar datos. El siguiente código muestra cómo actualizar los datos:
//Preparamos el comando string
String string updateString = @ "
actualizar Categorías
establecer CategoryName = 'Otro'
donde CategoryName = 'Miscellaneous’ “;
//Creamos una instancia de un nuevo comando con solo texto de comando
SqlCommand cmd = new SqlCommand (updateString);
// Establecemos la propiedad Connection
cmd.Connection = conn;
// Llamamos a ExecuteNonQuery para enviar comandos
cmd.ExecuteNonQuery ();
Nuevamente, colocamos el comando SQL en una variable de cadena, pero esta vez usamos un constructor SqlCommand diferente
que toma solo el comando. Asignamos el objeto SqlConnection, conn, a la propiedad Connection del objeto SqlCommand, cmd.
El método ExuteNonQuery realiza el comando de actualización.
16. ELIMINAR DATOS:
También puede eliminar datos utilizando el método ExecuteNonQuery. El siguiente ejemplo muestra cómo eliminar
un registro de una base de datos con el método ExecuteNonQuery:
// Preparamos el comando string
String deleteString = @ "
eliminar de Categorías
donde CategoryName = 'Otro' ";
//Creamos una instancia de un nuevo comando
SqlCommand cmd = new SqlCommand ();
// Establecemos la propiedad CommandText
cmd.CommandText = deleteString;
// Establecemos la propiedad Connection
cmd.Connection = conn;
// Llamamos a ExecuteNonQuery para enviar comandos
cmd.ExecuteNonQuery ();
Este ejemplo usa el constructor SqlCommand sin parámetros. En cambio, explicity establece las propiedades
CommandText y Connection del objeto SqlCommand, cmd.
La llamada al método ExecuteNonQuery envía el comando a la base de datos.
17. OBTENER VALORES INDIVIDUALES:
A veces, todo lo que necesita de una base de datos es un valor
único, que puede ser un recuento, suma, promedio u otro valor
agregado de un conjunto de datos. Realizar un ExecuteReader y
calcular el resultado en su código no es la forma más eficiente de
hacerlo. La mejor opción es dejar que la base de datos realice el
trabajo y devuelva solo el valor que necesita. El siguiente ejemplo
muestra cómo hacer esto con el método ExecuteScalar:
//Creamos una instancia de un nuevo comando
SqlCommand cmd = new SqlCommand ("select count (*) from
Categories", conn);
//Llamamamos a ExecuteNonQuery para enviar comandos
Int count = ( int ) cmd.ExecuteScalar ();
La consulta en el constructor SqlCommand obtiene el recuento de
todos los registros de la tabla Categorías. Esta consulta solo
devolverá un valor único. El método ExecuteScalar devuelve este
valor. Como el tipo de devolución de ExecuteScalar es type object,
utilizamos un operador de conversión para convertir el valor a int.
18. RESUMEN:
Un objeto SqlCommand le permite consultar y enviar comandos a una base de datos. Tiene métodos que
están especializados para diferentes comandos. El método ExecuteReader devuelve un objeto
SqlDataReader para ver los resultados de una consulta de selección. Para insertar, actualizar y eliminar
comandos SQL, utiliza el método ExecuteNonQuery. Si solo necesita un único valor agregado de una
consulta, ExecuteScalar es la mejor opción.
SqlCommand define una propiedad de colección llamada Parameters, en esta propiedad se almacenan los
valores para los parámetros utilizados en una instrucción o consulta de SQL que ha sido asignada como
cadena de caracteres a la propiedad CommandText de un SqlCommand. Estos parámetros son del tipo
SqlParameter y están directamente relacionados con las variables utilizadas en las instrucciones o
consultas T-SQL.
La ventaja de utilizar las variables de T-SQL en la cadena de la consulta, nos permiten tener una cadena de
caracteres uniforme y similar a lo que se usa directamente con T-SQL, estas variables también pueden ser
los parámetros de un procedimiento almacenado.
19. RECOMENDACIONES:
Los comandos se emiten en las bases de datos para realizar acciones en almacenes de datos e incluir cualquier
instrucción que se pueda emitir en una base de datos. Puede utilizar las clases OleDbCommand o SqlCommand
para obtener un comando para su almacén de datos; OleDbCommand puede ser específica del almacén de datos.
Con ADO, puede ejecutar comandos a través de los objetos Command, Connection o Recordset. En ADO.NET,
sólo los objetos Command (SqlCommand u OleDbCommand) ejecutan comandos.
CONCLUSIONES:
SqlCommand trata con bases de datos. Ejecuta comandos SQL en una base de datos. Envía un comando SQL a
una base de datos especificada por un objeto SqlConnection.
Luego llama a los métodos de instancia para aplicar físicamente el comando a la base de datos.
El tipo SqlCommand tiene un constructor parametrizado público y se puede usar con uno o más argumentos. El
primer parámetro especifica la declaración de SQL. El segundo parámetro es SqlConnection. El tercer parámetro
es SqlTransaction.
20. APRECIACIÓN DEL EQUIPO:
Un objeto SqlCommand nos permite especificar qué tipo de interacción desea realizar con una base de datos. Por
ejemplo, puede seleccionar, insertar, modificar y eliminar comandos en filas de datos en una tabla de base de
datos. El objeto SqlCommand se puede usar para admitir escenarios de administración de datos desconectados.
SqlCommand tiene un constructor y puede especificar su conexión y el texto SQL.