知识大全 在 ADO.NET2.0 中对于从您的数据源访问元数据

Posted 数据库

篇首语:爱情不是终点,陪伴才是归宿。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 在 ADO.NET2.0 中对于从您的数据源访问元数据相关的知识,希望对你有一定的参考价值。

在 ADO.NET2.0 中对于从您的数据源访问元数据  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   深入了解新的公共元数据   在我的前一篇文章 我指出 Visual Studio 服务器资源管理器现在使用一个包含了 NET 数据提供程序(而不是 OLE DB 提供程序)列表的对话框来提示连接信息 当您确定一个连接字符串并添加数据连接时 每个数据连接也显示一个关于通过连接直接可见的数据库对象(如表 视图和存储过程)的信息的树形结构 但这些信息来自哪里呢?难道是 Visual Studio 仅为某些数据提供程序硬编码来生成这个信息 而假如我编写我自己的数据提供程序或者从第三方购买一个的时候 就留给我一个空节点?不 在 Visual Studio 中并不是这样 由于 ADO NET 中的新架构 API 所有这些有用的信息都将提供给您 我不知道这是否是 Visual Studio 做到它的方法 但是这里就是使用新的 API 来获得一个数据库中的表的列表的代码     // uses a ADO NET named connection string in config file  // uses ADO NET ProviderFactory and base classes  // see previous article  public static void GetListOfTables(string connectstring_name)    ConnectionStringSettings s =  ConfigurationSettings ConnectionStrings[connectstring_name];  DbProviderFactory f = DbProviderFactories GetFactory(s ProviderName);  using (DbConnection conn = f CreateConnection())    conn ConnectionString = s ConnectionString;  conn Open();    DataTable t = conn GetSchema( Tables );  t WriteXml( tables xml );         究竟谁需要元数据?  元数据是每个数据访问 API 的一部分 尽管元数据的主要使用者是像 Visual Studio 这样的工具或者像 DeKlarit 这样的代码生成器 但是它们并不是惟一的使用者 应用程序包设计师可能允许最终用户通过向现有的表添加新表或新列来自定义一个应用程序 当最终用户如此改变了数据库架构时 一个通用查询和修改工具可以在维护 备份和其他应用程序函数中使用元数据来包含用户的新表 就像它们是应用程序附带的内置表一样 程序员可以使用元数据来编写他们自己的派生自 System Data Common DbCommandBuilder的自定义类 并为使用 DataSet 创建插入 更新和删除命令 多数据库应用程序(即设计为在用户选择的数据库上运行的应用程序)的构建者可以尽可能多地使用元数据来维护公共代码库 在需要时优化数据访问代码     通过一般元数据 API 来公开元数据要比让每个使用者使用特定于数据库的 API 要好 这样 工具编写人员可以维护一个可管理性更好的代码库 这样的 API 还必须是非常灵活的 因为在编写一般 API 来公开元数据时有四个障碍需要考虑      元数据集合和信息在数据库间是有差别的 例如 SQL Server 用户可能想要公开一个链接服务器的集合 但是 Oracle 用户可能对关于 Oracle 序列的信息感兴趣      不仅在不同的数据库产品中 而且即使在相同数据库的不同版本中 存储公共数据库元数据的基础系统表都是不同的 例如 SQL Server 使用在一个 sys 架构下的新表(例如 sys tables)公开它的元数据 而 SQL Server 以前的版本使用元数据表(如 sysobjects£©来存储相同的数据      不同的程序可能有不同的元数据视图 以一个例子来说 许多程序员抱怨 Oracle 数据库中表的列表太长 因为大多数元数据 API 将 system 表与用户表混在一起 他们想要一个仅由他们定义的表组成的短列表      是否根本不支持元数据 要提供多少元数据 应该完全取决于提供程序的编写者       大部分数据库 API 提供一个标准的元数据集 它是所有提供程序必须支持的 并且允许提供程序编写者添加新的元数据表 这与使用 ANSI SQL 标准采用的方法是一致的 解决这一问题的标准的一部分是 Schema Schemata(INFORMATION_SCHEMA 和 DEFINITION_SCHEMA)的第 部分 ANSI SQL INFORMATION_SCHEMA 定义了由一个兼容的数据库支持的标准的元数据视图集 但即便是这个规范也需要有一个方法来解决上面这些问题 它声明      实施者可以自由添加额外的表到 INFORMATION_SCHEMA 或添加额外的列到预定义的INFORMATION_SCHEMA 表     OLE DB 作为一个与 ANSI SQL 标准概念一致的数据访问 API 示例 定义了一系列的名为 架构行集合 的元数据 它从一个大致遵循 INFORMATION_SCHEMA 的预定义集开始 并添加 OLE DB 特定的列到每个行中 ADO NET 提供了一个甚至更强大更灵活的机制来公开元数据      我能得到什么样的元数据?  ADO NET 允许提供程序编写者公开 种不同类型的元数据 这些主要的元数据 — 元数据集合 或 类别 — 在 System Data Common DbMetaDataCollectionNames 类中被枚举出来     &# ; MetaDataCollections — 可用元数据集合的列表     &# ; Restrictions — 对于每个元数据集合 存在一批可以用于限制被请求的架构信息范围的限定符     &# ; DataSourceInformation — 关于数据提供程序引用的数据库实例的信息     &# ; DataTypes — 一组关于数据库支持的每个数据类型的信息     &# ; ReservedWords — 适用于该种数据库查询语言的保留字 通常 查询语言 等同于一种 SQL 的方言     MetaDataCollections 是 INFORMATION_SCHEMA 集合的名称 如 表 列 或 主键 但是 如果使用 DbConnection GetSchema 这些元数据类别也被认为是元数据 这意味着在代码方面来说是这样 这些集合可以像普通的元数据一样被获得     // gets information about database Views  Table t = conn GetSchema( Views );  // gets information about collections exposed by this provider  // this includes the five meta collections described above  Table t = conn GetSchema(DbMetaDataCollectionNames MetaDataCollections);  // gets information about the Restrictions meta collection  Table t = conn GetSchema(DbMetaDataCollectionNames Restrictions);  // No argument overload is same as asking for MetaDataCollections  Table t = conn GetSchema();     个元数据集合中的 个值得进一步解释     Restrictions  Restrictions 可以用来限制返回元数据的数量 如果您熟悉 OLE DB 或 ADO 那么术语 restriction 意味着在那些 API 中同样的内容 作为示例 让我们使用 MetaDataCollection 列 它是表中的列名称的集合 这个集合可以用于获取所有表中的所有列 但是 此被请求的列集合会被数据库名称 所有者/架构或者表限制 每个元数据集合可以有不同数量的可能限制 并且每个限制会有一个默认值 在我们下面的示例中 这里是一个对列元数据的限制的 XML 表示     清单 列集合上的 Restrictions(XML 格式)    <Restrictions>  <CollectionName>Columns</CollectionName>  <RestrictionName>Catalog</RestrictionName>  <RestrictionDefault>table_catalog</RestrictionDefault>  <RestrictionNumber> </RestrictionNumber>  </Restrictions> <Restrictions>  <CollectionName>Columns</CollectionName>  <RestrictionName>Owner</RestrictionName>  <RestrictionDefault>table_schema</RestrictionDefault>  <RestrictionNumber> </RestrictionNumber>  </Restrictions> <Restrictions>  <CollectionName>Columns</CollectionName>  <RestrictionName>Table</RestrictionName>  <RestrictionDefault>table_name</RestrictionDefault>  <RestrictionNumber> </RestrictionNumber>  </Restrictions> <Restrictions>  <CollectionName>Columns</CollectionName>  <RestrictionName>Column</RestrictionName>  <RestrictionDefault>column_name</RestrictionDefault>  <RestrictionNumber> </RestrictionNumber>  </Restrictions>    Restrictions 是使用一个重载的 DbConnection GetSchema 指定的 这些限制被指定为一个数组 您可以将一个数组指定为和整个限制集合或者一个子集数组一样大 因为 RestrictionNumbers 通常从最少限制向最多限制发展 对您想要省略的限制值使用空值(不是数据库 NULL 而是 NET NULL 或者在 Visual Basic NET 中的 Nothing) 例如     // restriction string array  string[] res = new string[ ];    // all columns all tables owned by dbo  res[ ] = dbo ;  DataTable t = conn GetSchema( Columns res);    // clear collection  for (int i = ; i < ; i++) res[i] = null;  // all columns all tables named authors any owner/schema  res[ ] = authors ;  DataTable t = conn GetSchema( Columns res);    // clear collection  for (int i = ; i < ; i++) res[i] = null;  // columns named au_lname  // all tables named authors any owner/schema  res[ ] = authors ; cha138/Article/program/net/201311/11456

相关参考

知识大全 使用ADO.NET2.0提升数据交互性能(2)

使用ADO.NET2.0提升数据交互性能(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!三异步

知识大全 使用ADO.NET2.0提升数据交互性能(1)

使用ADO.NET2.0提升数据交互性能(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&nb

知识大全 ADO.NET2.0的十大新特性全面介绍

ADO.NET2.0的十大新特性全面介绍  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文简要

知识大全 ADO.NET 2.0 数据异步处理改善用户体验

ADO.NET2.0数据异步处理改善用户体验  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  支持

知识大全 ADO.NET 2.0中的DataSet和DataTable

ADO.NET2.0中的DataSet和DataTable  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 ADO.NET 2.0 动态指定 ObjectDataSource 的 SelectMethod

ADO.NET2.0动态指定ObjectDataSource的SelectMethod  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布

知识大全 经测试ADO.NET 2.0竟然比1.0要慢

经测试ADO.NET2.0竟然比1.0要慢  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  镜子里

CPU能直接访问存储在内存中的数据,也能直接访问存储在外存中的数据

CPU能直接访问存储在内存中的数据,也能直接访问存储在外存中的数据。_____答案:错误解析:CPU只能直接访问内存中的数据,外存中的数据必须调人内存后,才能被访问。故本题判断错误。

知识大全 在VisualC#中访问不同数据库

在VisualC#中访问不同数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  visualC

知识大全 在JSP中访问数据库大全

在JSP中访问数据库大全  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  现在有好多初学jsp的网