真的骄傲梦想家园
专业源于兴趣和努力

  最近在做一个代码生成工具,在制作的过程中,掌握了获取数据源的架构信息,获取数据源的架构信息是代码生成工具的基础。

  获取数据源的架构信息,网上有不同的方法,但我觉得都太复杂了,其实在.Net上,要获取数据源的架构信息是件非常容易的事情,只要使用Connection对象的GetSchema方法就可以了。下面以SqlConnection为例,使用的是Northwind数据库。


DataTable table = connection.GetSchema();

以无参的形式调用GetSchema方法,此时将返回一个 DataTable,包含支持的架构集合列表和其它信息。

使用这些信息,可以通过GetSchema方法获取特定的集合。如Users获取数据库的所有用户,Procedures获取数据库的所有存储过程等等。

以Tables为例,当传入参数"Tables"(忽略大小写的)调用GetSchema方法时


DataTable table = connection.GetSchema("Tables");

得到的数据列信息为

可以看到,TABLE_TYPE有两种类型,BASE TABLE和VIEW,它把视图也当成是表(不过再想想,视图也确实属于表的一种)。

那么如何让它只返回表而包括视图呢?这时就要使用到GetSchema的第三个参数了。

第三个参数的用法有点特别,现在我需要返回的是TABLE_TYPE的值为BASE TABLE的集合。因为TABLE_TYPE是第4列(从1开始),那么就需要创建一个大小至少为4的string数组,然后把第4位的值赋值为"BASE TABLE"。

Code
string[] res = new string[4];
res[
3] = "base table";
DataTable table
= connection.GetSchema("Tables", res);

从得到的结果中可以看到,这次把视图过滤掉了。

下面是这个程序的完整代码:

Program
posted on 2008-10-13 23:17  真的骄傲  阅读(2615)  评论(11编辑  收藏  举报