Recuperar datos mediante AdomdDataReader
Al recuperar datos analíticos, el objeto AdomdDataReader proporciona un equilibrio óptimo entre sobrecarga e interactividad. El objeto AdomdDataReader recupera una secuencia sin información de estructura jerárquica de datos de sólo lectura y de sólo avance de un origen de datos analíticos. Esta secuencia de datos no almacenada en búfer habilita la lógica de procedimiento para procesar los resultados de un origen de datos analíticos secuencialmente de forma eficaz. Esto hace que AdomdDataReader sea una buena opción para recuperar grandes cantidades de datos con fines de visualización, ya que los datos no se almacenan en la memoria caché.
AdomdDataReader también puede aumentar el rendimiento de la aplicación al recuperar los datos tan pronto como estén disponibles, en lugar de esperar a que se devuelvan los resultados completos de la consulta. AdomdDataReader también reduce la sobrecarga del sistema ya que, de forma predeterminada, este lector almacena las filas de una en una en la memoria.
La contrapartida del rendimiento optimizado es que el objeto AdomdDataReader proporciona menos información sobre los datos recuperados que otros métodos de recuperación de datos. El objeto AdomdDataReader no admite un modelo de objetos grande para representar datos o metadatos; además, dicho modelo de objetos tampoco permite características analíticas más complejas, como la reescritura de celdas. Sin embargo, el objeto AdomdDataReader proporciona un conjunto de métodos con establecimiento inflexible de tipos para recuperar datos de conjuntos de celdas y un método para recuperar metadatos de conjuntos de celdas en formato tabular. Además, AdomdDataReader implementa la interfaz IDbDataReader para la compatibilidad con el enlace de datos y para recuperar datos mediante el método SelectCommand, desde el espacio de nombres System.Data de la biblioteca de clases Microsoft .NET Framework.
Recuperar datos desde AdomdDataReader
Si desea utilizar el objeto AdomdDataReader para recuperar datos, siga estos pasos:
Crear una nueva instancia del objeto.
Para crear una nueva instancia de la clase AdomdDataReader, llame al método Execute o ExecuteReader del objeto AdomdCommand.
Recuperar datos.
Cuando el comando ejecuta la consulta, ADOMD.NET devuelve los resultados en formato Resultset (formato tabular descrito en la especificación de XML for Analysis) a fin de quitar la información de estructura jerárquica de los datos para el objeto AdomdDataReader. El formato tabular no es muy frecuente en las consultas de datos analíticos debido a la dimensionalidad variable de dichos datos.
ADOMD.NET almacena estos resultados tabulares en el búfer de red del cliente hasta que los solicite a través de uno de los métodos siguientes:
Llame al método Read del objeto AdomdDataReader.
El método Read obtiene una fila de los resultados de la consulta. A continuación, puede pasar el nombre o la referencia ordinal de la columna a la propiedad Item para tener acceso a cada una de las columnas de la fila devuelta. Por ejemplo, la primera columna de la fila actual se denomina ColumnName. A continuación, reader[0].ToString() o reader["ColumnName"].ToString() devolverá el contenido de la primera columna de la fila actual.
Llame a uno de los métodos de descriptor de acceso con tipo.
AdomdDataReader proporciona una serie de métodos de descriptor de acceso con tipo (métodos que permiten tener acceso a los valores de columna con sus tipos de datos nativos). Cuando se conoce el tipo de datos subyacente de un valor de columna, el uso de un método de descriptor de acceso con tipo reduce la conversión de tipos que es necesario realizar al recuperar el valor de columna y, por lo tanto, ofrece el máximo rendimiento.
Entre los métodos de descriptor de acceso con tipo disponibles se incluyen GetDateTime, GetDouble y GetInt32. Para obtener una lista completa de los métodos de descriptor de acceso con tipo, vea AdomdDataReader.
Cerrar el lector.
Siempre se debe llamar al método Close cuando se haya terminado de utilizar el objeto AdomdDataReader. Mientras haya abierta una instancia de un objeto AdomdDataReader, dicho AdomdDataReader utiliza AdomdConnection de forma exclusiva. No se podrá ejecutar ningún comando en la instancia de AdomdConnection, ni siquiera para crear otro objeto AdomdDataReader o System.Xml.XmlReader, hasta que se cierre el objeto AdomdDataReader original.
Ejemplo de recuperación de datos desde AdomdDataReader
El ejemplo de código siguiente recorre en iteración un objeto AdomdDataReader y devuelve los dos primeros valores de cada fila como cadenas.
If Reader.HasRows Then
Do While objReader.Read()
Console.WriteLine(vbTab & "{0}" & vbTab & "{1}", _
objReader.GetString(0), objReader.GetString(1))
Loop
Else
Console.WriteLine("No rows returned.")
End If
objReader.Close()
if (objReader.HasRows)
while (objReader.Read())
Console.WriteLine("\t{0}\t{1}", _
objReader.GetString(0), objReader.GetString(1));
else
Console.WriteLine("No rows returned.");
objReader.Close();
Recuperar metadatos desde AdomdDataReader
Mientras haya abierta una instancia de un objeto AdomdDataReader, puede recuperar información de esquema, o metadatos, sobre el conjunto de registros actual a través del método GetSchemaTable. GetSchemaTable devuelve un objeto DataTable que se rellena con la información de esquema del conjunto de registros actual. DataTable contendrá una fila para cada columna del conjunto de registros. Cada columna de la fila de la tabla de esquema se asigna a una propiedad de la columna devuelta en el conjunto de celdas, donde ColumnName es el nombre de la propiedad y el valor de la columna es el valor de la propiedad.
Ejemplo de recuperación de metadatos desde AdomdDataReader
El ejemplo de código siguiente escribe la información de esquema de un objeto AdomdDataReader.
Dim schemaTable As DataTable = objReader.GetSchemaTable()
Dim objRow As DataRow
Dim objColumn As DataColumn
For Each objRow In schemaTable.Rows
For Each objColumn In schemaTable.Columns
Console.WriteLine(objColumn.ColumnName & " = " & objRow(objColumn).ToString())
Next
Console.WriteLine()
Next
DataTable schemaTable = objReader.GetSchemaTable();
foreach (DataRow objRow in schemaTable.Rows)
{
foreach (DataColumn objColumn in schemaTable.Columns)
Console.WriteLine(objColumn.ColumnName + " = " + objRow[objColumn]);
Console.WriteLine();
}
Recuperar varios conjuntos de resultados
En minería de datos se admite el concepto de tablas anidadas, que ADOMD.NET expone como conjuntos de filas anidados. Para recuperar el conjunto de filas anidado asociado a cada fila, llame al método GetDataReader.