DbConnection.GetSchema集合名称列表?

时间:2009-01-17 17:45:06

标签: ado.net

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

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

4 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:4)

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

您正在谈论的列表名为MetaDataCollection。如果您在没有任何参数的情况下调用GetSchema(),它将为您提供可以使用的所有集合名称的列表。

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

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