none
como insertar datos en un listbox. desde una tabla mysql, con clases.

    Question

  • tengo el siguiente codigo..

    tengo clase Conexion_Metodos

    using System;


    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Data;
    using MySql.Data.MySqlClient;
    using MySql.Data;
    using System.IO;
    using System.Collections;
    using System.Diagnostics;


    namespace Sistema_Experto
    {
        class Conexion_Metodos
        {
            public Conexion_Metodos() { }
            public MySqlConnection con = new MySqlConnection("server=localhost;user=root;database=a_marinos;password=123;");
            public MySqlCommand cmd = new MySqlCommand();
            public DataSet ds = new DataSet();




            public void conexion(ListBox listBox1)
            {
                try
                {
                    MySqlDataReader reader;
                    //MessageBox.Show("Conectando a MySQL...");
                    con.Open();
                    cmd.CommandText = "select caracteristica from caracteristicas";
                    reader = cmd.ExecuteReader();
                    listBox1.Items.Clear();
                    while (reader.Read())
                    {
                        listBox1.Items.Add(reader[0].ToString());
                    }
                    reader.Close();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }

                con.Close();
                MessageBox.Show("Coneccion Exitosa.");
            }



        }
    }

    // tengo mi form a la hora de ejecutarlo no logro mostrar datos.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Collections;


    namespace Sistema_Experto
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            Conexion_Metodos obj = new Conexion_Metodos();
            private void Form1_Load(object sender, EventArgs e)
            {
                obj.conexion(listBox1);
            }


           
            
        }
    }


    Ccastillo

    Monday, March 26, 2012 3:43 AM

Answers

  • hola

    porque no intentas usando

    namespace Sistema_Experto
    {
        class Conexion_Metodos
        {
            public Conexion_Metodos() { }
            public MySqlConnection con = new MySqlConnection("server=localhost;user=root;database=a_marinos;password=123;");
    
            public DataTable conexion() 
            {
    			string query = "select caracteristica from caracteristicas";
    			MySqlCommand cmd = new MySqlCommand(query, con);
    			
    			MySqlDataAdapter da = new MySqlDataAdapter(cmd);
    			DataTable dt = new DataTable();
    			da.Fill(dt)
    
    			return dt;
            }
    
        }
    }

    y en el form

    namespace Sistema_Experto
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            Conexion_Metodos obj = new Conexion_Metodos();
            private void Form1_Load(object sender, EventArgs e)
            {
                   DataTable dt = obj.conexion();
    	       listBox1.DisplayMemeber = "caracteristica";
    	       listBox1.ValueMemeber = "caracteristica",
    	       listBox1.DataSource = dt;
            }
    		
        }
    }

     no es bueno pasar controles por referencia, mehor es recuperar la info y el propio form se enciarga de asignar donde corresponde      

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    Monday, March 26, 2012 5:12 AM
  • Hola

    Aparte de lo que ha comentado Jose y Leandro. Observo una cosa que a mí personalmente me da miedo y es la definición de esa conexión a nivel publico en la clase.

    Te recomiendo que cada vez que utilices una conexion a bb.dd lo hagas de la siguiente forma.

    using (MySqlConnection con = new MySqlConnection("server=localhost;user=root;database=a_marinos;password=123;"))
    {
       con.Open();
       //resto de código
    }

    Con esto te garantizas que siempre se cierra y liberan los recursos de la conexión.

    Saludos,


    phurtado
    Mi Blog Blog
    Sigueme en Twitter

    Monday, March 26, 2012 7:28 AM

All replies

  • El código parece correcto y debería llenar el list box.  ¿Ya verificó que la consulta esté correcta y que devuelve al menos un registro?


    Jose R. MCP

    Monday, March 26, 2012 4:18 AM
  • Hola webJose

     si, he verificado que la consulta sea correcta(y si  es correcta) pero aun no logro mostrar mis datos.


    Ccastillo

    Monday, March 26, 2012 4:25 AM
  • ¿Ya depuró el código?  ¿Cuántas veces corre el bucle while (reader.Read())?

    Jose R. MCP

    Monday, March 26, 2012 5:08 AM
  • hola

    porque no intentas usando

    namespace Sistema_Experto
    {
        class Conexion_Metodos
        {
            public Conexion_Metodos() { }
            public MySqlConnection con = new MySqlConnection("server=localhost;user=root;database=a_marinos;password=123;");
    
            public DataTable conexion() 
            {
    			string query = "select caracteristica from caracteristicas";
    			MySqlCommand cmd = new MySqlCommand(query, con);
    			
    			MySqlDataAdapter da = new MySqlDataAdapter(cmd);
    			DataTable dt = new DataTable();
    			da.Fill(dt)
    
    			return dt;
            }
    
        }
    }

    y en el form

    namespace Sistema_Experto
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            Conexion_Metodos obj = new Conexion_Metodos();
            private void Form1_Load(object sender, EventArgs e)
            {
                   DataTable dt = obj.conexion();
    	       listBox1.DisplayMemeber = "caracteristica";
    	       listBox1.ValueMemeber = "caracteristica",
    	       listBox1.DataSource = dt;
            }
    		
        }
    }

     no es bueno pasar controles por referencia, mehor es recuperar la info y el propio form se enciarga de asignar donde corresponde      

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina


    Monday, March 26, 2012 5:12 AM
  • Hola

    Aparte de lo que ha comentado Jose y Leandro. Observo una cosa que a mí personalmente me da miedo y es la definición de esa conexión a nivel publico en la clase.

    Te recomiendo que cada vez que utilices una conexion a bb.dd lo hagas de la siguiente forma.

    using (MySqlConnection con = new MySqlConnection("server=localhost;user=root;database=a_marinos;password=123;"))
    {
       con.Open();
       //resto de código
    }

    Con esto te garantizas que siempre se cierra y liberan los recursos de la conexión.

    Saludos,


    phurtado
    Mi Blog Blog
    Sigueme en Twitter

    Monday, March 26, 2012 7:28 AM
  • muchas gracias Leandro Tuttini y  Pedro Hurtado su aporte ha sido de mucha ayuda... Gracias :)


    Ccastillo

    Monday, March 26, 2012 4:45 PM