[ Foro de C# ]

Problema al Llenar combobox con datatable desde sqldataadapter con clase

17-Dec-2014 06:24
Invitado (j.hcor)
1 Respuestas

En una clase tengo la conexion y los sqldataadapter y devuelven un datatable, solo he hecho dos y solo funciona o uno u otro, los dos no.

Esta es la clase:

 
        public static DataTable llenarestado()
        {
 
            using (SqlConnection Conex = Conexion.Obtener())
            {
                SqlDataAdapter cmdEstado = new SqlDataAdapter("Select idEstado, nombre From Estado", Conex);
                DataTable tabla = new DataTable();
                cmdEstado.Fill(tabla);
 
                return tabla;
            }
        }
 
 
        public static DataTable llenartel()
        {
 
            using (SqlConnection Conex = Conexion.Obtener())
            {
                SqlDataAdapter cmdtel = new SqlDataAdapter("Select idTelefono From Telefono", Conex);
                DataTable tTel = new DataTable();
                cmdtel.Fill(tTel);
 
                return tTel;
            }
        }
 


y esto lo tengo en el form:

 
        private void Form1_Load(object sender, EventArgs e)
        {
            DataTable tEstado = Conexion.llenarestado();
            cbxEstado.DataSource = tEstado;
            cbxEstado.DisplayMember = "nombre";
            cbxEstado.ValueMember = "idEstdo";
 
            DataTable tTel = Conexion.llenartel();
            cbxTel.DataSource = tTel;
            cbxTel.DisplayMember = "idTelefono";
            cbxTel.ValueMember = "idTelefono";  
        } 
 


Solo el primero funciona, el de Estado, y si lo elimino el siguiente funciona, pero no ambos ala vez, como podría resolverlo?


17-Dec-2014 22:55
Nacho Cabanes (+31)

En ambos casos hay "Conexion." delante, que estás reutilizando. Como tu fuente está incompleto, imagino que esos métodos estáticos pertenecen a la clase Conexion.

¿No puede ser que no estés cerrando la conexión y liberando recursos entre una llamada y la otra? Porque tampoco está el código fuente del método "Obtener", pero es posible que el problema ande por ahí.

Si no recuerdo mal, si la conexión no se abre con un "using" para que se cierre automáticamente, deberás llamar manualmente a "Dispose", algo como

 
if(miConexion != null)
    ((IDisposable)miConexion).Dispose();
 


donde miConexion sería la variable de tipo SqlConnection que estás usando.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)