Hola, hace poco consulte en la lista por este mismo tema, he intentaron ayudarme.
Hice varias pruebas y lei algunos articulos, pero sigo sin poder solucionarlo ni entender el problema, detallo mas codigo, a ver si alguien me puede ayudar, esta un poco resumido, pero esta la idea y falla completa.

En la muestra hay 4 Clases:
Clientes: para manejar la estructura de clientes, solo se usa en el ejemplo el metodo LlenarComboBox()
Movimientos: para manejar la estructura de Movimientos, solo se usa en el ejemplo el metodo Llenar()
Firebird: Clase para la manipulacion de la DB, solo alli se crean nuevas instancias del DataSet.
Vinculo: Clase Solo apunta a un archivo u otro, se armo separada.

Necesito, poder conservar ambos datasets independientes y poder trabajarlos simultanemante. Porque si tanto en la clase movimientos como clientes, se crea un nuevo objeto de la clase Vinculo, y este a su vez crea nueva instancia de la clase Firebird para cada uno de ellos, los datasets no son instancias diferentes?
Gracias
Resumen Codigo de las clases:

Empiezo un formulario (solo tiene un combobox)
public partial class Form1 : Form
    {
        public Clientes clientes;
        public DataSet dsClientes;
        public Movimientos movimientos;
        public DataSet dsMovimientos;

        public Form1()...
       
        void Form1Load(object sender, EventArgs e)
        {
            this.clientes = new Clientes();
            this.dsClientes = this.clientes.LlenarComboBox();
            this.cliente.DisplayMember = "NOMBRE";
            this.cliente.ValueMember = "ID";
            this.cliente.DataSource = this.dsClientes.Tables[0].DefaultView;       
            this.movimientos = new Movimientos();
        }
       
        void ClienteSelectedIndexChanged(object sender, EventArgs e)
        {
            /// Al llamar a este metodo se corrompe el combobox this.cliente, llenandolo de registros con System.Data.DataRow)
            this.dsMovimientos = this.movimientos.TraeMovDelCliente(Convert.ToInt32(this.arti.SelectedValue));
        }
    }
/////////////////////////////////////////////////////////////
public class Clientes
    {
        public Vinculo datos;
        public Clientes()
        {
            this.datos = new Vinculo("datos");
        }
       
        public DataSet LlenarComboBox()
        {
            this.datos.db.cargaSentencia("SELECT ID,NOMBRE from CLIENTES WHERE ESTADO<>1 ORDER BY NOMBRE");
            return this.datos.db.EjecutarQueryDS();
        }
    }
//////////////////////////////////////////////////////////
    public class Movimientos
    {
       ...
        public Vinculo datos;
       
        public Movimientos()
        {
            this.datos = new Vinculo("datos");
             ....
        }
       
        public DataSet Llenar(int idCliente)
        {
            this.sql = "SELECT * from MOVIMIENTOS WHERE ESTADO<>1 AND ID_CLIENTE=" + idCliente + " ORDER BY ID";
            this.datos.db.cargaSentencia(this.sql);
            if (this.debugLevel > 2)
            {
                this.log.Crear(this.sql,"SQL-LLENA-MOVIMIENTOS");
            }
            return this.datos.db.EjecutarQueryDS();
        }
//////////////////////////////////////////////////////////////   
public class Firebird
    {   
        ...       
        public DataSet ds;
       
        public Firebird (string baseDatos, string usuario, string clave, byte dialecto, string servidor)
        {
            ...
        }
       
        public DataSet EjecutarQueryDS()
        {
            this.ds = new DataSet();
            try
            {
                this.abrir();
                this.adaptador.SelectCommand = this.comando;
                this.adaptador.Fill(this.ds);
                this.cerrar();
            }
            catch (Exception ex)
            {
                this.error = ex.ToString();
                //ret = 1;
            }
            return this.ds;
        }
    }
   
///////////////////////////////////////////////////////////
public class Vinculo
    {
        public Firebird db;
 
        public Vinculo(string puntero)
        {
            this.bdConfiguracion = new Configuracion("Sistema");
            this.usuario = this.bdConfiguracion.LeeConfiguracion("BASE","usuario","USUARIO"); 
            this.clave = this.bdConfiguracion.LeeConfiguracion("BASE","clave","xxxxxxxxx");
            this.dialecto = Convert.ToByte(this.bdConfiguracion.LeeConfiguracion("BASE","dialecto","3"));
            this.servidor = this.bdConfiguracion.LeeConfiguracion("BASE","servidor","192.168.1.7");
           
            switch (puntero)
            {
                    case "datos": this.camino = this.bdConfiguracion.LeeConfiguracion("BASE","caminoDatos","/datos/bde/base_datos.gdb");
                        break;
                    case "cfg": this.camino = this.bdConfiguracion.LeeConfiguracion("BASE","caminoCfg","/datos/bde/base_cfg.gdb");
                        break;
                    default: this.camino = this.bdConfiguracion.LeeConfiguracion("BASE","caminoDatos","/datos/bde/base_datos.gdb");
                        break;
            }   
            this.db = new Firebird(this.camino, this.usuario, this.clave, this.dialecto, this.servidor);
        }
    }


Responder a