7/03/2012

Acceso a BD ODBC con Visual C# C Sharp para select count


A continuación te indicamos cómo puedes hacer esta conexión mediante ODBC a una BD de PosgreSQL desde una aplicación Visual C#:

1. Primero has de realizar la conexión a la BD:

Código:

  OdbcConnection conexionBDODBC = new OdbcConnection();
  try
  {
    conexionBDODBC = new OdbcConnection("dsn=" + lsODBC.Text +
        ";UID=" + txtUsuario.Text + ";PWD=" + txtContrasena.Text + ";");               
    conexionBDODBC.Open();
    if (conexionBDODBC.State == ConnectionState.Open)
    {
       MessageBox.Show("Conectado a la base de datos.");
     }
     else
     {
        MessageBox.Show("No conectado a la base de datos.");
      }               
  }
  catch (Exception error)
  {
     MessageBox.Show("Error de base de datos: " +
          System.Environment.NewLine + System.Environment.NewLine +
          error.GetType().ToString() + System.Environment.NewLine +
          error.Message, "Error al crear PDF",
          MessageBoxButtons.OK, MessageBoxIcon.Error);
  }


Donde:

* lsODBC: es un componente de tipo ComboBox donde mostramos los orígenes de datos ODBC instalados en el equipo.
* txtUsuario: TextBox donde se debe introducir el usuario con el que nos conectaremos a la BD, si se deja en blanco se asume el usuario del ODBC.
* txtContrasena: TextBox con la contraseña del usuario anterior.


Una vez conectado con el objeto conexionBDODBC, puedes ejecutar la consulta SQL que quieras, por ejemplo, para un "select count()...":

Código:

  OdbcCommand comandoSQL;
  string consultaSQL;
  consultaSQL = "Select count(*) from facturas where codigocliente = 123";
  try
  {
    comandoSQL = new OdbcCommand(consultaSQL, conexionBDODBC);
    int numeroRegistros = Convert.ToInt32(comandoSQL.ExecuteScalar());
    MessageBox.Show("Número registros: " + Convert.ToString(numeroRegistros));
  }
  catch (Exception ex)
  {
     MessageBox.Show("Error al ejecutar SQL: " +
         System.Environment.NewLine + System.Environment.NewLine +
         ex.GetType().ToString() + System.Environment.NewLine +
         ex.Message, "Error",
         MessageBoxButtons.OK, MessageBoxIcon.Error);
  }


Como ves para consultas SQL que devuelven un sólo registro o fila se usa "OdbcCommand.ExecuteScalar", si quieres ejecutar consultas SQL que no devuelven resultados (INSERT, DELETE, UPDATE) deberás usar OdbcCommand.ExecuteNonQuery (esto te devolverá el número de filas afectadas) y para ejecutar consultas SQL que devuelvan varias filas o registros puedes usar "OdbcCommand.ExecuteReader". El uso de éste último, para recorrer todas las filas o registros devueltos sería algo así:

Código:

  try
  {
    OdbcCommand comandoSQL;
    string consultaSQL;
    consultaSQL = "select importe from facturas where codigocliente = 123";
    comandoSQL = new OdbcCommand(consultaSQL, conexionBDODBC);
    OdbcDataReader resultadoSQL = comandoSQL.ExecuteReader(CommandBehavior.CloseConnection);
    while (resultadoSQL.Read())
    {
       txtResultado.Text = txtResultado.Text + Environment.NewLine + resultadoSQL.GetString(0);
     }
     resultadoSQL.Close();
   }
   catch (Exception ex)
  {
     MessageBox.Show("Error al ejecutar SQL: " +
         System.Environment.NewLine + System.Environment.NewLine +
         ex.GetType().ToString() + System.Environment.NewLine +
         ex.Message, "Error",
         MessageBoxButtons.OK, MessageBoxIcon.Error);
  }

No hay comentarios: