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

  获取数据源的架构信息,网上有不同的方法,但我觉得都太复杂了,其实在.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"。

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

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

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

Programclass Program    {static void Main(string[] args)        {            SqlConnection connection = new SqlConnection();            connection.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\SQL Server 2000 Sample Databases\NORTHWND.MDF;Integrated Security=True;Connect Timeout=30;User Instance=True";            connection.Open();string[] res = new string[4];            res[3] = "base table";            DataTable table = connection.GetSchema("Tables", res);foreach (DataRow row in table.Rows)            {foreach (DataColumn col in table.Columns)                {                    Console.Write(col.ColumnName + ":" + row[col] + "-");                }                Console.WriteLine();                Console.WriteLine();            }            Console.WriteLine();            Console.WriteLine();            Console.WriteLine();            Console.WriteLine();foreach (DataColumn col in table.Columns)            {foreach (DataRow row in table.Rows)                {                    Console.WriteLine(col.ColumnName + ":" + row[col]);                }                Console.WriteLine();                Console.WriteLine();            }            Console.WriteLine();            Console.WriteLine();foreach (DataColumn col in table.Columns)            {                Console.WriteLine(col.ColumnName);            }            connection.Close();        }    }

转载于:https://www.cnblogs.com/reallypride/archive/2008/10/13/1310416.html

朝花夕拾:代码生成器的基础——获取数据源的架构信息相关推荐

  1. Android中shell控制cpu,Android app开发中获取cpu arm架构信息及执行shell命令方法

    最近在做一个项目,需要在app开发过程中去判断cpu的arm架构,比如说是armeabi-v7a,或是arm64-v8a. 其实,在adb shell命令下面,可以通过getprop的方式,获取到一些 ...

  2. 使用OLE方式获取数据库架构信息

    一般连接SQL数据库的连接字串: data source=[SERVERNAME];user id=[USERNAME];password=[PASSWORD];database=[DATABASEN ...

  3. Hbase基础(特点、架构、应用场景、集群搭建、HA设计)这一篇就够了

    Hbase基础(特点.架构.应用场景.集群搭建.HA设计)这一篇就够了 1. Hbase特点 2. Hbase VS RDBMS 3. Hbase架构及版本选择 4. Hbase应用场景 5. Ntp ...

  4. 系统架构师-基础到企业应用架构-表现层

    一.前言 最近也许是由于假期的原因,我发布的文章的速度变慢了,对大家说下抱歉,这个系列的确我很难写,感谢大家对我的支持和关注,的确我在发布后得到大家的支 持和认可,让我有了更多的动力,之前发布的有些内 ...

  5. 系统架构师-基础到企业应用架构-企业应用架构

    为什么80%的码农都做不了架构师?>>>    一.上篇回顾 我们先来回顾下上篇讲解的内容,我们前面的几节分别讲述了,业务逻辑层.数据访问层.服务层.表现层,我们了解了这些分层的职责 ...

  6. 系统架构师-基础到企业应用架构-服务层

    一.上章回顾 上篇我们主要讲解了系统架构中的四种架构模式,并且分析了四种架构模式的实现及应用场景,那么先来回顾下架构中的业务逻辑层的使用及总结.  如果大家对图中讲述的内容不明白或者说是不深入那么可以 ...

  7. Hive基础知识及底层架构

    文章目录 前言 一.Hive基础知识 (一)Hadoop生态系统中的Hive (二)Hive的特点 二.Hive底层架构 (一)Hive组成模块 (二)Hive执行过程和工作原理 三.参考书籍 前言 ...

  8. SAP SD基础知识之组织架构设计-Shipping Point篇

    SAP SD基础知识之组织架构设计-Shipping Point篇 今天博主项目上不太忙,关键用户在做单元测试,那就再写一篇吧,作为组织架构设计的完结篇. Shipping Point,即装运点,同信 ...

  9. 系统架构师-基础到企业应用架构-系统设计规范与原则[上篇]

    一.上章回顾 在上篇中我们讲解了几类UML2.0语言新推出的建模图形,总体来说通过这些图形能更详细的将某类信息表达出来.在这里我们简单回顾上篇讲解的内容. 上图中已经简单介绍了上章讲述的内容,具体内容 ...

最新文章

  1. 微软企业库4.1学习笔记(六)创建对象
  2. java safevarargs_@SafeVarargs注解的使用
  3. jQuery避免$符和其他JS库冲突的方法对比
  4. SkyEye:航空发动机控制系统仿真
  5. python原理_强化学习:原理与Python实现
  6. qt文件怎么设置全局变量_QT编程之——使用全局变量
  7. Atitit 常见面试问题回答法 原则与细则 目录 1.1. 1、工作多久了?为什么离职? 1 1.2. 、自我评价 1 1.3. 问你有什么缺点 2 1.4. 4、理想薪资 2 1.5. 职业规
  8. SQL Server2008数据库置疑修复办法
  9. 最常用的四种大数据分析方法
  10. java数组排序函数
  11. SpatialDB |单细胞空间转录组数据分析可视化平台
  12. windows调节屏幕文字清晰度、锐度,屏幕字体模糊怎么办,屏幕字体不清晰
  13. 2db多少功率_db与w换算(1db等于多少功率)
  14. 520送什么蓝牙耳机好?高颜值高性价比的无线蓝牙耳机推荐
  15. 实现搜索框(含历史搜索记录)
  16. 基于mindwave脑电波进行疲劳检测算法的设计(5)
  17. python自动拼图_一种更高效的M*N拼图自动还原算法解析
  18. CentOS 6.5下安装Confluence 5.4
  19. 不给移动一分钱!10个免费发短信的国外站点
  20. java多线程------锁

热门文章

  1. java静态和动态的区别是什么意思_Java中的动态和静态多态性有什么区别?
  2. 神策数据入选《2020 爱分析·数据智能厂商全景报告》
  3. 亲身验证切实可行的python项目部署方案
  4. (轉貼) Embedded System與System on Chip的差異 (IC Design)
  5. Oracle数据库锁诊断
  6. 解决Linux下MySQL启动错误Starting MySQL.Manager of pid-file quit without updating file.[FAILED]...
  7. 《编程之美》(Java实现) :让CPU占用率画直线和正弦曲线(Java实现)
  8. VS2010开发ribbon风格的程序
  9. Android应用程序键盘(Keyboard)消息处理机制分析(12)
  10. Apache的简单应用