Ver Mensaje Individual
  #12 (permalink)  
Antiguo 22/01/2003, 08:36
jlchavez
 
Fecha de Ingreso: mayo-2002
Ubicación: Guatemala
Mensajes: 160
Antigüedad: 22 años
Puntos: 1
Ahhhh ahora ya entendi que te hace falta jeje

La forma de acceso a datos ya no es en un flujo directo desde la base de datos, hasta el código, si usas el DataAdapter. Le denominan "disconected recordset", por que se ejecuta el DataAdapter que lee todos los resultados de la base de datos y te quedan en una sola colección en memoria, un DataSet.

Pongamos un ejemplo: (yo programo en C#, solo sera de reescribirlo en VB)

Cita:
OleDbConnection Con1 = new OleDbConnection("...");
OleDbDataAdapter DataA1 = new OleDbDataReader("Select * from emp",Con1);
DataSet ds1 = new DataSet();
DataA1.fill(ds1,"Datos");
La primera linea utilizara en lugar de "..." el string de conección.

La segunda crea un Adaptador que se encarga de ejecutar los queries a la BD.

La tercera se crea un DataSet que almacenaro los datos.

La cuarta es el Adaptador que se le indica que llene el DataSet con una tabla llamada "Datos", esos datos provienen del query string de la segunda línea.

Para accesar los datos:

Cita:
DataTable dt1 = ds1.Tables["Datos"]
DataTable tiene dos objetos "Rows", y "Columns". Rows es un DataRowCollection, con todos los registros que se obtuvieron de la base de datos. Columns es un DataColumnCollection que contiene el listado de todas las columnas que devolvio el query.

Cita:
dt1.Rows.Count
Esto te devuelve el número de registros obtenidos.

Cita:
dt1.Columns.Count
El número de columnas.

Los resultados los podes accesar de la siguiente forma:

Cita:
DataRow drtemp = dt1.Rows[0]
object col1 = drtemp[0]
DataRow ya es la collección de datos de un registro devuelto. El DataRowCollection posee un indice ([n]) para poder accesar en orden los registros, de ahí que en la primera línea de este último bloque de código se obtiene un registro, el primero (0, indices que inician en 0). En la segunda línea se obtiene la primer columna de los resultados (drtemp[0]).

Para volver estos registros en el tipo correcto, podemos usar lo siguiente:

Cita:
string nombre_emp = drtemp[0].ToString();
float sueldo = Convert.ToFloat(drtemp[1].ToString());
float sueldo2 = (float)drtemp[1];
Supongamos que vamos a mostrar todos los nombres de empleados:

Cita:
OleDbConnection Con1 = new OleDbConnection("...");
OleDbDataAdapter DataA1 = new OleDbDataReader("Select name from emp",Con1);
DataSet ds1 = new DataSet();
DataA1.fill(ds1,"Datos");
int c = 0;
foreach (DataRow drtemp in ds1.Tables["Datos"].Rows) {
Response.Write(String.Format("[{0}] {1}",c++,drtemp["name"]);
}
o
Cita:
OleDbConnection Con1 = new OleDbConnection("...");
OleDbDataAdapter DataA1 = new OleDbDataReader("Select name from emp",Con1);
DataSet ds1 = new DataSet();
DataA1.fill(ds1,"Datos");
int c = 0;
foreach (DataRow drtemp in ds1.Tables["Datos"].Rows) {
Response.Write(String.Format("[{0}] {1}",c++,drtemp[0]);
}
El resultado en la página sera:

Cita:
[0] Scott
[1] Tomas
[2] Cristine
Esta es una de las formas rápidas de accesar datos, sin tanta programación y preocupación, pero también existe el DataReader, para procesar los datos sin requerir del DataAdapter como una capa intermedia.
__________________
José Luis Chávez del Cid
Systems Developer Specialist
ACS Inc./Xerox
Guatemala