Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: F3RN1 en 24 Mayo 2008, 16:59 pm



Título: Base datos c#
Publicado por: F3RN1 en 24 Mayo 2008, 16:59 pm
Hola estoy haciendo una aplicación en c# que utiliza una bd creada con access. Quiero hacer un codigo de prueba para ver si me doy conectao bien y parece ser que no. Miren el codigo es el siguiente:

Código:
public class BD
        {
            DataSet myDataSet;
            string AccessCon;
            OleDbConnection myAccessCon;

            public BD()
            {
                myAccessCon = null;
                AccessCon = "Provider=Microsoft.Jet.OLEDB.12.0;Data Source=C:\\Documents and Settings\\F3RN1\\Mis documentos\\Base_de_Datos_DAS.accdb";
                myDataSet = new DataSet();
            }

            public void conexion()
            {
                try
                {
                    myAccessCon = new OleDbConnection(AccessCon);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Error: No se pudo establecer la conexión con la Base de Datos. \n{0}", ex.Message);
                    return;
                }
            }

            public void recuperar(String sentencia, String tabla)
            {
                try
                {
                    OleDbCommand myAccessCommand = new OleDbCommand(sentencia, myAccessCon);
                   
                    OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(myAccessCommand);

                    myAccessCon.Open();
                    myDataAdapter.Fill(myDataSet, tabla);

                }
                catch (Exception ex)
                {
                    Console.WriteLine("Error: Fallo al recuperar los datos desde la Base de Datos.\n{0}", ex.Message);
                    return;
                }
                finally
                {
                    myAccessCon.Close();
                 
                }
            }

            public void mostrar()
            {
             
                DataTableCollection dta = myDataSet.Tables;
                foreach (DataTable dt in dta)
                {
                   
                    //Console.WriteLine("Encontrada la Tabla {0}", dt.TableName);
                    MessageBox.Show("Encontrada la Tabla {0}", dt.TableName);
                }

               
            }

        }

Esa clase me la he creado yo y ahora en el Form 1 en este método tengo esto:

Código:
private void porNºClienteToolStripMenuItem_Click(object sender, EventArgs e)
        {
            baseD = new BD();

            baseD.conexion();

            baseD.recuperar("Select * from Articulos","Articulos");

            baseD.mostrar();

He estado traceando y parece ser que va pasando bien po todo el codigo pero dentro del método mostrar() no entra dentro del foreach y por eso no me muestra el messageBox. ¿Que estoy haciendo mal?.

Decir que mi base de datos en access se llama Base_De_Datos_Das.accdb y tiene dos tablas, Artículos (con datos) y Clientes (vacia de momento).


Un saludo


Título: Re: Base datos c#
Publicado por: MANULOMM en 9 Junio 2008, 01:52 am
pues es puramente error de logica, cual? no tengo idea... :laugh: :laugh: :laugh:, intenta depurar y pon un punto de interrupcion en el inicio del foreach, y fijate cuantas tablas te estan quedando en el DataTableCollection. probare y te cuento en caso del algo.

Atentamente,

Juan Manuel Lombana
Medellín - Colombia


Título: Re: Base datos c#
Publicado por: HappyLellow en 11 Junio 2008, 19:57 pm
Buenas,

Por pura lógica, si en el método mostrar no está pasando por el foreach es porque el DataSet no contiene ninguna tabla así que el error estaría en el método que ejecutas antes. Suponiendo que la tabla Artículos tenga algún registro, ¿has comprobado que le asignas la conexión al OleDbDataAdapter?

Por cierto, también te puede servir leer esto:
Citar
El objeto IDbConnection asociado al comando select debe ser válido, aunque no es necesario que esté abierto. Si la interfaz IDbConnection está cerrada antes de llamar a Fill, se abre para recuperar datos y, a continuación, se cierra. Si la conexión está abierta antes de llamar a Fill, permanece abierta.

Saludos.