概要

本文演示如何用 ADO.NET 中 OleDbConnection 对象的 GetOleDbSchemaTable 方法检索数据库架构信息。数据源中的架构信息包括数据库或可通过数据库中的数据源、表和视图得到的目录以及所存在的约束等。表中的架构信息包括主键、列和自动编号字段。

注意,在使用 SqlClient.SqlConnection 对象时没有与 GetOleDbSchemaTable 等价的方法。SQL Server .NET 数据提供程序通过存储过程和信息性视图展示后端架构信息。有关可通过 Microsoft SQL Server 得到的视图和存储过程的更多信息,请参见 MSDN 库中的 Transact-SQL 参考。

回到顶端

要求

Microsoft Windows 2000 Professional、Windows 2000 Server、Windows 2000 Advanced Server 或 Windows NT 4.0 Server
Microsoft Visual Studio .NET

本文假定您熟悉下列主题:

Visual Studio .NET
ADO.NET 基础和语法

回到顶端

OleDbConnection 对象的 GetOleDbSchemaTable 方法

OleDbConnection 对象的 GetOleDbSchemaTable 方法展示架构信息。GetOleDbSchemaTable 返回填充了架构信息的 DataTable

GetOleDbSchemaTable 的第一个参数是架构参数,它是一个 OleDbSchemaGuid 类型的标识,指定了要返回的架构信息的类型(如表、列和主键)。第二个参数是一个限制对象数组,对 DataTable 架构中返回的行进行过滤(例如,您可以指定对表的名称、类型、所有者和/或架构的限制)。

OleDbSchemaGuid 成员

OleDbSchemaGuid 参数指定 GetOleDbSchemaTable 方法要返回的架构表的类型。 OleDbSchemaGuid成员主要包括:

外键
索引
主键
视图

有关 OleDbSchemaGuid 成员的完整列表,请参见参考部分的"OleDbSchemaGuid Members"Web 站点。

限制

DataTable 中的一个 DataColumnOleDbSchemaGuid 参数决定了相应的限制。例如,在指定表的 OleDbSchemaGuid时,限制数组如下所示:

{TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE}

若要查看可用的限制,请单击以下 Microsoft Web 站点中的任一 OleDbSchemaGuid成员:

OleDbSchemaGuid 成员
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdataoledboledbschemaguidmemberstopic.asp (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdataoledboledbschemaguidmemberstopic.asp)

在传递限制数组的值时,对于不包含值的数组元素使用 Visual C# .NET 的 null 关键字。例如,如果要检索表的架构,使用 OleDbSchemaGuid.Tables。但是,如果指定了表,也将返回别名、同义词、视图和其他相关对象。因此,如果您希望过滤掉除表以外的所有其他对象,请对 TABLE_TYPE 使用 TABLE 限制。可以对 TABLE_CATALOG、TABLE_SCHEMA 和 TABLE_NAME 使用 null,因为您不过滤这些对象:

schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
new Object[] {null, null, null, "TABLE"});

返回的数据表

OleDbSchemaGuid 类型和限制规则的对象都对应于 GetOleDbSchemaTable 方法返回的 DataTable 中的一行。每个限制列对应于 DataTable 的一列,后面是基于 OleDbSchemaGuid 字段的其他架构信息。

例如,当您使用以下代码时,返回的 DataTable的每一行是一个数据库表:

schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
new Object[] {null, null, null, "TABLE"});

DataTable 中返回的每一列是限制列(TABLE_CATALOG、TABLE_SCHEMA、TABLE_NAME、TABLE_TYPE),后面是 TABLE_GUID、DESCRIPTION、TABLE_PROPID、DATE_CREATED 和 DATE_MODIFIED 的其他架构列。

若要获得列名称的列表(即字段描述符,如 TABLE_CATALOG、TABLE_SCHEMA 和 TABLE_NAME),您可以使用列的位置顺序。注意 Columns 数组的元素下标是从 0 开始的:

for (int i = 0; i < schemaTable.Columns.Count; i++) {
Console.WriteLine(schemaTable.Columns[i].ToString());
}

若要获得每一列的值(即实际的表名称,如 Categories、Customers 和 Employees),您可以使用该行的 ItemArray 的位置顺序。注意 ItemArray 数组的元素下标是从 0 开始的:

for (int i = 0; i < schemaTable.Rows.Count; i++) {
Console.WriteLine(schemaTable.Rows[i].ItemArray[2].ToString());
}

回到顶端

创建列出数据库中的表的示例

OleDbSchemaGuid.Tables将返回那些可由特定登录访问的表(包括视图)。如果指定对象数组 {null, null, null, "TABLE"},那么您的过滤结果只包括 TABLE 的 TABLE_TYPE。然后在返回的架构表中的每一行列出表名称 (TABLE_NAME)。

1. 启动 Visual Studio .NET。
2. 新建一个 Visual C# 控制台应用程序项目。默认情况下,Class1.cs 将添加到项目中。
3. 打开 Class1 的代码窗口。将下面的代码粘贴到代码窗口的顶部,位于 namespace声明之上:

using System.Data;
using System.Data.OleDb;
4. 在代码窗口中,将下面的代码粘贴到 Main函数中:

OleDbConnection cn = new OleDbConnection();
DataTable schemaTable; //Connect to the Northwind database in SQL Server.
//Be sure to use an account that has permission to list tables.
cn.ConnectionString = "Provider=SQLOLEDB;Data Source=server;User ID=sa;
Password=password;Initial Catalog=Northwind";
cn.Open();//Retrieve schema information about tables.
//Because tables include tables, views, and other objects,
//restrict to just TABLE in the Object array of restrictions.
schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
new Object[] {null, null, null, "TABLE"});//List the table name from each row in the schema table.
for (int i = 0; i < schemaTable.Rows.Count; i++) {
Console.WriteLine(schemaTable.Rows[i].ItemArray[2].ToString());
}//Explicitly close - don't wait on garbage collection.
cn.Close();//Pause
Console.ReadLine();
5. 修改 ConnectionString,以使用在罗斯文 (Northwind) 数据库中具有列表权限的帐户连接到您的 SQL Server 计算机。
6. 按 F5 键编译并运行该项目。您会注意到表已列在控制台窗口中。
7. 按 ENTER 键结束控制台应用程序并回到集成开发环境 (IDE)。

转载于:https://www.cnblogs.com/qingtaong/archive/2012/07/04/2576381.html

使用 GetOleDbSchemaTable相关推荐

  1. 获取access中表的相关信息

    就用到两条.net自带的获取数据库信息的语句 OleDbConnection con = new OleDbConnection(connection); // OleDB数据库连接实例 // 获取数 ...

  2. 将Excel文件数据库导入SQL Server

    将Excel文件数据库导入SQL Server的三种方案//方案一: 通过OleDB方式获取Excel文件的数据,然后通过DataSet中转到SQL Server openFileDialog = n ...

  3. C#读取Excel文件,准换为list

    经常会用到,废话不多说直接贴代码 //读取Excel文件 public static DataTable ReadExcelToTable(string path)//excel存放的路径 { try ...

  4. c# oldb连接_C#使用 OleDbConnection 连接读取Excel

    /// ///读取Excel中数据/// /// /// /// public static DataTable GetExcelTableByOleDB(string strExcelPath, s ...

  5. 转:C#读取Excel文件 (2009年9月28日)

    原文:刘武|c#如何读取excel文件 使用OLEDB可以对excel文件进行读取,我们只要把该excel文件作为数据源即可. 一 在D盘创建excel文件test.xls: 二 将工作表Sheet1 ...

  6. 实现Excel数据导入到SQL2005中的方法(回顾)

    一. 在程序中,用ADO.NET.代码如下:   //连接串 string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Prop ...

  7. Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php  c#.Net...

    Atitit. 数据库-----catalog与schema的设计区别以及在实际中使用 获取数据库所有库表 java jdbc php  c#.Net 1. -catalog与schema的设计区别1 ...

  8. 读入excel中的数据到数据库中

    项目中用到大量的导入数据,比如导入订单,导入供应商,导入用户等等, 现以导入供应商为例: 页面如下: 代码如下: 页面后台 1 public partial class ImportSupplyInf ...

  9. c#下各种数据库操作的封装!(支持ACCESS,SQLSERVER,DB2,ORACLE,MYSQL)(四)

    整个例子的完整代码如下,VS2008下编译测试通过,本人已通过它实现N个项目,欢迎大家评测,谢谢指教 publicenum DBType ...{        Access,        SQL, ...

最新文章

  1. 选型必看:RabbitMQ 七战 Kafka,差异立现
  2. 【读书笔记-数据挖掘概念与技术】聚类分析:基本概念和方法
  3. 理解 ActivityExecutionContextManager
  4. $Django 多表操作(增删改查,基于双下划线,对象的查询) 在Python脚本中调用Django环境...
  5. 新垣结衣自拍照_如何阻止自拍照出现在iPhone的自拍照专辑中
  6. 魔性十足的数学动态图,这种东西都拿出来分享?
  7. 二:熟悉 TCP/IP 协议
  8. 【Gym - 101915D】Largest Group(二分图最大团,状压dp)
  9. linux fpga 开发板,香蕉派BPI-F2S ,四核Linux工业级应用的开源硬件开发板,FPGA教学套装...
  10. java执行完main就结束了吗_为什么main方法中执行完第一个方法完之后,后面的代码都不执行了?...
  11. html datatype自定义,$.ajax中dataType为html实现地区显示效果
  12. java访问权限修饰符从大到小_程序员的术与道:道——Java修饰符之非访问控制修饰符...
  13. flask+jsonp跨域前后台交互(接口初体验)
  14. wps表格在拟合曲线找点_excel拟合曲线函数表达式,excel散点拟合出来的公式看不懂。请问怎么写入表格使用?...
  15. M5311连接HTTPS服务器下载bin文件(干货)
  16. shopex mysql 数据库服务器_[日记] shopex转移以及MySql简单操作命令
  17. 流量监测NetLimiter v4.1.6.0
  18. azkaban报Error Chunking during uploading files to db
  19. Maestro Z实时无标记细胞分析仪,评估免疫细胞治疗效价
  20. R语言主成分PCA、因子分析、聚类对地区经济研究分析重庆市经济指标

热门文章

  1. Nginx中break和last的区别
  2. 8 mv命令_Linux常用操作命令——文件和目录操作
  3. JS魔法堂:那些困扰你的DOM集合类型
  4. 自适应布局 的 解决方案
  5. 一些系统事件的手动触发方法
  6. PostgreSQL 9.6 同步多副本 与 remote_apply事务同步级别 应用场景分析
  7. 一步一步重写 CodeIgniter 框架 (2) —— 实现简单的路由功能
  8. PowerDesigner 数据建模技术视频教程
  9. Checkbox与RadioGroup的使用方法
  10. 19.为什么要用异步框架,它解决什么问题?