SqlCommand en ADO.
NET
Definición
SqlCommand es una clase fundamental de [Link] que permite ejecutar instrucciones SQL
y procedimientos almacenados en una base de datos SQL Server. Esta clase se utiliza junto
con SqlConnection para enviar comandos a la base de datos, ya sea para recuperar datos,
insertar, actualizar o eliminar registros. SqlCommand proporciona métodos como
ExecuteReader, ExecuteNonQuery y ExecuteScalar para manejar diferentes tipos de
operaciones.
Características principales
- Permite ejecutar sentencias SQL como SELECT, INSERT, UPDATE y DELETE.
- Compatible con procedimientos almacenados.
- Soporta parámetros para consultas dinámicas y seguras.
- Se integra con objetos como SqlDataReader, SqlDataAdapter y DataSet.
- Permite controlar el tiempo de espera (Timeout) y el tipo de comando (CommandType).
Ventajas
- Flexibilidad para ejecutar cualquier tipo de comando SQL.
- Integración directa con SQL Server.
- Permite un control detallado sobre la ejecución de comandos.
- Mejora la seguridad mediante el uso de parámetros que previenen inyecciones SQL.
- Compatible con operaciones sincrónicas y asincrónicas.
Seguridad y uso de parámetros
Una de las mejores prácticas al usar SqlCommand es emplear parámetros en lugar de
concatenar cadenas SQL. Esto previene ataques de inyección SQL, donde un atacante podría
manipular la consulta para ejecutar comandos maliciosos. SqlCommand permite agregar
parámetros mediante la colección Parameters, especificando el nombre, tipo de datos y
valor.
Casos de uso en procesos ETL
En procesos ETL (Extracción, Transformación y Carga), SqlCommand se utiliza
principalmente en las fases de extracción y carga. Durante la extracción, se ejecutan
comandos SELECT para obtener datos desde la base de datos origen. En la fase de carga, se
utilizan comandos INSERT, UPDATE o DELETE para insertar los datos transformados en la
base de datos destino. Gracias a su flexibilidad y compatibilidad con parámetros,
SqlCommand es ideal para automatizar tareas de integración de datos.
Ejemplos en C#
1. Ejecutar una consulta SELECT con SqlCommand y SqlDataReader:
using System;
using [Link];
class EjemploSelect {
static void Main() {
string cadenaConexion =
"Server=.;Database=EjemploDB;Trusted_Connection=True;";
using (SqlConnection conexion = new
SqlConnection(cadenaConexion)) {
[Link]();
SqlCommand comando = new SqlCommand("SELECT Nombre,
Edad FROM Personas", conexion);
SqlDataReader lector = [Link]();
while ([Link]()) {
[Link]($"{lector["Nombre"]}, {lector["Edad"]}");
}
}
}
}
2. Insertar datos usando parámetros para evitar inyección SQL:
using System;
using [Link];
class EjemploInsert {
static void Main() {
string cadenaConexion =
"Server=.;Database=EjemploDB;Trusted_Connection=True;";
using (SqlConnection conexion = new
SqlConnection(cadenaConexion)) {
[Link]();
SqlCommand comando = new SqlCommand("INSERT INTO
Personas (Nombre, Edad) VALUES (@nombre, @edad)", conexion);
[Link]("@nombre", "Carlos");
[Link]("@edad", 28);
int filasAfectadas = [Link]();
[Link]($"Filas insertadas: {filasAfectadas}");
}
}
}