Вопрос

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

Как это GetSchemaTable() работать?

Откуда он получает свою информацию в RDBMS?

Это было полезно?

Решение

Реализация IDataReader.GetSchemaTable() зависит от поставщика - так что это будет варьироваться.Вы можете написать свои собственные провайдеры и делать это так, как вам захочется.

Честно говоря, это плохая часть дизайна в фреймворке - у вас никогда не должно быть интерфейсных методов, которые возвращают нетипизированное DataTable или DataSet поскольку этот результат может содержать все, что угодно.В некотором роде лишает смысла ограничивать это интерфейсом в первую очередь: "у вас должен быть метод , который возвращает DataTable но нам все равно, какие в нем строки или столбцы ".

Даже если поставщиком является SQL GetSchemaTable() не возвращается к [syscolumns] или [sysobjects].Это был бы дополнительный вызов базы данных, требующий дополнительных привилегий и не работающий в любом случае, поскольку результирующий набор не обязательно должен отражать какие-либо объекты в базе данных.

Я не уверен, но я бы ожидал, что подавляющее большинство IDataReader.GetSchemaTable() реализации для чтения некоторых свойств метаданных, хранящихся в результирующем наборе.

Другие советы

GetSchemaTable() считывает метаданные в результирующем наборе, возвращенном ADO.NET .

Из системных таблиц (например, syscolumns, sysobjects и т.д.) в каждой базе данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top