OLE DB取得数据库的架构信息

架构|数据|数据库

关于如何取得数据库架构信息,对于取得SQL Server和Oracal的数据库结构可能比较简单,方法也比较多。

这里整理了一个对于所有能用ADO.Net链接的数据库(比如Access,db4格式的dbf自由表等)都通用的方法

1、首先就是链接各种数据库的链接字符串,都是用ADO.Net,命名空间是:using System.Data.OleDb;

用几种数据库举个例子,需要其他的数据库链接可以到这里查:http://www.connectionstrings.com/

但要是OLE DB, OleDbConnection (.NET) 的链接方式。

Sql Server数据库连接字符串      string sConnStr = "Provider=sqloledb;Data Source=Aron1;Initial Catalog=pubs;User Id=sa;Password=asdasd;" ;

Access数据库连接字符串

    string sConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\ omepath\\mydb.mdb;User Id=admin;Password=;";Dbf表(DB4格式)连接字符串      string sConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\folder;Extended Properties=dBASE IV;User ID=Admin;Password=" ;FoxPro数据库连接字符串

    string sConnStr = "Provider=vfpoledb.1;Data Source=C:\\MyDataDirectory\\;Collating Sequence=general" ;Excel文件连接字符串

    string sConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""";Udl文件连接字符串

    string sConnStr = "File Name=c:\\myDataLink.udl;" ;

  

2、取得数据库架构信息,这里我以取得数据库的表格列表为例,代码如下   

/// <summary>  /// 取得一个数据库的表格列表,对所有用OleDb连接的数据库都可使用  /// </summary>  /// <param name="sConnStr">数据库连接字符串</param>  /// <returns>表格列表数组</returns>  public string[] GetTabList( string sConnStr )  {   if( sConnStr == null ) throw new ArgumentNullException( "sConnStr" );

   string[] sTBList;   using( OleDbConnection conn = new OleDbConnection( sConnStr ) )   {    conn.Open();    DataTable dt = conn.GetOleDbSchemaTable( OleDbSchemaGuid.Tables,     new object[] {null, null, null, "TABLE"});    conn.Close();

    if ( dt.Rows.Count > 0 )    {     sTBList = new string[dt.Rows.Count];     int i = 0;     foreach ( DataRow dr in dt.Rows )     {      sTBList[i] = dr["TABLE_NAME"].ToString();      i += 1;     }    }    else     {     sTBList = new string[1];     sTBList[0] = "<没有表格>";    }   }   return sTBList;  }

 

 其中

DataTable dt = conn.GetOleDbSchemaTable( OleDbSchemaGuid.Tables,     new object[] {null, null, null, "TABLE"});

这一句是关键,是使用 OleDbConnection 对象的 GetOleDbSchemaTable 方法展示架构信息

GetOleDbSchemaTable 返回填充了架构信息的 DataTable。

你可以让这个DataTable直接显示出来,就是详细的信息了。

如果你需要查数据库架构的其他信息时,

比如数据源、表和视图得到的目录以及所存在的约束等。表中的架构信息包括主键、列和自动编号字段。

只需要改变GetOleDbSchemaTable的参数设置,具体参数可查看

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemdataoledboledbschemaguidmemberstopic.asp

 

3、调用GetTabList( sConnStr )就能返回那个数据库的中表格列表

sConnStr 连接的是那种数据库,只要是ADO.Net支持的就能返回结果。

当连接的是Udl文件的时候,想通过Udl文件再连接到其他数据库时,选用的驱动一定也要是OleDB。

 

 

参考:

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

HOW TO:使用 GetOleDbSchemaTable 和 Visual C# .NET 检索架构信息

http://support.microsoft.com/default.aspx?scid=kb;zh-cn;309681#3

ConnectionStrings

http://www.connectionstrings.com/

时间: 2024-08-03 14:34:59

OLE DB取得数据库的架构信息的相关文章

Wince MFC OLE DB SQLCE数据库访问技术(二):嵌入式目标平台创建本地数据库sdf文件

前言 上一节已经讲述了嵌入式目标平台上安装sqlCE,本章将介绍如何在目标平台上创建本地数据库sdf文件. 备注:博客中所有关于Wince MFC OLE DB   SQLCE数据库访问技术的文章都是基于SQL Server 2005 Compact Edition即 sqlCE 3.x     在讲述sqlCE之前,先来了解下,sqlCE优于wince 自带数据库的特点: 类别 对象 最大大小限制 存储 列名 128 个字符   表中的列数 1024 行大小 8060 字节   数据库密码 4

Wince MFC OLE DB SQLCE数据库访问技术(一):嵌入式目标平台安装sqlCE

首先到微软官方下载sqlCE 3.0 下载地址:http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=e9aa3f8d-363d-49f3-ae89-64e1d149e09b   先在PC机上安装sdk.   当然由于需要将CAB包安装到嵌入式目标跑平台,Microsoft ActiveSync也需要安装,Microsoft ActiveSync微软官方也可以下载到最新版本是 V4.2的.   然后找

Sql Server 数据库,想用OLE db连数据库,怎么连呀?

<%set cn=server.createobject("adodb.connection")cn.provider="sqloledb"cn.open "driver={SQL server};server=(Local);uid=sa;pwd=;database=your database"set rs=......%>

使用Ado.net获取数据库架构信息

ado|架构|数据|数据库 使用Ado.net获取数据库架构信息 秋 枫 2004-7-3 在开发的时候有时需要获取数据库架构信息来得到数据库的一些其他信息,比如存储过程.视图.表.字段的类型.备注说明等.通过OleDb.NET数据提供程序可以比较简洁的实现这一点. 一.OleDbConnection的GetOleDbSchemaTable方法 在Ado.net的对象模型的该对象充当了与数据源之间的连接,通过Connection对象来连接数据库或者从数据库断开以释放宝贵的资源.这里我们需要用到的

关于 OLE DB 和 .NET 的思考

关于 OLE DB 和 .NET 的思考 你我并不相识.不过,面对一个实实在在的问题"软件到底是什么?",我却没有合适的答案. 设想一下这样一个场景:在一个旅游纪念品商店,你正专注于购买一些没用的东西(主要是纪念品),以便让到机场接你的朋友和亲戚感到开心.这时,往往会有人问你:"第一次来吗?出差还是度假?" 所以,如果你是在做和软件有关的事,而不是在度假,那你就不得不面对这个现实的问题. 那么,软件到底是什么? 回答这种关于存在的问题是很困难的,尤其是如果此时你正在

关于OLE DB的.NET思考(转自微软)

微软 关于 OLE DB 和 .NET 的思考 你我并不相识.不过,面对一个实实在在的问题"软件到底是什么?",我却没有合适的答案.设想一下这样一个场景:在一个旅游纪念品商店,你正专注于购买一些没用的东西(主要是纪念品),以便让到机场接你的朋友和亲戚感到开心.这时,往往会有人问你:"第一次来吗?出差还是度假?"所以,如果你是在做和软件有关的事,而不是在度假,那你就不得不面对这个现实的问题.那么,软件到底是什么?回答这种关于存在的问题是很困难的,尤其是如果此时你正在闲

OLE DB provider &amp;quot;SQLNCLI11&amp;quot; for linked server &amp;quot;dbLink01&amp;quot; was unable to begin a distributed transac

从网上搜集了以下几个解决方案,但对于非同网段的分布式事务,还是解决不了: 我这边报处错误的详细信息是: 异常信息:The operation could not be performed because OLE DB provider "SQLNCLI11" for linked server "dbLink01" was unable to begin a distributed transaction. OLE DB provider "SQLNCLI

Microsoft OLE DB Provider for ODBC Drivers 错误80004005

[Microsoft][ODBC Microsoft Access Driver]常见错误 不能打开注册表关键字 'Temporary (volatile) Jet DSN for process 0×1628 Thread 0x133c DBC 0x175169c Jet'. /Conn.asp,行 9 错误原因:数据库目录权限引起 数据库文件放在根目录下,数据库文件本身有读写修改权限,而根目录只给予读取权限,这样导致mdb数据库临时文件ldb文件无法在目录下生成,解决方法是给整个目录IUSR

MS SQL 错误:The operation could not be performed because OLE DB provider &quot;SQLNCLI10&quot; for linked server &quot;test&quot; was unable to begin a distributed transact

   一同事在测试服务器(系统:Windows 2008 R2 Standard 数据库:SQL SERVER 2008 R2)通过链接服务器test使用分布式事务测试时出错,出错信息如下: set xact_abort on begin tran update test.mydb.dbo.test_one set name='test' where  id= 3 ; commit OLE DB provider "SQLNCLI10" for linked server "