none
Acceso desde C# a BBDD Access utilizando un OleDB DataSet RRS feed

  • Pregunta

  • Hola a todos:

    Soy nuevo en el lenguaje e intento acceder a una BBDD Access utilizando un conector DataSet OleDB de la siguiente manera:

    1. Creo el origen de datos utilizando el IDE de Visual Studio 2019, el cual crea un DataSet y su correspondiente TableAdapter
    2. La BBDD tiene varias tablas y quiero escoger una de ellas de forma aleatoria, para lo que utilizo un número aleatorio que determina el número de la tabla, sea 0, 1, 2 ó 3.
    3. En este momento pienso que necesitaré llenar el TableAdapter, pero desconozco la manera de hacerlo.
    4. Tampoco encuentro en el código la manera de utilizar el objeto DataSet creado al efecto.
    5. He leído que hay una manera de cargar una tabla de forma más rápida que utilizando el DataSet, esto es el DataReader, pero éste objeto no tiene un método para determinar el número de filas de la BBDD, por lo que no lo veo práctico.
    6. ¿Existe otra forma mejor de hacerlo?


    Manuel Cavero

    jueves, 29 de agosto de 2019 15:27

Respuestas

  • Lo primero, si quieres cargar una tabla variable no utilices un tableadapter y datasets generados por el diseñador. Usa una consulta dinámicamente en el código:

    Dim da as new DataAdapter("select * from " + nombreDeLaTabla, conexion);
    Dim dt as new DataTable();
    da.Fill(dt); // Esto carga los datos en el datatable

    Cuando el DataAdapter carga los registros en el DataTable, internamente utiliza un DataReader para hacerlo, por lo que no es más rápido usar el DataReader. La ventaja del DataReader es que puedes ir procesando los registros sobre la marcha según los vas leyendo, por lo que no necesitas ocupar la memoria con todos ellos cargados a la vez. Pero si pensabas traerlos a un datatable de todas maneras, entonces no merece la pena que te pongas a escribir código con un datareader. Usa el .Fill y deja que éste utilice su datareader interno.

    • Propuesto como respuesta Javi Fernández F viernes, 30 de agosto de 2019 3:41
    • Marcado como respuesta Manuel Cavero viernes, 30 de agosto de 2019 14:44
    jueves, 29 de agosto de 2019 16:27
    Moderador

Todas las respuestas

  • Lo primero, si quieres cargar una tabla variable no utilices un tableadapter y datasets generados por el diseñador. Usa una consulta dinámicamente en el código:

    Dim da as new DataAdapter("select * from " + nombreDeLaTabla, conexion);
    Dim dt as new DataTable();
    da.Fill(dt); // Esto carga los datos en el datatable

    Cuando el DataAdapter carga los registros en el DataTable, internamente utiliza un DataReader para hacerlo, por lo que no es más rápido usar el DataReader. La ventaja del DataReader es que puedes ir procesando los registros sobre la marcha según los vas leyendo, por lo que no necesitas ocupar la memoria con todos ellos cargados a la vez. Pero si pensabas traerlos a un datatable de todas maneras, entonces no merece la pena que te pongas a escribir código con un datareader. Usa el .Fill y deja que éste utilice su datareader interno.

    • Propuesto como respuesta Javi Fernández F viernes, 30 de agosto de 2019 3:41
    • Marcado como respuesta Manuel Cavero viernes, 30 de agosto de 2019 14:44
    jueves, 29 de agosto de 2019 16:27
    Moderador
  • Hola Alberto!

    Veo que has utilizado código VB para responder, así que intentaré traducirlo a C#:

    //Declaración del Data Adapter
    
    DataAdapter dataAdapter = new DataAdapter("SELECT * FROM + nombredelatabla, conexiónOleDB");
    
    //Declaración del Data Table
    
    DataTable datatable = new DataTable();
    
    //Carga de los Datos
    
    dataAdapter.Fill(DataTable);

    Respondiendo a tu propuesta para utilizar el DataSet:

    Pensaba traer a memoria la tabla de datos entera, pues la necesito así que haré lo que propones.

    Muchas gracias Alberto


    Manuel Cavero

    viernes, 30 de agosto de 2019 14:44