DbDataAdapter.FillSchema Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Перегрузки
| Имя | Описание |
|---|---|
| FillSchema(DataSet, SchemaType, IDbCommand, String, CommandBehavior) |
Добавляет в DataTable указанный DataSet и настраивает схему для сопоставления в источнике данных на основе указанного SchemaType. |
| FillSchema(DataTable, SchemaType, IDbCommand, CommandBehavior) |
Настраивает схему указанного DataTable на основе указанной SchemaType, командной строки и CommandBehavior значений. |
| FillSchema(DataSet, SchemaType, String) |
Добавляет в DataTable указанный DataSet и настраивает схему для сопоставления в источнике данных на основе указанного SchemaType и DataTable. |
| FillSchema(DataTable, SchemaType) |
Настраивает схему указанного DataTable на основе указанного SchemaType. |
| FillSchema(DataSet, SchemaType) |
DataTable Добавляет имя "Таблица" в указанный DataSet и настраивает схему для сопоставления в источнике данных на основе указанногоSchemaType. |
FillSchema(DataSet, SchemaType, IDbCommand, String, CommandBehavior)
- Исходный код:
- DbDataAdapter.cs
- Исходный код:
- DbDataAdapter.cs
- Исходный код:
- DbDataAdapter.cs
- Исходный код:
- DbDataAdapter.cs
- Исходный код:
- DbDataAdapter.cs
Добавляет в DataTable указанный DataSet и настраивает схему для сопоставления в источнике данных на основе указанного SchemaType.
protected:
virtual cli::array <System::Data::DataTable ^> ^ FillSchema(System::Data::DataSet ^ dataSet, System::Data::SchemaType schemaType, System::Data::IDbCommand ^ command, System::String ^ srcTable, System::Data::CommandBehavior behavior);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from command) schema table types cannot be statically analyzed.")]
protected virtual System.Data.DataTable[] FillSchema(System.Data.DataSet dataSet, System.Data.SchemaType schemaType, System.Data.IDbCommand command, string srcTable, System.Data.CommandBehavior behavior);
protected virtual System.Data.DataTable[] FillSchema(System.Data.DataSet dataSet, System.Data.SchemaType schemaType, System.Data.IDbCommand command, string srcTable, System.Data.CommandBehavior behavior);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from command) schema table types cannot be statically analyzed.")>]
override this.FillSchema : System.Data.DataSet * System.Data.SchemaType * System.Data.IDbCommand * string * System.Data.CommandBehavior -> System.Data.DataTable[]
override this.FillSchema : System.Data.DataSet * System.Data.SchemaType * System.Data.IDbCommand * string * System.Data.CommandBehavior -> System.Data.DataTable[]
Protected Overridable Function FillSchema (dataSet As DataSet, schemaType As SchemaType, command As IDbCommand, srcTable As String, behavior As CommandBehavior) As DataTable()
Параметры
- schemaType
- SchemaType
Одно из значений SchemaType .
- command
- IDbCommand
Инструкция SQL SELECT, используемая для извлечения строк из источника данных.
- srcTable
- String
Имя исходной таблицы, используемой для сопоставления таблиц.
- behavior
- CommandBehavior
Одно из значений CommandBehavior .
Возвращаемое значение
Массив DataTable объектов, содержащих сведения о схеме, возвращаемые из источника данных.
- Атрибуты
Комментарии
Метод FillSchema извлекает схему из источника данных с помощью метода SelectCommand. Объект подключения, связанный с ним, должен быть допустимым SelectCommand , но он не должен быть открыт. Если соединение закрыто перед FillSchema вызовом, оно открывается для получения данных, а затем закрывается. Если соединение открыто перед FillSchema вызовом, оно остается открытым.
Операция FillSchema добавляется DataTable в место назначения DataSet. Затем он добавляет столбцы в DataColumnCollection список DataTableи настраивает следующие DataColumn свойства, если они существуют в источнике данных:
AutoIncrement. Необходимо задать AutoIncrementStep и AutoIncrementSeed отдельно.
FillSchema также настраивает PrimaryKey свойства в Constraints соответствии со следующими правилами:
Если один или несколько столбцов первичного ключа возвращаютсяSelectCommand, они используются в качестве столбцов первичного ключа для .DataTable
Если первичные ключевые столбцы не возвращаются, но уникальные столбцы не являются, уникальные столбцы используются в качестве первичного ключа, если и только если все уникальные столбцы не являются нуллиальными. Если любой из столбцов имеет значение NULL, UniqueConstraint добавляется в нее ConstraintCollection, но PrimaryKey свойство не задано.
Если возвращаются оба столбца первичного ключа и уникальные столбцы, то столбцы первичного ключа используются в качестве столбцов первичного ключа для столбцов DataTable.
Обратите внимание, что первичные ключи и уникальные ограничения добавляются в ConstraintCollection соответствии с приведенными выше правилами, но другие типы ограничений не добавляются.
Если уникальный кластеризованный индекс определен в столбце или столбцах таблицы SQL Server, а ограничение первичного ключа определяется в отдельном наборе столбцов, то имена столбцов в кластеризованном индексе будут возвращены. Чтобы вернуть имя или имена столбцов первичного ключа, используйте указание запроса с инструкцией SELECT, указывающей имя индекса первичного ключа. Дополнительные сведения об указании запросов см. в разделе "Подсказки" (Transact-SQL) — запрос.
Если при IDataAdapter заполнении DataTableстолбцов возникают повторяющиеся столбцы, он создает имена для последующих столбцов, используя шаблон "columnname1", "columnname2", "columnname3" и т. д. Если входящие данные содержат неименованные столбцы, они помещаются в DataSet шаблон "Column1", "Column2" и т. д. При добавлении нескольких результирующих наборов в DataSet каждый результирующий набор помещается в отдельную таблицу. Дополнительные результирующие наборы именуются путем добавления целочисленных значений к указанному имени таблицы (например, Table1, Table1, Table2 и т. д.). Если в приложении используются имена столбцов и таблиц, убедитесь, что нет конфликтов с этими шаблонами именования.
Метод FillSchema поддерживает сценарии, в которых DataSet содержится несколько DataTable объектов, имена которых отличаются только по регистру. В таких ситуациях выполняется сравнение с учетом регистра, FillSchema чтобы найти соответствующую таблицу и создать новую таблицу, если точное совпадение не существует. Следующий код C# иллюстрирует это поведение.
DataSet dataset = new DataSet();
dataset.Tables.Add("aaa");
dataset.Tables.Add("AAA");
adapter.FillSchema(dataset, "aaa"); // Fills the schema of "aaa", which already exists in the DataSet.
adapter.FillSchema(dataset, "Aaa"); // Adds a new table called "Aaa".
Если FillSchema вызывается и DataSet содержится только один, DataTable имя которого отличается только по регистру, оно DataTable обновляется. В этом сценарии сравнение не учитывает регистр. Следующий код C# иллюстрирует это поведение.
DataSet dataset = new DataSet();
dataset.Tables.Add("aaa");
adapter.FillSchema(dataset, "AAA"); // Fills the schema of table "aaa" because only one similarly named table is in the DataSet.
FillSchema не возвращает строки. Fill Используйте метод для добавления строк в объектDataTable.
Замечание
При обработке инструкций пакетного SQL, возвращающих несколько результатов, реализация FillSchema поставщика данных .NET Framework для OLE DB извлекает сведения о схеме только для первого результата. Чтобы получить сведения о схеме MissingSchemaAction для нескольких результатов, используйте Fill для параметра set AddWithKeyзначение .
При использовании FillSchemaпоставщик данных .NET Framework для SQL Server добавляет предложение FOR BROWSE к выполняемой инструкции. Пользователь должен знать о потенциальных побочных эффектах, таких как вмешательство в использование инструкций SET FMTONLY ON. Дополнительные сведения см. в разделе SET FMTONLY (Transact-SQL).
Примечания для тех, кто наследует этот метод
Эта реализация FillSchema(DataSet, SchemaType) метода защищена и предназначена для использования поставщиком данных .NET Framework.
См. также раздел
Применяется к
FillSchema(DataTable, SchemaType, IDbCommand, CommandBehavior)
- Исходный код:
- DbDataAdapter.cs
- Исходный код:
- DbDataAdapter.cs
- Исходный код:
- DbDataAdapter.cs
- Исходный код:
- DbDataAdapter.cs
- Исходный код:
- DbDataAdapter.cs
Настраивает схему указанного DataTable на основе указанной SchemaType, командной строки и CommandBehavior значений.
protected:
virtual System::Data::DataTable ^ FillSchema(System::Data::DataTable ^ dataTable, System::Data::SchemaType schemaType, System::Data::IDbCommand ^ command, System::Data::CommandBehavior behavior);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from command) schema table types cannot be statically analyzed.")]
protected virtual System.Data.DataTable? FillSchema(System.Data.DataTable dataTable, System.Data.SchemaType schemaType, System.Data.IDbCommand command, System.Data.CommandBehavior behavior);
protected virtual System.Data.DataTable? FillSchema(System.Data.DataTable dataTable, System.Data.SchemaType schemaType, System.Data.IDbCommand command, System.Data.CommandBehavior behavior);
protected virtual System.Data.DataTable FillSchema(System.Data.DataTable dataTable, System.Data.SchemaType schemaType, System.Data.IDbCommand command, System.Data.CommandBehavior behavior);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from command) schema table types cannot be statically analyzed.")>]
override this.FillSchema : System.Data.DataTable * System.Data.SchemaType * System.Data.IDbCommand * System.Data.CommandBehavior -> System.Data.DataTable
override this.FillSchema : System.Data.DataTable * System.Data.SchemaType * System.Data.IDbCommand * System.Data.CommandBehavior -> System.Data.DataTable
Protected Overridable Function FillSchema (dataTable As DataTable, schemaType As SchemaType, command As IDbCommand, behavior As CommandBehavior) As DataTable
Параметры
- schemaType
- SchemaType
Одно из значений SchemaType .
- command
- IDbCommand
Инструкция SQL SELECT, используемая для извлечения строк из источника данных.
- behavior
- CommandBehavior
Одно из значений CommandBehavior .
Возвращаемое значение
DataTable Объект, содержащий сведения о схеме, возвращаемые из источника данных.
- Атрибуты
Комментарии
Метод FillSchema извлекает схему из источника данных с помощью метода SelectCommand. Объект подключения, связанный с ним, должен быть допустимым SelectCommand , но он не должен быть открыт. Если соединение закрыто перед FillSchema вызовом, оно открывается для получения данных, а затем закрывается. Если соединение открыто перед FillSchema вызовом, оно остается открытым.
Операция FillSchema добавляется DataTable в место назначения DataSet. Затем он добавляет столбцы в DataColumnCollection список DataTableи настраивает следующие DataColumn свойства, если они существуют в источнике данных:
AutoIncrement. Необходимо задать AutoIncrementStep и AutoIncrementSeed отдельно.
FillSchema также настраивает PrimaryKey свойства в Constraints соответствии со следующими правилами:
Если один или несколько столбцов первичного ключа возвращаютсяSelectCommand, они используются в качестве столбцов первичного ключа для .DataTable
Если первичные ключевые столбцы не возвращаются, но уникальные столбцы не являются, уникальные столбцы используются в качестве первичного ключа, если и только если все уникальные столбцы не являются нуллиальными. Если любой из столбцов имеет значение NULL, UniqueConstraint добавляется в нее ConstraintCollection, но PrimaryKey свойство не задано.
Если возвращаются оба столбца первичного ключа и уникальные столбцы, то столбцы первичного ключа используются в качестве столбцов первичного ключа для столбцов DataTable.
Обратите внимание, что первичные ключи и уникальные ограничения добавляются в ConstraintCollection соответствии с приведенными выше правилами, но другие типы ограничений не добавляются.
Если уникальный кластеризованный индекс определен в столбце или столбцах таблицы SQL Server, а ограничение первичного ключа определяется в отдельном наборе столбцов, то имена столбцов в кластеризованном индексе будут возвращены. Чтобы вернуть имя или имена столбцов первичного ключа, используйте указание запроса с инструкцией SELECT, указывающей имя индекса первичного ключа. Дополнительные сведения об указании запросов см. в разделе "Подсказки" (Transact-SQL) — запрос.
Если при IDataAdapter заполнении DataTableстолбцов возникают повторяющиеся столбцы, он создает имена для последующих столбцов, используя шаблон "columnname1", "columnname2", "columnname3" и т. д. Если входящие данные содержат неименованные столбцы, они помещаются в DataSet шаблон "Column1", "Column2" и т. д. При добавлении нескольких результирующих наборов в DataSet каждый результирующий набор помещается в отдельную таблицу. Дополнительные результирующие наборы именуются путем добавления целочисленных значений к указанному имени таблицы (например, Table1, Table1, Table2 и т. д.). Если в приложении используются имена столбцов и таблиц, убедитесь, что нет конфликтов с этими шаблонами именования.
FillSchema не возвращает строки. Fill Используйте метод для добавления строк в объектDataTable.
Замечание
При обработке инструкций пакетного SQL, возвращающих несколько результатов, реализация FillSchema поставщика данных .NET Framework для OLE DB извлекает сведения о схеме только для первого результата. Чтобы получить сведения о схеме MissingSchemaAction для нескольких результатов, используйте Fill для параметра set AddWithKeyзначение .
При использовании FillSchemaпоставщик данных .NET Framework для SQL Server добавляет предложение FOR BROWSE к выполняемой инструкции. Пользователь должен знать о потенциальных побочных эффектах, таких как вмешательство в использование инструкций SET FMTONLY ON. Дополнительные сведения см. в разделе SET FMTONLY (Transact-SQL).
Примечания для тех, кто наследует этот метод
Эта реализация FillSchema(DataSet, SchemaType) метода защищена и предназначена для использования поставщиком данных .NET Framework.
См. также раздел
Применяется к
FillSchema(DataSet, SchemaType, String)
- Исходный код:
- DbDataAdapter.cs
- Исходный код:
- DbDataAdapter.cs
- Исходный код:
- DbDataAdapter.cs
- Исходный код:
- DbDataAdapter.cs
- Исходный код:
- DbDataAdapter.cs
Добавляет в DataTable указанный DataSet и настраивает схему для сопоставления в источнике данных на основе указанного SchemaType и DataTable.
public:
cli::array <System::Data::DataTable ^> ^ FillSchema(System::Data::DataSet ^ dataSet, System::Data::SchemaType schemaType, System::String ^ srcTable);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
public System.Data.DataTable[] FillSchema(System.Data.DataSet dataSet, System.Data.SchemaType schemaType, string srcTable);
public System.Data.DataTable[] FillSchema(System.Data.DataSet dataSet, System.Data.SchemaType schemaType, string srcTable);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
override this.FillSchema : System.Data.DataSet * System.Data.SchemaType * string -> System.Data.DataTable[]
override this.FillSchema : System.Data.DataSet * System.Data.SchemaType * string -> System.Data.DataTable[]
Public Function FillSchema (dataSet As DataSet, schemaType As SchemaType, srcTable As String) As DataTable()
Параметры
- schemaType
- SchemaType
Одно из значений SchemaType , указывающее, как вставить схему.
- srcTable
- String
Имя исходной таблицы, используемой для сопоставления таблиц.
Возвращаемое значение
Ссылка на коллекцию DataTable объектов, добавленных в объект DataSet.
- Атрибуты
Исключения
Исходная таблица, из которой не удалось найти схему.
Примеры
В следующем примере используется производный класс, SqlDataAdapterдля заполнения DataSet схемы и возврата DataSet.
public static DataSet GetCustomerData(string dataSetName,
string connectionString)
{
DataSet dataSet = new DataSet(dataSetName);
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlDataAdapter adapter = new SqlDataAdapter(
"SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", connection);
DataTableMapping mapping = adapter.TableMappings.Add("Table", "Customers");
mapping.ColumnMappings.Add("CompanyName", "Name");
mapping.ColumnMappings.Add("ContactName", "Contact");
connection.Open();
adapter.FillSchema(dataSet, SchemaType.Source, "Customers");
adapter.Fill(dataSet);
return dataSet;
}
}
Private Function GetCustomerData(ByVal dataSetName As String, _
ByVal connectionString As String) As DataSet
Dim dataSet As New DataSet(dataSetName)
Using connection As SqlConnection = New SqlConnection(connectionString)
Dim adapter As New SqlDataAdapter( _
"SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", _
connection)
Dim mapping As DataTableMapping = adapter.TableMappings.Add( _
"Table", "Customers")
mapping.ColumnMappings.Add("CompanyName", "Name")
mapping.ColumnMappings.Add("ContactName", "Contact")
connection.Open()
adapter.FillSchema(dataSet, SchemaType.Source, "Customers")
adapter.Fill(dataSet)
Return dataSet
End Using
End Function
Комментарии
Этот метод извлекает сведения о схеме из источника данных с помощью метода SelectCommand.
Операция FillSchema добавляется DataTable в место назначения DataSet. Затем он добавляет столбцы в DataColumnCollection список DataTableи настраивает следующие DataColumn свойства, если они существуют в источнике данных:
AutoIncrement. Необходимо задать AutoIncrementStep и AutoIncrementSeed отдельно.
FillSchema также настраивает PrimaryKey свойства в Constraints соответствии со следующими правилами:
Если один или несколько столбцов первичного ключа возвращаютсяSelectCommand, они используются в качестве столбцов первичного ключа для .DataTable
Если первичные ключевые столбцы не возвращаются, но уникальные столбцы не являются, уникальные столбцы используются в качестве первичного ключа, если и только если все уникальные столбцы не являются нуллиальными. Если любой из столбцов имеет значение NULL, UniqueConstraint добавляется в нее ConstraintCollection, но PrimaryKey свойство не задано.
Если возвращаются оба столбца первичного ключа и уникальные столбцы, то столбцы первичного ключа используются в качестве столбцов первичного ключа для столбцов DataTable.
Обратите внимание, что первичные ключи и уникальные ограничения добавляются в ConstraintCollection соответствии с приведенными выше правилами, но другие типы ограничений не добавляются.
Если уникальный кластеризованный индекс определен в столбце или столбцах таблицы SQL Server, а ограничение первичного ключа определяется в отдельном наборе столбцов, то имена столбцов в кластеризованном индексе будут возвращены. Чтобы вернуть имя или имена столбцов первичного ключа, используйте указание запроса с инструкцией SELECT, указывающей имя индекса первичного ключа. Дополнительные сведения об указании запросов см. в разделе "Подсказки" (Transact-SQL) — запрос.
Данные первичного ключа используются во время Fill поиска и замены строк, ключевые столбцы которых совпадают. Если это не нужное поведение, используйте Fill без запроса сведений о схеме.
Если при DbDataAdapter заполнении DataTableстолбцов возникают повторяющиеся столбцы, он создает имена для последующих столбцов, используя шаблон "columnname1", "columnname2", "columnname3" и т. д. Если входящие данные содержат неименованные столбцы, они помещаются в DataSet шаблон "Column1", "Column2" и т. д. При добавлении нескольких результирующих наборов в DataSet каждый результирующий набор помещается в отдельную таблицу. Дополнительные результирующие наборы именуются путем добавления целочисленных значений к указанному имени таблицы (например, Table1, Table1, Table2 и т. д.). Если в приложении используются имена столбцов и таблиц, убедитесь, что нет конфликтов с этими шаблонами именования.
Метод FillSchema поддерживает сценарии, в которых DataSet содержится несколько DataTable объектов, имена которых отличаются только по регистру. В таких ситуациях выполняется сравнение с учетом регистра, FillSchema чтобы найти соответствующую таблицу и создать новую таблицу, если точное совпадение не существует. Следующий код C# иллюстрирует это поведение.
DataSet dataset = new DataSet();
dataset.Tables.Add("aaa");
dataset.Tables.Add("AAA");
adapter.FillSchema(dataset, "aaa"); // Fills the schema of "aaa", which already exists in the DataSet.
adapter.FillSchema(dataset, "Aaa"); // Adds a new table called "Aaa".
Если FillSchema вызывается и DataSet содержится только один, DataTable имя которого отличается только по регистру, оно DataTable обновляется. В этом сценарии сравнение не учитывает регистр. Следующий код C# иллюстрирует это поведение.
DataSet dataset = new DataSet();
dataset.Tables.Add("aaa");
adapter.FillSchema(dataset, "AAA"); // Fills the schema of table "aaa" because only one similarly named table is in the DataSet.
IDbConnection Объект, связанный с командой select, должен быть допустимым, но он не должен открываться. Если он IDbConnection закрыт перед FillSchema вызовом, он открывается для получения данных, а затем закрывается. Если подключение открыто перед FillSchema вызовом, оно остается открытым.
Замечание
При обработке инструкций пакетного SQL, возвращающих несколько результатов, реализация FillSchema поставщика данных .NET Framework для OLE DB извлекает сведения о схеме только для первого результата. Чтобы получить сведения о схеме MissingSchemaAction для нескольких результатов, используйте Fill для параметра set AddWithKeyзначение .
При использовании FillSchemaпоставщик данных .NET Framework для SQL Server добавляет предложение FOR BROWSE к выполняемой инструкции. Пользователь должен знать о потенциальных побочных эффектах, таких как вмешательство в использование инструкций SET FMTONLY ON. Дополнительные сведения см. в разделе SET FMTONLY (Transact-SQL).
См. также раздел
Применяется к
FillSchema(DataTable, SchemaType)
- Исходный код:
- DbDataAdapter.cs
- Исходный код:
- DbDataAdapter.cs
- Исходный код:
- DbDataAdapter.cs
- Исходный код:
- DbDataAdapter.cs
- Исходный код:
- DbDataAdapter.cs
Настраивает схему указанного DataTable на основе указанного SchemaType.
public:
System::Data::DataTable ^ FillSchema(System::Data::DataTable ^ dataTable, System::Data::SchemaType schemaType);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
public System.Data.DataTable? FillSchema(System.Data.DataTable dataTable, System.Data.SchemaType schemaType);
public System.Data.DataTable? FillSchema(System.Data.DataTable dataTable, System.Data.SchemaType schemaType);
public System.Data.DataTable FillSchema(System.Data.DataTable dataTable, System.Data.SchemaType schemaType);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
override this.FillSchema : System.Data.DataTable * System.Data.SchemaType -> System.Data.DataTable
override this.FillSchema : System.Data.DataTable * System.Data.SchemaType -> System.Data.DataTable
Public Function FillSchema (dataTable As DataTable, schemaType As SchemaType) As DataTable
Параметры
- schemaType
- SchemaType
Одно из значений SchemaType .
Возвращаемое значение
Значение DataTable , содержащее сведения о схеме, возвращаемые из источника данных.
- Атрибуты
Примеры
В следующем примере используется производный класс, SqlDataAdapterдля заполнения DataSet схемы и возврата DataTable.
public static DataTable GetCustomerData(string dataSetName,
string connectionString)
{
DataTable table = new DataTable(dataSetName);
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlDataAdapter adapter = new SqlDataAdapter(
"SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", connection);
DataTableMapping mapping = adapter.TableMappings.Add("Table", "Customers");
mapping.ColumnMappings.Add("CompanyName", "Name");
mapping.ColumnMappings.Add("ContactName", "Contact");
connection.Open();
adapter.FillSchema(table, SchemaType.Mapped);
adapter.Fill(table);
return table;
}
}
Private Function GetCustomerData(ByVal dataTableName As String, _
ByVal connectionString As String) As DataTable
Dim table As New DataTable(dataTableName)
Using connection As SqlConnection = New SqlConnection(connectionString)
Dim adapter New SqlDataAdapter( _
"SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", _
connection)
Dim mapping As DataTableMapping = adapter.TableMappings.Add( _
"Table", "Customers")
mapping.ColumnMappings.Add("CompanyName", "Name")
mapping.ColumnMappings.Add("ContactName", "Contact")
connection.Open()
adapter.FillSchema(table, SchemaType.Mapped)
adapter.Fill(table)
Return table
End Using
End Function
Комментарии
Метод FillSchema извлекает схему из источника данных с помощью метода SelectCommand. Объект подключения, связанный с ним, должен быть допустимым SelectCommand , но он не должен быть открыт. Если соединение закрыто перед FillSchema вызовом, оно открывается для получения данных, а затем закрывается. Если соединение открыто перед FillSchema вызовом, оно остается открытым.
Операция FillSchema возвращает DataTableобъект . Затем он добавляет столбцы в DataColumnCollection список DataTableи настраивает следующие DataColumn свойства, если они существуют в источнике данных:
AutoIncrement. Необходимо задать AutoIncrementStep и AutoIncrementSeed отдельно.
FillSchema также настраивает PrimaryKey свойства в Constraints соответствии со следующими правилами:
Если объект PrimaryKey уже определен для
DataTableданных илиDataTableсодержит данные,PrimaryKeyсвойство не будет задано.Если один или несколько столбцов первичного ключа возвращаютсяSelectCommand, они используются в качестве столбцов первичного ключа для .
DataTableЕсли первичные ключевые столбцы не возвращаются, но уникальные столбцы не являются, уникальные столбцы используются в качестве первичного ключа, если и только если все уникальные столбцы не являются нуллиальными. Если любой из столбцов имеет значение NULL, UniqueConstraint добавляется в нее ConstraintCollection, но
PrimaryKeyсвойство не задано.Если возвращаются оба столбца первичного ключа и уникальные столбцы, то столбцы первичного ключа используются в качестве столбцов первичного ключа для столбцов
DataTable.
Обратите внимание, что первичные ключи и уникальные ограничения добавляются в ConstraintCollection соответствии с приведенными выше правилами, но другие типы ограничений не добавляются. Для этого процесса может потребоваться несколько цикловых путей к серверу.
Если уникальный кластеризованный индекс определен в столбце или столбцах таблицы SQL Server, а ограничение первичного ключа определяется в отдельном наборе столбцов, то имена столбцов в кластеризованном индексе будут возвращены. Чтобы вернуть имя или имена столбцов первичного ключа, используйте указание запроса с инструкцией SELECT, указывающей имя индекса первичного ключа. Дополнительные сведения об указании запросов см. в разделе "Подсказки" (Transact-SQL) — запрос.
Если при DbDataAdapter заполнении DataTableстолбцов возникают повторяющиеся столбцы, он создает имена для последующих столбцов, используя шаблон "columnname1", "columnname2", "columnname3" и т. д. Если входящие данные содержат неименованные столбцы, они помещаются в DataSet шаблон "Column1", "Column2" и т. д. При добавлении нескольких результирующих наборов в DataSet каждый результирующий набор помещается в отдельную таблицу. Дополнительные результирующие наборы именуются путем добавления целочисленных значений к указанному имени таблицы (например, Table1, Table1, Table2 и т. д.). Если в приложении используются имена столбцов и таблиц, убедитесь, что нет конфликтов с этими шаблонами именования.
FillSchema не возвращает строки. Fill Используйте метод для добавления строк в объектDataTable.
Замечание
При обработке инструкций пакетного SQL, возвращающих несколько результатов, реализация FillSchema поставщика данных .NET Framework для OLE DB извлекает сведения о схеме только для первого результата. Чтобы получить сведения о схеме MissingSchemaAction для нескольких результатов, используйте Fill для параметра set AddWithKeyзначение .
При использовании FillSchemaпоставщик данных .NET Framework для SQL Server добавляет предложение FOR BROWSE к выполняемой инструкции. Пользователь должен знать о потенциальных побочных эффектах, таких как вмешательство в использование инструкций SET FMTONLY ON. Дополнительные сведения см. в разделе SET FMTONLY (Transact-SQL).
См. также раздел
Применяется к
FillSchema(DataSet, SchemaType)
- Исходный код:
- DbDataAdapter.cs
- Исходный код:
- DbDataAdapter.cs
- Исходный код:
- DbDataAdapter.cs
- Исходный код:
- DbDataAdapter.cs
- Исходный код:
- DbDataAdapter.cs
DataTable Добавляет имя "Таблица" в указанный DataSet и настраивает схему для сопоставления в источнике данных на основе указанногоSchemaType.
public:
override cli::array <System::Data::DataTable ^> ^ FillSchema(System::Data::DataSet ^ dataSet, System::Data::SchemaType schemaType);
[System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")]
public override System.Data.DataTable[] FillSchema(System.Data.DataSet dataSet, System.Data.SchemaType schemaType);
public override System.Data.DataTable[] FillSchema(System.Data.DataSet dataSet, System.Data.SchemaType schemaType);
[<System.Diagnostics.CodeAnalysis.RequiresUnreferencedCode("IDataReader's (built from adapter commands) schema table types cannot be statically analyzed.")>]
override this.FillSchema : System.Data.DataSet * System.Data.SchemaType -> System.Data.DataTable[]
override this.FillSchema : System.Data.DataSet * System.Data.SchemaType -> System.Data.DataTable[]
Public Overrides Function FillSchema (dataSet As DataSet, schemaType As SchemaType) As DataTable()
Параметры
- schemaType
- SchemaType
Одно из значений SchemaType , указывающее, как вставить схему.
Возвращаемое значение
Ссылка на коллекцию DataTable объектов, добавленных в объект DataSet.
Реализации
- Атрибуты
Примеры
В следующем примере используется производный класс, SqlDataAdapterдля заполнения DataSet схемы и возврата DataSet.
public static DataSet GetCustomerData(string dataSetName,
string connectionString)
{
DataSet dataSet = new DataSet(dataSetName);
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlDataAdapter adapter = new SqlDataAdapter(
"SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", connection);
DataTableMapping mapping = adapter.TableMappings.Add("Table", "Customers");
mapping.ColumnMappings.Add("CompanyName", "Name");
mapping.ColumnMappings.Add("ContactName", "Contact");
connection.Open();
adapter.FillSchema(dataSet, SchemaType.Mapped);
adapter.Fill(dataSet);
return dataSet;
}
}
Private Function GetCustomerData(ByVal dataSetName As String, _
ByVal connectionString As String) As DataSet
Dim dataSet As New DataSet(dataSetName)
Using connection As SqlConnection = New SqlConnection(connectionString)
Dim adapter As New SqlDataAdapter( _
"SELECT CustomerID, CompanyName, ContactName FROM dbo.Customers", _
connection)
Dim mapping As DataTableMapping = adapter.TableMappings.Add( _
"Table", "Customers")
mapping.ColumnMappings.Add("CompanyName", "Name")
mapping.ColumnMappings.Add("ContactName", "Contact")
connection.Open()
adapter.FillSchema(dataSet, SchemaType.Mapped)
adapter.Fill(dataSet)
Return dataSet
End Using
End Function
Комментарии
Этот метод извлекает сведения о схеме из источника данных с помощью метода SelectCommand.
Операция FillSchema добавляется DataTable в место назначения DataSet. Затем он добавляет столбцы в DataColumnCollection список DataTableи настраивает следующие DataColumn свойства, если они существуют в источнике данных:
AutoIncrement. Необходимо задать AutoIncrementStep и AutoIncrementSeed отдельно.
FillSchema также настраивает PrimaryKey свойства в Constraints соответствии со следующими правилами:
Если один или несколько столбцов первичного ключа возвращаютсяSelectCommand, они используются в качестве столбцов первичного ключа для .DataTable
Если первичные ключевые столбцы не возвращаются, но уникальные столбцы не являются, уникальные столбцы используются в качестве первичного ключа, если и только если все уникальные столбцы не являются нуллиальными. Если любой из столбцов имеет значение NULL, UniqueConstraint добавляется в нее ConstraintCollection, но PrimaryKey свойство не задано.
Если возвращаются оба столбца первичного ключа и уникальные столбцы, то столбцы первичного ключа используются в качестве столбцов первичного ключа для столбцов DataTable.
Обратите внимание, что первичные ключи и уникальные ограничения добавляются в ConstraintCollection соответствии с приведенными выше правилами, но другие типы ограничений не добавляются.
Если уникальный кластеризованный индекс определен в столбце или столбцах таблицы SQL Server, а ограничение первичного ключа определяется в отдельном наборе столбцов, то имена столбцов в кластеризованном индексе будут возвращены. Чтобы вернуть имя или имена столбцов первичного ключа, используйте указание запроса с инструкцией SELECT, указывающей имя индекса первичного ключа. Дополнительные сведения об указании запросов см. в разделе "Подсказки" (Transact-SQL) — запрос.
Данные первичного ключа используются во время Fill поиска и замены строк, ключевые столбцы которых совпадают. Если это не нужное поведение, используйте Fill без запроса сведений о схеме.
Если при IDataAdapter заполнении DataTableстолбцов возникают повторяющиеся столбцы, он создает имена для последующих столбцов, используя шаблон "columnname1", "columnname2", "columnname3" и т. д. Если входящие данные содержат неименованные столбцы, они помещаются в DataSet шаблон "Column1", "Column2" и т. д. При добавлении нескольких результирующих наборов в DataSet каждый результирующий набор помещается в отдельную таблицу. Дополнительные результирующие наборы именуются путем добавления целочисленных значений к указанному имени таблицы (например, Table1, Table1, Table2 и т. д.). Если в приложении используются имена столбцов и таблиц, убедитесь, что нет конфликтов с этими шаблонами именования.
IDbConnection Объект, связанный с командой select, должен быть допустимым, но он не должен открываться. Если он IDbConnection закрыт перед FillSchema вызовом, он открывается для получения данных, а затем закрывается. Если подключение открыто перед FillSchema вызовом, оно остается открытым.
Замечание
При обработке инструкций пакетного SQL, возвращающих несколько результатов, реализация FillSchema поставщика данных .NET Framework для OLE DB извлекает сведения о схеме только для первого результата. Чтобы получить сведения о схеме MissingSchemaAction для нескольких результатов, используйте Fill для параметра set AddWithKeyзначение .
При использовании FillSchemaпоставщик данных .NET Framework для SQL Server добавляет предложение FOR BROWSE к выполняемой инструкции. Пользователь должен знать о потенциальных побочных эффектах, таких как вмешательство в использование инструкций SET FMTONLY ON. Дополнительные сведения см. в разделе SET FMTONLY (Transact-SQL).