SqlCommand

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:

  1. El tipo devuelto es object, requiere conversión manual de tipos;
  2. Si la consulta devuelve varias filas y columnas, solo se toma la primera fila y primera columna, el resto de datos se descarta;
  3. 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:

  1. ExecuteNonQuery(): Ejecuta INSERT/UPDATE/DELETE, devuelve el número de filas afectadas
  2. ExecuteReader(): Devuelve un flujo DataReader para leer múltiples resultados fila por fila
  3. ExecuteXmlReader(): Lee datos en formato XML (poco utilizado)

Veremos estos métodos en próximas lecciones.

SqlCommand

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *