Pregunta

OleDbDataReader oleDbDataReader = oleDbCommand.ExecuteReader(CommandBehavior.KeyInfo);
DataTable dataTable = oleDbDataReader.GetSchemaTable();

¿Cómo funciona GetSchemaTable()?

¿De dónde obtiene su información de RDBMS?

¿Fue útil?

Solución

La implementación de IDataReader.GetSchemaTable() es hasta el proveedor - por lo que puede variar. Usted puede escribir sus propios proveedores y hacerlo de la forma que desee.

Para ser honesto, esto es malo poco de diseño en el marco - nunca se debe tener métodos de interfaz que devuelven una DataTable sin tipo o DataSet como resultado que podría contener cualquier cosa. Un poco se pierde el punto de restringir por una interfaz en el primer lugar: "Debe tener un método que devuelve DataTable pero no nos importa lo que las filas o columnas que tiene"

Incluso si el proveedor es GetSchemaTable() SQL no volver a la [syscolumns] o [sysobjects]. Eso sería una llamada adicional DB, requieren privilegios adicionales y no trabajar de todos modos, como el conjunto de resultados no tiene que reflejar los objetos de la base de datos.

No estoy seguro, pero yo esperaría que la gran mayoría de las implementaciones IDataReader.GetSchemaTable() de leer algunas de las propiedades de los metadatos mantenidas con el conjunto de resultados.

Otros consejos

GetSchemaTable () lee los metadatos en el conjunto de resultados devuelto por ADO.NET.

A partir de las tablas del sistema (por ejemplo, syscolumns, sysobjects, etc) en cada base de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top