SQL数据库项目生成时会生成dacpac文件,可从中读出所需的元数据,进行一些转换(如生成数据字典)

 

  1. var model = new TSqlModel(@"D:\kljob\CardLan\CardLanDB\bin\Debug\cardlandb.dacpac");
  2.  
  3. XmlWriterSettings settings = new XmlWriterSettings();
  4. settings.Indent = true;
  5. settings.Encoding = new UTF8Encoding(false);
  6. settings.NewLineChars = Environment.NewLine;
  7. MemoryStream ms = new MemoryStream();
  8. XmlWriter writer=XmlWriter.Create(ms,settings);
  9.  
  10. int startID=31;
  11. writer.WriteStartDocument();
  12. writer.WriteStartElement("root");
  13. foreach (var s in
    new ModelTypeClass[]{ModelSchema.Procedure ,ModelSchema.View}){
  14.    var allTables = model.GetObjects(DacQueryScopes.UserDefined,s );
  15.    var tableScripts = from t in allTables
  16.                select t ;
  17.       foreach(var x in tableScripts){
  18.          writer.WriteStartElement("QueryObject");
  19.          writer.WriteElementString("ObjectID",startID++.ToString());
  20.          writer.WriteElementString("SourceType", x.ObjectType.Name);
  21.          writer.WriteElementString("ObjectName", x.Name.Parts[1]);
  22.          writer.WriteElementString("Remark","");
  23.  
  24.             int id=0;
  25.             foreach(var c in x.GetChildren())
  26.             {
  27.                writer.WriteStartElement("QueryObjectCols");
  28.                writer.WriteElementString("Title",c.Name.Parts[2]);
  29.                writer.WriteElementString("ObjColID",id++.ToString());
  30.                writer.WriteElementString("Field",c.Name.Parts[2]);
  31.                writer.WriteElementString("");
  32.                writer.WriteElementString("");
  33.                if(s==ModelSchema.Procedure)
  34.                   writer.WriteElementString("ValueType",c.GetReferenced(Parameter.DataType).First().Name.Parts[0]);
  35.                else
  36.                   writer.WriteElementString("ValueType",c.GetReferenced().First().GetReferenced(Column.DataType).First().Name.Parts[0]);
  37.                writer.WriteElementString("");
  38.                writer.WriteEndElement();
  39.  
  40.             }
  41.          writer.WriteEndElement();
  42.          break;
  43.       }
  44.  
  45.  }
  46.  writer.WriteEndElement();
  47.  writer.WriteEndDocument();
  48. writer.Close();
  49. string xml = Encoding.UTF8.GetString(ms.ToArray());
  50. Console.WriteLine(xml);
  51. //tableScripts.Dump();

 

 

 

 

从DACPAC文件中读取元数据的更多相关文章

  1. 条形码的应用三-----------从Excel文件中读取条形码

    条形码的应用三------从Excel文件中读取条形码 介绍 上一篇文章,我向大家展示了生成多个条形码并存储到Excel文件中的一个方法.后来我又有了个想法:既然条码插入到excel中了,我可不可以从 ...

  2. Servlet从本地文件中读取图片,并显示在页面中

    import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpSer ...

  3. 文件_ _android从资源文件中读取文件流并显示的方法

    ======== 1   android从资源文件中读取文件流并显示的方法. 在android中,假如有的文本文件,比如TXT放在raw下,要直接读取出来,放到屏幕中显示,可以这样: private ...

  4. 在C#中用Linq从属性文件中读取键值对Key-Value Pair

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:在C#中用Linq从属性文件中读取键值对Key-Value Pair.

  5. Python3 将configparser从ini文件中读取的内容转换成字典格式

    因为写脚本的用到了,所以研究了下怎么将configparser从ini文件中读取的内容转换成字典格式. 整理一下,希望能对大家有帮助. 从http://stackoverflow.com/questi ...

  6. Python3实现从文件中读取指定行的方法

    from:http://www.jb51.net/article/66580.htm 这篇文章主要介绍了Python3实现从文件中读取指定行的方法,涉及Python中linecache模块操作文件的使 ...

  7. Java将对象保存到文件中/从文件中读取对象

    1.保存对象到文件中 Java语言只能将实现了Serializable接口的类的对象保存到文件中,利用如下方法即可: public static void writeObjectToFile(Obje ...

  8. 从Excel文件中读取内容

    从Excel文件中读取内容 global::System.Web.HttpPostedFileBase file = Request.Files["txtFile"]; strin ...

  9. java从文件中读取数据然后插入到数据库表中

    实习工作中,完成了领导交给的任务,将搜集到的数据插入到数据库中,代码片段如下: static Connection getConnection() throws SQLException, IOExc ...

随机推荐

  1. 关于IE6中做兼容的那点事。

    前言 对于程序员来说,一听到你做的程序必须兼容IE6(当然主流浏览器肯定得兼容的),那颗滚烫的心瞬间哇凉哇凉的,但是有时,项目就要求这样,你也只能硬着头皮跟IE6来个亲密接触,最近正好做了个项目,关于 ...

  2. ASP.NET MVC 使用Jquery Uploadify 在非IE浏览器下Http Error的解决方案

    解决Uploadify上传控件在非IE浏览器中不工作,需要做如下2步修改: 1.Global.asax文件中,实现Application_BeginRequest函数: void Applicatio ...

  3. SEO技巧汇集

    每个人都喜欢好用的技巧,对吗?这里有55个用于搜索引擎优化的小技巧,甚至你的老妈用起来都易如反掌.哦,不是我的老妈,但你明白我的意思.这意味着网页设计师和SEO新手中大部分人都能迅速上手,没有任何困难 ...

  4. HTTPS能有效保护用户隐私

    HTTPS就等于HTTP加上TLS(SSL),HTTPS协议的目标主要有三个: http://hovertree.com/menu/webfront/ 数据保密性.保证内容在传输过程中不会被第三方查看 ...

  5. 炉石传说 C# 开发笔记(6月底小结)

    炉石传说的开发,已经有30个工作日了. 关于法术的定义方法,有过一次重大的变更:法术效果是整个炉石的核心,正是因为丰富的法术效果,才造就了炉石的可玩性. 原来构思的时候,对于法术效果没有充分的理解,所 ...

  6. TreeView使用

    1.添加节点,实现拖拽功能 private void Form1_Load(object sender, EventArgs e) { TreeNode node1 = new TreeNode(); ...

  7. 最小生成二叉树-prim算法

    1.prim算法:一种计算生成最小生成树的方法,它的每一步都会为一棵生长中的树添加一条边. 2.时间复杂度:

  8. Web-Nginx配置

    #运行用户 user nobody; #启动进程,通常设置成和cpu的数量相等 worker_processes 1; #全局错误日志及PID文件 #error_log logs/error.log; ...

  9. [小北De编程手记] : Lesson 04 玩转 xUnit.Net 之 Fixture(下)

    上一篇文章<[小北De编程手记] : Lesson 03 玩转 xUnit.Net 之 Fixture(上)>向大家介绍了xUnit.Net 共享数据的方式.Test Case的构造函数 ...

  10. selenium webdriver自动化对日期控件的处理

    用JS去掉日期输入框的readOnly属性. 代码如下: ----------------------------------------------------------------------- ...