在研究SQL SERVER 2005自带的数据库AdventureWorks遇到一个问题,表大概有70多个,关系不明确,字段都是英文,学习起来很吃力。

于是,想把数据的结构和表与表之间的关系弄出来。这样,想到了用Rational Rose的逆向工程来做。完成后打印成PDF文件后可以大致看清部分逻辑关系。下面就是生成的PDF文件:

OLTP事例数据库 
    DW数据仓库示例

后来在MSDN上找到了该数据库的数据字典的网址:
    http://msdn2.microsoft.com/zh-cn/library/ms124438.aspx

由于MSDN的一个页面只显示一个表的结构,于是又想到是不是能将这些表的字段说明整理到一个页面或一个word文档里,便于阅读。利用.NET里面的System.Net实现读取相应的html文件,并提取表格列表部分的html,最后生成一个html文件。

核心程序如下:
 public void GetHtmlData(string UrlIDs)
  {
   System.Text.StringBuilder sb = new System.Text.StringBuilder();
   string prefix = "http://msdn2.microsoft.com/zh-cn/library/ms";   
   string postfix = ".aspx";
   string url = "";
   string html = "";
   string tablename = "";
   string discription = "";
   string content = "";
   DataTable dt = new DataTable();
   dt.Columns.Add("序号");
   dt.Columns.Add("ID");
   dt.Columns.Add("表名");
   dt.Columns.Add("表的说明");
   dt.Columns.Add("表的内容");
   try
   {
    // 得到Html
    if (UrlIDs != "")
    {
     //得到ID的数组
     string[] ids = UrlIDs.Split(new char[] {','});
     if (ids.Length > 0)
     {
      // 循环得到数据
      for (int i = 1; i < ids.Length + 1; i ++)
      {      
       url = prefix + ids[i-1] + postfix;

System.Net.HttpWebRequest request = (System.Net.HttpWebRequest) System.Net.WebRequest.Create(url);
       System.Net.HttpWebResponse response = (System.Net.HttpWebResponse) request.GetResponse();
       System.IO.StreamReader stream = new System.IO.StreamReader(response.GetResponseStream(), System.Text.Encoding.GetEncoding("utf-8"));
       html = stream.ReadToEnd().Trim();
       html = html.Replace("\r","");
       html = html.Replace("\n","");

if (html.Length > 0)
       {
        html = html.Substring(html.IndexOf("<div class=\"majorTitle\" >SQL Server 2005 联机丛书") + 45,html.Length -  html.IndexOf("<div class=\"majorTitle\" >SQL Server 2005 联机丛书") - 45);
        tablename = html.Substring(html.IndexOf("</div><div class=\"title\" >") + 26, html.IndexOf("表 (AdventureWorks)") - html.IndexOf("</div><div class=\"title\" >") - 8);
        discription = html.Substring(html.IndexOf("<span id=\"changeHistory\"> </span> <p>") + 38,html.IndexOf("</p> <div class=\"MTPS_CollapsibleRegion\">") - html.IndexOf("<span id=\"changeHistory\"> </span> <p>") -38);

html = html.Substring(html.IndexOf("<h3 class=\"subHeading\"><!----></h3>"),html.Length -  html.IndexOf("<h3 class=\"subHeading\"><!----></h3>") - 35);
        content = html.Substring(html.IndexOf("<table"),html.IndexOf("</table>") - html.IndexOf("<table") + 8);

DataRow dr = dt.NewRow();
        dr[0] = i.ToString();
        dr[1] = ids[i-1];
        dr[2] = tablename;
        dr[3] = discription;
        dr[4] = content;
        dt.Rows.Add(dr);
        this.statusBar1.Text = "正在获取第" + i.ToString() + "条数据……";
        this.dataGrid1.DataSource = dt.DefaultView;        
       }      
      }
     }    
    }
    if (dt.Rows.Count > 0)
    {
     StreamWriter sw = new StreamWriter("C:\\tables.html",false,System.Text.Encoding.GetEncoding("GB2312"));
     sw.Write("<html><head><title>AdventureWorks数据字典</title></head>");
     sw.Write("<br><br>");
     sw.Write("<body>");
     sw.WriteLine();
     for (int k = 0; k < dt.Rows.Count; k ++)
     {
      sw.Write(dt.Rows[k][2].ToString() + ":" + dt.Rows[k][3].ToString() + "<br>" + dt.Rows[k][4].ToString());
      sw.Write("<br><br>");
     }
     sw.Write("</body></html>");     
     sw.Close();     
    }
   }
   catch(IOException ex)
   {
    Console.Write(ex.ToString());
   }
   if (dt.Rows.Count > 0)
   {
    this.statusBar1.Text = "成功获取" + dt.Rows.Count.ToString() + "条数据!";
   }
   else
   {
    this.statusBar1.Text = "没有获取任何数据,请确认ID是否正确!";
   }
  }

填写ID列表后即可得到数据字典。

转载于:https://www.cnblogs.com/bobomouse/archive/2007/06/05/772165.html

AdventureWorks数据库数据字典研究相关推荐

  1. Briefings in Bioinformatics:微生物基因组学和功能基因组学相关软件和数据库的研究进展

    文章目录 微生物基因组学和功能基因组学相关软件和数据库的研究进展 微生物比较基因组 代谢途径 致病机制 次级代谢产物 噬菌体 操纵子/复制起点预测 基因组可视化 宏基因组 多序列比对 Referenc ...

  2. mysql导出数据库数据字典

    mysql导出数据库数据字典,执行如下查询导出到excel即可 SELECT tc.TABLE_SCHEMA 数据库, tc.TABLE_NAME 表名, tt.TABLE_COMMENT, tc.C ...

  3. mysql 数据字典 php_php生成mysql数据库数据字典的程序代码

    php生成mysql数据库数据字典的程序代码,比较实用,具体代码如下:header('Content-type:text/html;charset=utf-8'); /** * 生成mysql数据字典 ...

  4. SQLServer2005安装AdventureWorks数据库

    安装SQLserver2005时,如果你选择的是默认安装,就不会安装AdventureWorks数据库.因为许多教程和例子都需要用到AdventureWorks数据库,所以安装AdventureWor ...

  5. 很好用的数据库数据字典【可导出为word , excel文件】

    <?php /*** 生成mysql数据字典*/ header("Content-type:text/html;charset=utf-8"); // 配置数据库 $data ...

  6. oracle数据库数据字典应用

    oracle数据字典 数据字典是由oracle服务器创建和维护的一组只读的系统表.数据字典分为两类:一是基表,二是数据字典视图. 数据字典视图包括用户名.用户权限.对象名.约束和审计等信息,是通过运行 ...

  7. linux单片机用什么数据库,基于ARM-Linux的SQLite嵌入式数据库的研究 -单片机-电子工程世界网...

    引言 随着嵌入式系统的广泛应用和用户对数据处理和管理需求的不断提高,各种智能设备和数据库技术的紧密结合已经得到了各方面的重视.不久的将来嵌入式数据库将无处不在.纵观目前国际.国内嵌入式数据库的应用情况 ...

  8. 教程03-微擎的数据库数据字典

    微擎框架安装好,没有安装任何插件模块,总共有139张表格.现在分别介绍下这些表. 在介绍这些表的过程中,表前缀可以忽略. 1. account 平台账号表(公众号.小程序.PC等) 字段名 数据类型 ...

  9. SQL SERVE 的数据库安全性研究

    摘要:针对目前面临的数据库安全问题,文章从数据库系统的安全模型入手,对SqlSever数据库的安全配置进行描述,分析讨论了SQL SERVER数据库使用中的安全问题,针对不同的用户分析了可能存在的安全 ...

  10. mysql数据库 purge_MySQL 研究innodb_max_purge_lag分享

    现象: 线上数据库每个表分配一个ibdata,但是总的ibdata文件很大,超过10G,用相关工具查看,大部分空间都是undo_log 分析了db33的ibdata1的记过 Total number ...

最新文章

  1. NT式驱动和WDM式驱动程序
  2. 2017-2018-2 20179317 《网络攻防技术》第七周学习心得体会
  3. mysql 8.0 一条insert语句的具体执行流程分析(三)
  4. git log 你学废了吗?
  5. 去掉重复值php,php多维数组去掉重复值
  6. 自加载宏让你的Excel支持正则处理函数
  7. hbase官方文档中文版0.97
  8. CryEngine Plugin 创建
  9. 多个视频文件合成画中画效果(Python版)
  10. 电商商品详情如何快速高效获取,api来帮你!
  11. 运维日常之机房浪潮服务器硬盘红灯亮起,服务器一直响,raid磁盘红色。。。故障解决方法
  12. YY会是百度的YY,但百度的直播不只是YY
  13. O2O、C2C、B2B、B2C
  14. 【世界观】硅谷最重要文件:Netflix126页PPT完全汉化版
  15. 获取 COM 服务器进程 ID 的 3 种方法
  16. mysql创建学生信息表学号_mysql创建学生信息表
  17. 详解RocketMQ不同类型的消费者
  18. 大淘宝服务端技术干货沉淀和总结
  19. 基于arcgis的python编程秘笈第2版_基于ArcGIS的Python编程秘笈(第2版)
  20. ECharts图标数据过多添加滚动条

热门文章

  1. Python安装 chardet
  2. ddm模型公式_两阶段增长模型
  3. python 使用前馈神经网络处理IrIs数据集(BP)
  4. python请输入一个三位数输出该三位数的逆序数_键盘输入一个三位数,输出逆序后的数...
  5. Ubuntu 修改 谷歌输入法 简繁体切换的快捷键
  6. SpringBoot - Spring 家族的技术体系
  7. 甲方爸爸素材给得少,怎么做出高大上的设计?
  8. 【国产MCU移植】看看有没有你需要的,一起来查漏补缺吧!(附已报名的硬件)...
  9. c语言报告 列主元lu分解,列主元LU分解法 C++程序
  10. matlab画累计直方图_科学网—matlab 绘制直方图——常用命令 - 范凯波的博文