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. Java中不同转换符实现不同数据类型到字符串的转换

    String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重载形式. form ...

  2. 正则表达式匹配a标签的href

    JS代码: <html> <head> <script language="javascript"> var a='<P><A ...

  3. html和js基础功能代码备份

    1)贴图:<img src="图片地址">2)加入连接:<a href="所要连接的相关地址">写上你想写的字</a> 3) ...

  4. C#将集合快速排序

    C#实现集合排序类. 说明: 1.集合类型参数化: 2.可根据集合中的对象的各个属性进行排序,传入属性名称即可: 注:属性必须实现了IComparable接口,C#中int.datetime.stri ...

  5. 如何使用C#创建WebService

    使用C#创建WebService,服务端的webservice是必须,中间的soap,Xml我们不用去关心.下面是使用C#创建WebService的简单介绍. AD:51CTO技术沙龙 | 赋予APP ...

  6. inner join on, left join on, right join on的区别与介绍

    Table A aid   adate 1      a1 2      a2 3      a3 TableB bid bdate 1    b1 2   b2 4    b4 两个表a,b相连接, ...

  7. C#编程总结(十)字符转码

    C#编程总结(十)字符转码 为了适应某种特殊需要,字符需要根据规则进行转码,便于传输.展现以及其他操作等. 看看下面的转码,就知道他的用处了. 1.字符串转码 根据原编码格式与目标编码格式,完成转换. ...

  8. jquery简单原则器(匹配索引为指定值的元素)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. Adb connection Error:远程主机强迫关闭了一个现有的连接

    在用手机调试程序时,有时会出现“Adb connection Error:远程主机强迫关闭了一个现有的连接”的错误. 出现这种错误时,可以按照以下步骤解决: (1)运行cmd.exe,并将目录CD到\ ...

  10. java servlet调用带有多个返回结果集的存储过程

    一.mysql存储过程 这里我先说下我这个功能实现的逻辑及途中遇到的一些问题.这个存储过程一共带两个输入参数,一共关联到两张表的查询,每个参数都对应查询表中的一个判断,所以一共返回了两个结果集(当然要 ...