viernes, 30 de septiembre de 2011

Conexion ASP C# con PostgreSQL

Esta clase sirve para conectar un proyecto Web en asp con C# con la base de datos Postgresql, se debe reemplazar el nombre de la base de datos, el usuario y la contraseña, y se da la ruta del servidor, si es local se deja localhost, esta clase tiene el puerto por defecto de la base de datos.
Tiene metodos y atributos estaticos, o sea que no se instancia.

Recuerda que para usar esta clase debes tener la libreria  Npgsql para la conexion del proyecto con la base de datos. En esta pagina puedes bajarla:
http://npgsql.projects.postgresql.org/

public class Conexion
{
private static string connection = "server=localhost; port=5432;" +
  "Database=db;" +
  "User ID=usuario;" +
  "Password=contraseña;";
private static IDbConnection connect;
private static IDbCommand comando;
public static IDataReader reader;
public static IDbTransaction transaccion;
  public static IDataRecord update;
 public static void conexion()//con este metodo se abre la conexion
{
connect = new NpgsqlConnection(connection);
connect.Open();
}
  public static void executeQuery(string sql)/// este metodo recibe la cadena con la sentencia
{
comando = connect.CreateCommand();
comando.CommandText = sql;
reader = comando.ExecuteReader();
//updateQuery(sql);

}
  public static void insertQuery(String sql)// este metodo recibe la cadena con la sentencia
{
comando = connect.CreateCommand();
comando.Transaction = transaccion;
comando.CommandText = sql;
comando.ExecuteScalar();
}
  public static void updateQuery(String sql)// este metodo recibe la cadena con la sentencia
{
NpgsqlConnection conn = new NpgsqlConnection(connection);
conn.Open();
NpgsqlCommand comando = new NpgsqlCommand(sql, conn);

}

  public static void desconectar()//este metodo cierra la conexion del query
{
reader.Close();
comando.Dispose();
connect.Close();
}
  public static void desconectarinsert()// este metodo cierra la conexion del insert y update
{
comando.Dispose();
connect.Close();
}
}

10 comentarios:

  1. Hola, me gustaria saber como se recupera los datos en el formulario web del reader.

    gracias

    ResponderEliminar
  2. Lo puedes obtener por ejempo así:

    Conexion.conexion();//abres la conexion
    Conexion.executeQuery("SELECT * FROM tabla WHERE id =123);//consultas
    int numero;
    string texto;
    while (Conexion.reader.Read())//con el while recorres el reader
    {
    // este caso extraes un valor int de la base de datos y lo extraes así
    numero = Conexion.reader.GetInt32(Conexion.reader.GetOrdinal("empleadoidn"));

    // este caso extraes un valor string de la base de datos y lo extraes así
    texto = Conexion.reader.GetString(Conexion.reader.GetOrdinal("enombrev"));
    }
    Conexion.desconectar();//cierras la conexion


    Espero sea claro

    saludos

    ResponderEliminar
  3. oye esta funcion no guarda los datos, aparentemente hace todo bien pero nada.

    public static void updateQuery

    ResponderEliminar
  4. oye ya funciono haciendole cambios jeje a la mima

    ResponderEliminar
  5. y cuando el campo permite valores nulos-

    Unable to cast object of type 'System.DBNull' to type 'System.String'.
    Source=Npgsql

    espero por favor resuelvas mi incognita

    ResponderEliminar
  6. Cómo así? puedes ser más especifico.

    ResponderEliminar
  7. ApellidoPaterno = ConexionPsql.reader.GetString(ConexionPsql.reader.GetOrdinal("apellido_paterno")),

    le asigno de esta manera a una variable.

    el hecho es que el campo en mi tabla permite valores nulos.

    entoncess como el registro de dicha columna es nula.

    me sale este error // Unable to cast object of type 'System.DBNull' to type 'System.String'.
    Source=Npgsql


    ResponderEliminar
  8. Podrias intentar con:

    if(!String.IsNullOrEmpty(ConexionPsql.reader.GetOrdinal("apellido_paterno")){
    ApellidoPaterno = ConexionPsql.reader.GetString(ConexionPsql.reader.GetOrdinal("apellido_paterno")),
    }

    ResponderEliminar
  9. O con esto tambien puedes probar:

    if (ConexionPsql.reader.GetOrdinal("apellido_paterno") != DBNull.Value)
    {
    ApellidoPaterno= ConexionPsql.reader.GetString(ConexionPsql.reader.GetOrdinal("apellido_paterno")),
    }
    else
    {
    ApellidoPaterno="";
    }

    ResponderEliminar