问题 DbConnection.GetSchema集合名称列表?


当你调用DbConnection.GetSchema时,你给它你感兴趣的集合的字符串名称。我无法在任何地方找到集合列表。集合列表是不可变的还是因数据库类型(orcle,sql server等)而异?

我有兴趣在一些数据库类型中获取所有集合名称的列表,例如sql server和sqlite。


2336
2018-01-17 17:45


起源



答案:


我使用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;

8
2018-01-17 18:39



GetSchema() 只接受类型的参数 string。我会说你一定很困惑 GetOleDbSchemaTable() - Mehrad
梅赫拉德:你是对的。固定。谢谢! - JAG


答案:


我使用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;

8
2018-01-17 18:39



GetSchema() 只接受类型的参数 string。我会说你一定很困惑 GetOleDbSchemaTable() - Mehrad
梅赫拉德:你是对的。固定。谢谢! - JAG


该列表因提供商而异。出于这个原因,一些 常见架构集合 已定义,无论提供商如何,都始终可用。其中之一是MetaDataCollections集合,它将返回一个DataTable,其中包含当前提供程序支持的架构集合的列表,它们各自支持的限制数量以及它们使用的标识符部分的数量。


4
2018-01-17 19:32





对于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 server大致相同,但我仍然没有确定的列表。


2
2018-01-17 19:03



这是一个旧的链接...当前版本可以在 system.data.sqlite.org/index.html/doc/trunk/www/features.wiki - Tom Juergens


您正在谈论的列表被调用 MetaDataCollection。如果你打电话 的getSchema() 如果没有任何参数,它将为您提供可以使用的所有集合名称的列表。

此外,还有一个固定的集合名称列表 共同 到所有数据库。一些ADO.NET提供程序将添加特定于您连接的数据库的其他参数。

例如,ODP.NET将添加名为Users的集合名称,该名称将为您提供Oracle数据库中可用的所有用户(模式)。


0
2018-02-09 01:31