Mantenimiento de datos con C# y Postgres

Aprenderemos hacer un mantenimiento a una tabla del gestos de base de datos postgreSql

Mantenimiento de datos con C# y Postgres

Hola programadores, aficionados y curiosos que encontraron este post un cordial saludo desde los laboratorios de cursania. hoy en nuestra sección "post de miércoles".


Tendremos un review del tutorial Mantenimiento de datos con C# y Postgres


¿otro review?. Si otro review.


Los link de videos son :


Primer 

https://youtu.be/QkaCa3hRVRU


Segundo

https://youtu.be/UDqrhB0eagA


Bien


En un tutorial anterior ya vimos como conectarnos a la base de datos Postgres

https://youtu.be/otlKeYXrdB0


Ahora veremos como trabajar con una tabla en la cual consultaremos los datos, ingresaremos, modificaremos y eliminaremos registros.


Primero creamos la tabla, con los siguientes atributos

Tómese en cuanta que se utiliza los distintos tipos de datos, esto ya que vamos a ver como trabajar con cada uno.


Segundo Crearemos el proyecto donde tendremos un formulario con 2 vistas

En esta vista se mostrara los datos de la tabla y las acciones que podremos realizar


En la otra vista

En esta vista tendremos un elemento por cada atributo de la tabla.


Una ves tengamos la vista terminada crearemos una carpeta en nuestro proyecto la cual llamaremos clases, en esta crearemos la clase Cls_datos 

Esta contara con los métodos que necesitaremos para el trabajo con la base de datos.


En esta clase tendremos un objeto de conexión.

private NpgsqlConnection conex = new NpgsqlConnection();


Por la parte de los métodos tendremos 


Conectar-

En método se cargara los parámetros necesarios para la conexión y se abre la conexión de base de datos 

//Conectar a la Base de datos
    public Boolean Conectar()
    {
      Boolean bestado = true;
      conex.ConnectionString = "User ID= postgres; Password= postgres; " +
        " Host= localhost; Port=5433; Database= postgres; commandtimeout=900";
      try
      {//Confirmacion
        conex.Open();
      }
      catch (Exception)
      {//Error 
        throw;
      }
      return bestado;
    }


Desconectar-

Este método se encargara de cerrar la conexión pero no de destruir el objeto de conexión

    // Desconectar a la Base de datos
    public void Desconectar()
    {
      try
      {//Estado
        if (conex.State == System.Data.ConnectionState.Open)
        {
          conex.Close();
        }
      }
      catch (Exception)
      {//Error 
        throw;
      }
    }


atrapaError-

Este es un método que nos ayudara para cuando nuestras consultas tengan algún error. ya que atrapara la consulta que enviamos a la base de datos.

    //MOSTRAMOS EL ERROR Y ATRAPAMOS LA CONSULTA
    private static void atraparError(Exception e, String cSql)
    {
      System.Windows.Forms.Clipboard.SetText(cSql);
    }


run_scrip-

Este método nos permitirá ejecutar una consulta que no retornara datos, solo se ejecutara.

    //EJECUTAR LA CONSULTA
    public Boolean run_script(String cSql)
    {
      Boolean bestado = true;
      try
      {  //Consulta
        NpgsqlCommand coman = new NpgsqlCommand(cSql, conex);
        coman.ExecuteScalar();
      }
      catch (Exception e)
      {  //Error
        atraparError(e, cSql);
        throw;
      }
      finally
      {  //desconeccion
        //Desconectar();
      }
      return bestado;
    }


listaDatos_lista-

Este método realizara una consulta a la tabla la cual utilizaremos para cargar los controles.

    //METODO REALIZARA LA CONSULTA TRALLENDO DATOS
    public DataTable listaDatos_lista(String cSql)
    {
      DataTable Lista = new DataTable();
      try
      {  //Consulta
        NpgsqlCommand coman = new NpgsqlCommand(cSql, conex);
        NpgsqlDataAdapter resp = new NpgsqlDataAdapter(coman);
        resp.Fill(Lista);
      }
      catch (Exception e)
      {
        atraparError(e, cSql);
        throw;
      }
      finally
      {
        //desconeccion
        //Desconectar();
      }
      return Lista;
    }


lista_Data_set-

Este método realizara una consulta a la tabla, la cual nos retornara todos los datos existentes. con estos datos cargaremos la lista.

    //METODO REALIZARA LA CONSULTA TRALLENDO DATOS
    public DataSet lista_Data_set(String cSql)
    {
      DataSet dts = new DataSet();
      try
      {
        //Consulta
        NpgsqlCommand coman = new NpgsqlCommand(cSql, conex);
        NpgsqlDataAdapter resp = new NpgsqlDataAdapter(coman);
        resp.Fill(dts);
      }
      catch (Exception e)
      {
        atraparError(e, cSql);
        throw;
      }
      finally
      {
        //desconeccion
        //Desconectar();
      }
      return dts;
    }


Una ves tengamos nuestros métodos creados, empezaremos a trabajar con el formulario y sus controles.


En la clase vinculada con el formulario


Crearemos 2 objetos 

//variable para la distribucion de ingreso o modificacion
Cls_datos datos = new Cls_datosl();


Este objeto nos permitirá trabajar con la conexión a la base de datos

//tabla para los registros
DataSet xLista = null;


Este objeto nos ayudara a tomar los datos de la tabla, los cuales cargaremos a los controles 


tendremos un variable

Boolean bnuevo;


Esta nos ayudara a diferenciar si estamos ingresando o modificando los registros


En esta clase utilizaremos los siguientes métodos


comilla_simple-

Con este método le agregaremos comillas simples a una texto

    private String comilla_simple(String xcadena)
    {
      return "'" + xcadena + "'";
    }


mostrar_paginas- 

Con este método ocultaremos o mostraremos las vistas

    private void mostrar_paginas(bool bprimera_pagina)
    {  // removemos la pagina segun sea el caso 
      tabControl1.TabPages.Remove(bprimera_pagina ? tabPage2:tabPage1);
      // ingresamos la pagian segun sea el casa , esta 100pre en la primera posicion , ya que solo se mostrara 1 pagina
      tabControl1.TabPages.Insert(0, !bprimera_pagina ? tabPage2 : tabPage1);
    }


conectarBd- 

Con este método conectaremos la base de datos 


    public Boolean conectarBd()
    {
      Boolean v = false;
      try
      {  //Conexion
        if (datos.Conectar())
        {
          v = true;
        }
      }
      catch (Exception e)
      {
        MessageBox.Show(e.Message);
      }

      return v;
    }


cargar_datos-

Con este método cargaremos el datagridview con los datos consultados de la tabla


    public void cargar_datos()
    {  
      //Cadena de Consulta 
      // String cadena = "select video_nombre as Lista_Reproduccion from videos where lista_id = " + Convert.ToString(cmb_lista.SelectedValue) + 
      String cadena = "select prod_id , prod_descri , prod_stock from productos where prod_activo = true order by prod_id;";
      try
      {  //CARGAMOS LOS DATOS DE LOS ESQUEMA
        xLista = datos.lista_Data_set(cadena);
      }
      catch (Exception e)
      {
        MessageBox.Show(e.Message);
      }
      // le asignamos al DataGridView el contenido del dataSet
      dgv_lista.DataSource = xLista.Tables[0];
      // eliminamos la ultima fila del datagridview que se autoagrega
      dgv_lista.AllowUserToAddRows = false;
      // acomodar columas en la gria
      dgv_lista.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
    }


Terminemos y empecemos a armar la funcionalidad.


En el método init nos conectaremos a la base de datos y guardaremos esa conexión en el objeto datos 

Llamaremos al método cargar_datos- para listar los datos de la tabla.

removeremos la segunda vista 

      // cargamos los datos a la gria
      try
      {
        datos.Conectar();
      }
      catch (Exception f)
      {
        MessageBox.Show(f.Message);
      }
      cargar_datos();
      //if (conectarBd()) { cargar_datos(); }
      // quitamos la segunda pagina
      tabControl1.TabPages.Remove(tabPage2);


Botón Salir

Desconectaremos de la base de datos y cerramos el formulario

    private void btn_salir_Click(object sender, EventArgs e)
    {  // desconectamos y salimos
      datos.Desconectar();
      this.Close();
    }


Botón nuevo 

Usaremos el método mostrar_paginas- para mostrar la segunda vista

Reiniciaremos los valores de los controles

Indicaremos que la acción a realizar es registrar 

    private void btn_nuevo_Click(object sender, EventArgs e)
    {  // mostrar 2da pagina
      mostrar_paginas(false);
      // restaurar valores
      txt_codigo.Text = txt_descri.Text = txt_precio.Text = txt_stock.Text = rtb_comentario.Text = "";
      chk_activo.Checked = true;
      dateTimePicker1.Value = DateTime.Now;
      txt_codigo.Focus();
      //variable indicando nuevo registro
      bnuevo = true;       
    }


Botón modificar 

Usaremos el método mostrar_paginas- para mostrar la segunda vista

Indicaremos que la acción a realizar es modificara

Bloquearemos el control de código 

Tomaremos el código y haremos una consulta para traer los datos relacionados a este código.

Una ves retornados los datos, los cargaremos en los controles


    private void btn_modificar_Click(object sender, EventArgs e)
    {  //mostrar la 2da , pagina
      mostrar_paginas(false);
      //bloqueamos el codigo del producto 
      txt_codigo.ReadOnly = true;
      //variable de edicion , indicando la modificacion
      bnuevo = false;

      //tabla para los registros
      DataTable xLista = null;
      //atrapo el codigo
      String codigo = dgv_lista.CurrentRow.Cells[0].Value.ToString();
      //Cadena de Consulta 
      // String cadena = "select video_nombre as Lista_Reproduccion from videos where lista_id = " + Convert.ToString(cmb_lista.SelectedValue) + 
      String cadena = "select * from productos where prod_id = " + "'" + codigo + "'";
      try
      {  // CARGAMOS LOS DATOS DE LOS ESQUEMA
        xLista = datos.listaDatos_lista(cadena);
        DataRow fila = xLista.Rows[0];
        //txt_codigo.Text = fila["prod_id"].ToString() ;
        txt_codigo.Text = fila.ItemArray[0].ToString();
        txt_descri.Text = fila.ItemArray[1].ToString();
        txt_precio.Text = fila.ItemArray[2].ToString();
        txt_stock.Text = fila.ItemArray[3].ToString();
        chk_activo.Checked =Convert.ToBoolean(fila.ItemArray[4].ToString());
        //DateTime d = new DateTime();
        dateTimePicker1.Value = Convert.ToDateTime(fila.ItemArray[5].ToString());
        //dateTimePicker1.MinDate = Convert.ToDateTime(fila.ItemArray[5].ToString());
        rtb_comentario.Text = fila.ItemArray[6].ToString();
         
      }
      catch (Exception b)
      {
        MessageBox.Show(b.Message);
      }
    }


Botón eliminar

Tomaremos el código y haremos una consulta para eliminar los datos relacionados a este código


    private void btn_eliminar_Click(object sender, EventArgs e)
    {  //atrapo el codigo
      String codigo = dgv_lista.CurrentRow.Cells[0].Value.ToString();
      //elimino el dato
      //if (conectarBd())
      //{
        try
        {  // sentencia de eliminacion 
          datos.run_script("delete from productos where prod_id = " + "'" + codigo + "'");
        }
        catch (Exception a)
        {
          MessageBox.Show(a.Message);
        }
         
//      }
      //cargo la gria
      //if (conectarBd()) cargar_datos();
      cargar_datos();
    }


Botón Agregar

De acuerdo a la acción crearemos una consulta, tomaremos los datos de los controles para enviarlos a la base de datos. a través de la consulta.

Llamaremos al método cargar_datos- y daremos click al Botón Cancelar o haremos que se ejecute su evento


    private void btn_agregar_Click(object sender, EventArgs e)
    {  String cadena = "";
      if (bnuevo)
      {  // armando la cadena de insercion
        cadena += "insert into productos values ( ";
        cadena += comilla_simple(txt_codigo.Text) + ",";
        cadena += comilla_simple(txt_descri.Text) + ",";
        cadena += Convert.ToDouble(txt_precio.Text) + ",";
        cadena += txt_stock.Text + ",";
        cadena += (chk_activo.Checked ? "true" : "false") + ",";
        cadena += comilla_simple(dateTimePicker1.Value.ToString()) + ",";
        cadena += comilla_simple(rtb_comentario.Text) + ")";
      }
      else
      {  // armando la cadena de actualizacion
        var feho = comilla_simple(dateTimePicker1.Value.Date.ToString("yyyy-MM-dd"));
        feho = feho.Replace("/","-");

        cadena += "update productos set ";         
        cadena += "prod_descri = " + comilla_simple(txt_descri.Text) + ",";
        cadena += "prod_precio = " + txt_precio.Text + ",";
        cadena += "prod_stock = " + txt_stock.Text + ",";
        cadena += "prod_activo = " + (chk_activo.Checked ? "true" : "false") + ",";
        cadena += "prod_fecha_venci = " + feho + ",";
        cadena += "prod_comentario = " + comilla_simple(rtb_comentario.Text) ;
        cadena += " where prod_id = " + comilla_simple(txt_codigo.Text);
      }
      try
      {  // ejecutar consulta
        datos.run_script(cadena);
      }
      catch (Exception a)
      {
        MessageBox.Show(a.Message);
      }
      cargar_datos();

      btn_cancelar_Click(sender, e);
    }


Botón Cancelar

Mostraremos la primera vista

Desbloquearemos el control de código 

    private void btn_cancelar_Click(object sender, EventArgs e)
    {  //quitar la segunda pagina y mostrar la primera
      mostrar_paginas(true);
      // desbloqueamos el codigo
      txt_codigo.ReadOnly = false;
    }


Bueno esto es todo por hoy programadores, aficionados y curiosos que encontraron este post.

Si tienes alguna duda no dudes en dejarnos tu comentario.

Si quieres mas contenido de este tipo regístrate. y podrás disfrutar de nuestros distintos contenidos.

Nos vemos el próximo miércoles.


Compartir:
Contact Person

Karakal

8 meses antes

Hola, ustedes son muy buenos en C#< pero aun estoy esperando el curso C# desde cero, no importa que sea de pago si es de calidad...Saludos

Tutor

Tutor
Luis
Desarrollador de Software

Post Relacionados

C# conexión a postgres

En este post veremos como realizar una conexión al gestor de base de datos postgres


Calificación

4.5

5 Comentarios
Comentar ahora