Entrada destacada

Me mudo...

He cambiado de servidor. Ahora puedes seguirme en: http://asanchezdiaz.com Todavía está en desarrollo, pero a partir de ahora se...

martes, 25 de septiembre de 2012

Cómo contar los registros de una tabla en SqlServer

A menudo, cuándo usamos una base de datos SqlServer en nuestras aplicaciones, nos surge la necesidad de saber únicamente cuántos registros tenemos almacenados en una tabla.

Por ejemplo, si estamos desarrollando una aplicación que gestione usuarios, podemos necesitar saber cuántos usuarios hay registrados para indicarlo en algún punto de la web, algo así como

"Tenemos x usuarios registrados"

En estos casos no necesitamos saber cual es el nombre o el email de los usuarios, sólo la cantidad.

En nuestra tabla "usuarios" debería haber una columna, llamada por ejemplo "id", con autoincremento (se autoincrementa en una unidad especificada en cada registro nuevo).

Podemos ejecutar la sentencia:

SELECT COUNT(id) FROM usuarios 


que nos devolvería el número de registros de la tabla.
El siguiente código se conectará a la base de datos, ejecutará la sentencia y devolverá el número de registros:

int ObtenerNumeroUsuarios()
{
       int numeroRegistros;

      //creamos un ámbito using que limpiará todo antes de salir
      //creamos la conexion
      //pasando un connectionString (datos de conexion)
       using(SqlConnection conexion = new SqlConnection(connectionString))
      {
            string sql = "SELECT COUNT(id) FROM usuarios";

            conexion.Open();

             SqlCommand command= new SqlCommand();
                command.Connection = conexion;
                command.CommandText = sql;
                command.CommandType = CommandType.Text;

            numeroRegistros = (int)command.ExecuteScalar();

            command.Dispose();

            conexion.Close();
      }
       return numeroRegistros;
}

Este método devolvería el número de usuarios en la tabla.

También podemos especificar un filtro en la sentencia sql, para acotar los resultados, por ejemplo:


string sql = "SELECT COUNT(id) FROM usuarios WHERE edad=@edad";

Aunque no es el propósito de esta entrada, hemos usado un parámetro en la sentencia: @edad

Esto es una buena práctica que evita algunos problemas de seguridad.

Cuando usamos un parámetro, debemos inicializarlo y añadirlo a los parametros del objeto SqlCommand.

El método quedaría:




int ObtenerNumeroUsuarios(int edad)
{
       int numeroRegistros;

      //creamos un ámbito using que limpiará todo antes de salir
      //creamos la conexion
      //pasando un connectionString (datos de conexion)
       using(SqlConnection conexion = new SqlConnection(connectionString))
      {
            string sql = "SELECT COUNT(id) FROM usuarios WHERE edad=@edad";

            conexion.Open();

             SqlCommand command= new SqlCommand();
                command.Connection = conexion;
                command.CommandText = sql;
                command.CommandType = CommandType.Text;
            SqlParameter parametro =  new SqlParameter("@edad", SqlDbType.Int);
            parametro.Value = edad;
            command.Parameters.Add(parametro);
            numeroRegistros = (int)command.ExecuteScalar();

            command.Dispose();

            conexion.Close();
      }
       return numeroRegistros;
}

Fíjate que ahora al método le pasamos un parámetro del tipo int, que es la edad que queremos filtrar.

Saludos.



3 comentarios:

  1. disculpa este comando es el unico que no me funciona
    command.CommandType = CommandType.Text;
    por favor ayuda

    ResponderEliminar
  2. Hola, pues debería funcionar. ¿Puedes poner el mensaje de error que te da el compilador?

    ResponderEliminar
  3. string filas;
    private void contador()
    {
    string x="";
    string c;
    c = "SELECT COUNT(Id) FROM Registro";
    OleDbCommand cmd1 = new OleDbCommand();
    cmd1.Connection = conexion;
    cmd1.CommandText = c;
    cmd1.CommandType = CommandType.Text;
    x = Convert.ToString(cmd1.ExecuteScalar());
    filas = x;
    cmd1.Dispose();
    }

    Buena bro nomas de cambir algunas cosas ya depende de que base se usa;

    ResponderEliminar