Список имен коллекции DbConnection.GetSchema?

Когда вы вызываете DbConnection.GetSchema, вы даете ему имя строки интересующей вас коллекции. Я не могу найти список коллекций в любом месте. Является ли список наборов неизменным или отличается от типа базы данных (orcle, sql server и т.д.)?

Мне интересно получить список всех имен коллекций в нескольких типах баз данных, таких как sql server и sqlite.

Ответ 1

Я использую OleDbConnection, даже если я подключаюсь к Oracle, Sql Server... Тогда я могу использовать:

myOleDbConnection.GetOleDbSchemaTable(OleDbSchemGuid.Tables);

Возможные значения для OleDbSchemaGuid:
(обратите внимание, что в зависимости от базы данных некоторые из них могут вызывать исключение NotSupported:

OleDbSchemaGuid.Assertions;
OleDbSchemaGuid.Catalogs;
OleDbSchemaGuid.Character_Sets;
OleDbSchemaGuid.Check_Constraints;
OleDbSchemaGuid.Check_Constraints_By_Table;
OleDbSchemaGuid.Collations;
OleDbSchemaGuid.Column_Domain_Usage;
OleDbSchemaGuid.Column_Privileges;
OleDbSchemaGuid.Columns;
OleDbSchemaGuid.Constraint_Column_Usage;
OleDbSchemaGuid.Constraint_Table_Usage;
OleDbSchemaGuid.DbInfoKeywords;
OleDbSchemaGuid.DbInfoLiterals;
OleDbSchemaGuid.Foreign_Keys;
OleDbSchemaGuid.Indexes;
OleDbSchemaGuid.Key_Column_Usage;
OleDbSchemaGuid.Primary_Keys;
OleDbSchemaGuid.Procedure_Columns;
OleDbSchemaGuid.Procedure_Parameters;
OleDbSchemaGuid.Procedures;
OleDbSchemaGuid.Provider_Types;
OleDbSchemaGuid.Referential_Constraints;
OleDbSchemaGuid.SchemaGuids;
OleDbSchemaGuid.Schemata;
OleDbSchemaGuid.Sql_Languages;
OleDbSchemaGuid.Statistics;
OleDbSchemaGuid.Table_Constraints;
OleDbSchemaGuid.Table_Privileges;
OleDbSchemaGuid.Table_Statistics;
OleDbSchemaGuid.Tables;
OleDbSchemaGuid.Tables_Info;
OleDbSchemaGuid.Translations;
OleDbSchemaGuid.Trustee;
OleDbSchemaGuid.Usage_Privileges;
OleDbSchemaGuid.View_Column_Usage;
OleDbSchemaGuid.View_Table_Usage;
OleDbSchemaGuid.Views;

Ответ 2

Список зависит от поставщика. По этой причине были определены некоторые Common Schema Collections, которые всегда доступны независимо от поставщика. Одной из них является коллекция MetaDataCollections, которая вернет DataTable со списком поддерживаемых коллекций схем для текущего провайдера, количеством ограничений, которые они поддерживают каждый, и количеством частей идентификатора, которые они используют.

Ответ 3

Для System.Data.SQLite я наконец нашел то, что поддерживается:

http://sqlite.phxsoftware.com/readme.htm

"Поддержка DbConnection.GetSchema(...) включает в себя ReservedWords, MetaDataCollections, DataSourceInformation, DataTypes, Columns, Tables, Views, ViewColumns, Catalogs, Indexes, IndexColumns, ForeignKeys и Triggers."

Я думаю, что сервер sql будет примерно таким же, но у меня все еще нет окончательного списка.

Ответ 4

Список, о котором вы говорите, называется MetaDataCollection. Если вы выберете GetSchema() без каких-либо параметров, он предоставит вам список всех имен коллекций, которые вы можете использовать.

Кроме того, существует фиксированный список имен коллекций, которые common для всех баз данных. Некоторые поставщики ADO.NET добавят дополнительные параметры, специфичные для базы данных, к которой вы подключаетесь.

Например, ODP.NET добавит имя коллекции под названием "Пользователи", которое предоставит вам всех пользователей (схем), доступных в базе данных Oracle.