FillSchema(DataSet, SchemaType, String)
Метод реализует добавление или обновление схемы DataSet в соответствие со схемой в источнике данных.
Этот метод получает сведения схемы из источника данных с использованием свойства SelectCommand.
Операция FillSchema
добавляет объект DataTable
к указанному DataSet
. Затем столбцы добавляются в объект DataColumnCollection
объекта DataTable
и настраиваются следующие свойства DataColumn
, если они существуют в источнике данных:
-
AllowDBNull;
-
AutoIncrement. Свойства AutoIncrementStep и AutoIncrementSeed нужно задать отдельно;
-
MaxLength;
-
ReadOnly;
-
Unique.
Метод FillSchema
также настраивает свойства PrimaryKey и Constraints в соответствии со следующими правилами:
-
если один или несколько столбцов первичных ключей возвращаются свойством SelectCommand, то они используются в качестве столбцов первичных ключей для объекта
DataTable
; -
если столбцы первичных ключей не загружаются, а загружаются уникальные столбцы, то эти уникальные столбцы используются как первичный ключ только в том случае, если все они не могут содержать null-значения. Если хотя бы один столбец допускает null-значения, к объекту
ConstraintCollection
добавляется объектUniqueConstraint
, но свойство PrimaryKey не задается; -
если возвращаются и столбцы первичных ключей, и уникальные столбцы, то столбцы первичных ключей используются в качестве столбцов первичных ключей для объекта
DataTable
.
Первичные ключи и уникальные ограничения добавляются к объекту ConstraintCollection
в соответствии с предыдущими правилами, но другие типы ограничений не добавляются.
Сведения о первичном ключе используются во время применения метода Fill
для поиска и замены строк, у которых столбцы ключей совпадают. Если это нежелательно, рекомендуется использовать метод Fill
без запроса сведений о схеме.
Синтаксис
public DataTable[] FillSchema( DataSet dataSet, SchemaType schemaType, string srcTable );
dataSet
– объект DataSet
для заполнения схемой.
schemaType
– одно из значений типа SchemaType, указывающее, как применять схему:
-
Source
– информация о схеме должна браться из источника данных; -
Mapped
– к полям, возвращенным запросом, должна применяться схема из своей коллекции TableMappings.
srcTable
– имя таблицы в источнике данных, используемой для загрузки записей.
Возвращаемое значение
Ссылка на коллекцию объектов DataTable
, которые были добавлены в объект DataSet
.
Исключения
ArgumentNullException
| Параметр dataSet содержит null-значение. | |
ArgumentException
| Параметр srcTable содержит null-значение или пустую строку. | |
InvalidOperationException
| Свойство SelectCommand не инициализировано. | |
ArgumentOutOfRangeException
| Значение параметра schemaType не является одним из значений SchemaType. | |
LinterSqlException
| Код завершения СУБД ЛИНТЕР не равен 0 . |
Примеры
1) Пример загрузки схемы для SchemaType.Mapped.
// C# using System; using System.Data; using System.Data.Common; class FillSchemaSample { static void Main() { // Создание фабрики классов провайдера DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.LinterClient"); // Соединение с БД DbConnection con = factory.CreateConnection(); con.ConnectionString = "Data Source=LOCAL;User ID=SYSTEM;Password=MANAGER8"; // Создание объекта DataSet DataSet dataset = new DataSet(); // Создание объекта DataTable DataTable table = dataset.Tables.Add("Автомобили"); table.Columns.Add("Номер", typeof(int)); table.Columns.Add("Производитель", typeof(string)); table.Columns.Add("Модель", typeof(string)); // Отображение таблицы БД на таблицу DataTable DataTableMapping mapping = new DataTableMapping("Table", "Автомобили"); mapping.ColumnMappings.Add("PERSONID", "Номер"); mapping.ColumnMappings.Add("MAKE", "Производитель"); mapping.ColumnMappings.Add("MODEL", "Модель"); // Создание объекта DbDataAdapter DbDataAdapter adapter = factory.CreateDataAdapter(); adapter.SelectCommand = factory.CreateCommand(); adapter.SelectCommand.Connection = con; adapter.SelectCommand.CommandText = "select personid, make, model from auto"; adapter.TableMappings.Add(mapping); // Вывод на экран исходной схемы Console.WriteLine("Исходная схема DataSet:"); OutputSchema(dataset); // Заполнение объекта DataSet схемой из БД adapter.FillSchema(dataset, SchemaType.Mapped, "Table"); // Вывод на экран полученной схемы Console.WriteLine("Схема DataSet после загрузки из БД:"); OutputSchema(dataset); } private static void OutputSchema(DataSet dataset) { foreach (DataTable table in dataset.Tables) { Console.WriteLine("Имя таблицы: " + table.TableName); Console.WriteLine("Столбцы таблицы:"); Console.WriteLine("ColumnName | AllowDBNull | AutoIncrement | " + "MaxLength | ReadOnly | Unique"); foreach (DataColumn column in table.Columns) { Console.WriteLine( "{0,-13} | {1,-11} | {2,-13} | {3,-9} | {4,-8} | {5,-6}", column.ColumnName, column.AllowDBNull, column.AutoIncrement, column.MaxLength, column.ReadOnly, column.Unique); } } } } Результат выполнения примера: Исходная схема DataSet: Имя таблицы: Автомобили Столбцы таблицы: ColumnName | AllowDBNull | AutoIncrement | MaxLength | ReadOnly | Unique Номер | True | False | -1 | False | False Производитель | True | False | -1 | False | False Модель | True | False | -1 | False | False Схема DataSet после загрузки из БД: Имя таблицы: Автомобили Столбцы таблицы: ColumnName | AllowDBNull | AutoIncrement | MaxLength | ReadOnly | Unique Номер | False | False | -1 | False | True Производитель | True | False | 20 | False | False Модель | True | False | 20 | False | False
2) Пример загрузки схемы для SchemaType.Source.
// C# using System; using System.Data; using System.Data.Common; class FillSchemaSample { static void Main() { // Создание фабрики классов провайдера DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.LinterClient"); // Соединение с БД DbConnection con = factory.CreateConnection(); con.ConnectionString = "Data Source=LOCAL;User ID=SYSTEM;Password=MANAGER8"; // Создание объекта DbDataAdapter DbDataAdapter adapter = factory.CreateDataAdapter(); adapter.SelectCommand = factory.CreateCommand(); adapter.SelectCommand.Connection = con; adapter.SelectCommand.CommandText = "select personid, make, model from auto"; // Создание объекта DataSet DataSet dataset = new DataSet(); // Заполнение объекта DataSet схемой из БД adapter.FillSchema(dataset, SchemaType.Source, "Table"); // Вывод на экран полученной схемы Console.WriteLine("Схема DataSet после загрузки из БД:"); OutputSchema(dataset); } private static void OutputSchema(DataSet dataset) { foreach (DataTable table in dataset.Tables) { Console.WriteLine("Имя таблицы: " + table.TableName); Console.WriteLine("Столбцы таблицы:"); Console.WriteLine("ColumnName | AllowDBNull | AutoIncrement | " + "MaxLength | ReadOnly | Unique"); foreach (DataColumn column in table.Columns) { Console.WriteLine( "{0,-13} | {1,-11} | {2,-13} | {3,-9} | {4,-8} | {5,-6}", column.ColumnName, column.AllowDBNull, column.AutoIncrement, column.MaxLength, column.ReadOnly, column.Unique); } } } } Результат выполнения примера: Схема DataSet после загрузки из БД: Имя таблицы: Table Столбцы таблицы: ColumnName | AllowDBNull | AutoIncrement | MaxLength | ReadOnly | Unique PERSONID | False | False | -1 | False | True MAKE | True | False | 20 | False | False MODEL | True | False | 20 | False | False