Introducción a SqlCommand
SqlCommand sirve para encapsular las sentencias SQL que deseas ejecutar. Aprovecha una conexión de base de datos ya establecida para enviar órdenes y recuperar los resultados.
El constructor admite dos parámetros: texto SQL (cmdText) y objeto de conexión a base de datos (SqlConnection).
Ejemplo sencillo
Instala SQL Server, crea la tabla Article e inserta un registro de prueba.
private void button1_Click(object sender, EventArgs e)
{
// 1. Definir cadena de conexión
string connectionString = "User ID=sa;pwd=qweqwe;initial catalog=DB;Data Source=.;";
// 2. Crear objeto de conexión
SqlConnection conn = new SqlConnection(connectionString);
// 3. Definir sentencia SQL a ejecutar
string cmdText = "SELECT GETDATE(),count(1) FROM [DB].[dbo].[Article]";
// 4. Crear objeto comando, asociar SQL y conexión
SqlCommand command = new SqlCommand(cmdText, conn);
conn.Open(); // Abrir conexión a base de datos
// ExecuteScalar():Ejecuta SQL y devuelve el valor de la [primera fila, primera columna] con tipo object
object res = command.ExecuteScalar();
MessageBox.Show(res.ToString());
conn.Close(); // Cerrar conexión
}Lenguaje del código: C# (cs)
Tabla de SQL Server
CREATE TABLE Article(
id INT PRIMARY KEY IDENTITY(1,1),
Title NCHAR(10) NULL,
AddTime NCHAR(10) NULL
);Lenguaje del código: SQL (Structured Query Language) (sql)
Método principal: ExecuteScalar()
- Ejecutar consultas de agregado:
COUNT(),MAX(),MIN(),SUM() - Obtener un valor único, por ejemplo la hora actual de la base de datos, el ID de clave primaria autoincremental
Notas importantes:
- El tipo devuelto es
object, requiere conversión manual de tipos; - Si la consulta devuelve varias filas y columnas, solo se toma la primera fila y primera columna, el resto de datos se descarta;
- Antes de ejecutar debes abrir la conexión mediante
conn.Open().
Forma recomendada de escritura
Usa la sentencia using para liberar automáticamente los recursos de conexión y evitar fugas por olvidar cerrar la conexión:
string connectionString = "User ID=sa;pwd=qweqwe;initial catalog=DB;Data Source=.;";
string cmdText = "SELECT GETDATE(),count(1) FROM [DB].[dbo].[Article]";
using (SqlConnection conn = new SqlConnection(connectionString))
{
SqlCommand command = new SqlCommand(cmdText, conn);
conn.Open();
object res = command.ExecuteScalar();
MessageBox.Show(res.ToString());
}
// Al salir del bloque using la conexión se libera automáticamente, no hace falta llamar conn.Close() manualmenteLenguaje del código: JavaScript (javascript)
Información adicional
SqlCommand cuenta con otros tres métodos de ejecución muy usados:
ExecuteNonQuery(): Ejecuta INSERT/UPDATE/DELETE, devuelve el número de filas afectadasExecuteReader(): Devuelve un flujo DataReader para leer múltiples resultados fila por filaExecuteXmlReader(): Lee datos en formato XML (poco utilizado)
Veremos estos métodos en próximas lecciones.
SqlCommand
Previous: Introducción y conexión
Next: CommandTimeout