首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > PowerDesigner >

PowerDesign的Pdm资料读取代码(C#)

2013-03-13 
PowerDesign的Pdm文件读取代码(C#)PowerDesign进行表结构设计还是比较好,但有的时候想利用设计信息构造一

PowerDesign的Pdm文件读取代码(C#)

PowerDesign进行表结构设计还是比较好,但有的时候想利用设计信息构造一些工具型程序,比如数据库结构同步,自动生成实体,还是比较麻烦.pdm文件采用的xml格式,要读取pdm文件,技术上实现这个不是很难,主要是体力活,以下代码参照了网友的代码,并在此基础上进行了完善,在此分享给大家,以减少不必要的体力劳动:

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace PdmFileSimpleReader{    /// <summary>    /// 表列信息    /// </summary>    public class ColumnInfo    {        private TableInfo _OwnerTable;        /// <summary>        /// 所属表        /// </summary>        public TableInfo OwnerTable        {            get { return _OwnerTable; }        }        public ColumnInfo(TableInfo OwnerTable)        {            this._OwnerTable = OwnerTable;        }        /// <summary>        /// 是否主键        /// </summary>        public bool IsPrimaryKey        {            get            {                PdmKey theKey = _OwnerTable.PrimaryKey;                if (theKey != null)                {                    if (theKey.ColumnObjCodes.Contains(columnId))                    {                        return true;                    }                }                return false;            }        }        string columnId;        /// <summary>        /// 列标识        /// </summary>        public string ColumnId        {            get { return columnId; }            set { columnId = value; }        }        string objectID;        /// <summary>        /// 对象Id,全局唯一.        /// </summary>        public string ObjectID        {            get { return objectID; }            set { objectID = value; }        }        string name;        /// <summary>        /// 列名        /// </summary>        public string Name        {            get { return name; }            set { name = value; }        }        string code;        /// <summary>        /// 列代码,对应数据库表字段名        /// </summary>        public string Code        {            get { return code; }            set { code = value; }        }        DateTime creationDate;        /// <summary>        /// 创建日期        /// </summary>        public DateTime CreationDate        {            get { return creationDate; }            set { creationDate = value; }        }        string creator;        /// <summary>        /// 创建人        /// </summary>        public string Creator        {            get { return creator; }            set { creator = value; }        }        DateTime modificationDate;        /// <summary>        /// 修改日期        /// </summary>        public DateTime ModificationDate        {            get { return modificationDate; }            set { modificationDate = value; }        }        string modifier;        /// <summary>        /// 修改人        /// </summary>        public string Modifier        {            get { return modifier; }            set { modifier = value; }        }        string comment;        /// <summary>        /// 注视        /// </summary>        public string Comment        {            get { return comment; }            set { comment = value; }        }        string dataType;        /// <summary>        /// 数据类型        /// </summary>        public string DataType        {            get { return dataType; }            set { dataType = value; }        }        string length;        /// <summary>        /// 数据长度        /// </summary>        public string Length        {            get { return length; }            set { length = value; }        }        bool identity;        /// <summary>        /// 是否自增量        /// </summary>        public bool Identity        {            get { return identity; }            set { identity = value; }        }        bool mandatory;        /// <summary>        /// 是否可空        /// </summary>        public bool Mandatory        {            get { return mandatory; }            set { mandatory = value; }        }        string extendedAttributesText;        /// <summary>        /// 扩展属性        /// </summary>        public string ExtendedAttributesText        {            get { return extendedAttributesText; }            set { extendedAttributesText = value; }        }        /// <summary>        /// 物理选项        /// </summary>        public string PhysicalOptions { get; set; }        /// <summary>        /// 精度        /// </summary>        public string Precision { get; set; }        /// <summary>        /// 描述        /// </summary>        public string Description { get; set; }    }}using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace PdmFileSimpleReader{    /// <summary>    /// 视图信息    /// </summary>    public class ViewInfo    {        public ViewInfo()        {            Columns = new List<ViewColumnInfo>();        }        /// <summary>        /// 视图ID        /// </summary>        public string ViewId{get;set;}        /// <summary>        /// 视图对象id        /// </summary>        public string ObjectId {get;set;}        /// <summary>        /// 视图名        /// </summary>        public string Name {get;set;}        /// <summary>        /// 视图代码=>数据库中的视图名        /// </summary>        public string Code {get;set;}        /// <summary>        /// 创建日期        /// </summary>        public DateTime CreationDate {get;set;}        /// <summary>        /// 创建人        /// </summary>        public string Creator { get; set; }        /// <summary>        /// 修改日期        /// </summary>        public DateTime ModificationDate{get;set;}        /// <summary>        /// 修改人        /// </summary>        public string Modifier {get;set;}        /// <summary>        /// 视图SQL        /// </summary>        public string ViewSQLQuery {get;set;}        /// <summary>        /// 注释        /// </summary>        public string Comment { get; set; }        /// <summary>        /// 描述        /// </summary>        public string Description { get; set; }        /// <summary>        /// 标签化的SQL查询        /// </summary>        public string TaggedSQLQuery { get; set; }        /// <summary>        /// 视图列集合.        /// </summary>        public List<ViewColumnInfo> Columns { get; private set; }     }}using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace PdmFileSimpleReader{    /// <summary>    /// 视图列信息    /// </summary>    public class ViewColumnInfo    {        private ViewInfo _ViewInfo;        public ViewInfo OwnerViewInfo        {            get { return _ViewInfo; }        }        public ViewColumnInfo(ViewInfo View)        {            _ViewInfo = View;        }        /// <summary>        /// 列Id        /// </summary>        public string ViewColumnId { get; set; }        /// <summary>        /// 对象id        /// </summary>        public string ObjectID { get; set; }        /// <summary>        /// 列名        /// </summary>        public string Name { get; set; }        /// <summary>        /// 列代码=>表字段名        /// </summary>        public string Code { get; set; }        /// <summary>        /// 创建日期        /// </summary>        public DateTime CreationDate { get; set; }        /// <summary>        /// 创建人        /// </summary>        public string Creator { get; set; }        /// <summary>        /// 修改日期        /// </summary>        public DateTime ModificationDate { get; set; }        /// <summary>        /// 修改人        /// </summary>        public string Modifier { get; set; }        /// <summary>        /// 注释        /// </summary>        public string Comment { get; set; }        /// <summary>        /// 数据类型        /// </summary>        public string DataType { get; set; }        /// <summary>        /// 数据长度        /// </summary>        public string Length { get; set; }        /// <summary>        /// 描述        /// </summary>        public string Description { get; set; }    }}using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace PdmFileSimpleReader{    /// <summary>    /// 表信息    /// </summary>    public class TableInfo    {        public TableInfo()        {            keys = new List<PdmKey>();            columns = new List<ColumnInfo>();        }        string tableId;        /// <summary>        /// 表ID        /// </summary>        public string TableId        {            get { return tableId; }            set { tableId = value; }        }        string objectID;        /// <summary>        /// 对象ID        /// </summary>        public string ObjectID        {            get { return objectID; }            set { objectID = value; }        }        string name;        /// <summary>        /// 表名        /// </summary>        public string Name        {            get { return name; }            set { name = value; }        }        string code;        /// <summary>        /// 表代码,对应数据库表名        /// </summary>        public string Code        {            get { return code; }            set { code = value; }        }        DateTime creationDate;        /// <summary>        /// 创建日期        /// </summary>        public DateTime CreationDate        {            get { return creationDate; }            set { creationDate = value; }        }        string creator;        /// <summary>        /// 创建人        /// </summary>        public string Creator        {            get { return creator; }            set { creator = value; }        }        DateTime modificationDate;        /// <summary>        /// 修改日期        /// </summary>        public DateTime ModificationDate        {            get { return modificationDate; }            set { modificationDate = value; }        }        string modifier;        /// <summary>        /// 修改人        /// </summary>        public string Modifier        {            get { return modifier; }            set { modifier = value; }        }        string comment;        /// <summary>        /// 注释        /// </summary>        public string Comment        {            get { return comment; }            set { comment = value; }        }        string physicalOptions;        /// <summary>        /// 物理选项        /// </summary>        public string PhysicalOptions        {            get { return physicalOptions; }            set { physicalOptions = value; }        }        IList<ColumnInfo> columns;        /// <summary>        /// 表列集合        /// </summary>        public IList<ColumnInfo> Columns        {            get { return columns; }        }        IList<PdmKey> keys;        /// <summary>        /// 表Key集合        /// </summary>        public IList<PdmKey> Keys        {            get { return keys; }        }        public void AddColumn(ColumnInfo mColumn)        {            if (columns == null)                columns = new List<ColumnInfo>();            columns.Add(mColumn);        }        public void AddKey(PdmKey mKey)        {            if (keys == null)                keys = new List<PdmKey>();            keys.Add(mKey);        }        /// <summary>        /// 主键Key代码.=>KeyId        /// </summary>        public string PrimaryKeyRefCode { get; set; }        /// <summary>        /// 主关键字        /// </summary>        public PdmKey PrimaryKey        {            get            {                foreach (var key in keys)                {                    if (key.KeyId == PrimaryKeyRefCode)                    {                        return key;                    }                }                return null;            }        }        /// <summary>        /// 表的描述=>PDM Notes.        /// </summary>        public string Description { get; set; }    }}using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace PdmFileSimpleReader{    /// <summary>    /// PDM实体集合    /// </summary>    public class PdmModels    {        public PdmModels()        {            Tables = new List<TableInfo>();            Views = new List<ViewInfo>();        }        /// <summary>        /// 表集合        /// </summary>        public IList<TableInfo> Tables { get;private set; }        /// <summary>        /// 视图集合        /// </summary>        public IList<ViewInfo> Views { get;private set; }    }}using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace PdmFileSimpleReader{    /// <summary>    /// 关键字    /// </summary>    public class PdmKey    {               string keyId;        /// <summary>        /// 关键字标识        /// </summary>        public string KeyId        {            get { return keyId; }            set { keyId = value; }        }        string objectID;        /// <summary>        /// 对象Id        /// </summary>        public string ObjectID        {            get { return objectID; }            set { objectID = value; }        }        string name;        /// <summary>        /// Key名        /// </summary>        public string Name        {            get { return name; }            set { name = value; }        }        string code;        /// <summary>        /// Key代码,对应数据库中的Key.        /// </summary>        public string Code        {            get { return code; }            set { code = value; }        }        DateTime creationDate;        /// <summary>        /// 创建日期        /// </summary>        public DateTime CreationDate        {            get { return creationDate; }            set { creationDate = value; }        }        string creator;        /// <summary>        /// 创建人        /// </summary>        public string Creator        {            get { return creator; }            set { creator = value; }        }        DateTime modificationDate;        /// <summary>        /// 修改日期        /// </summary>        public DateTime ModificationDate        {            get { return modificationDate; }            set { modificationDate = value; }        }        string modifier;        /// <summary>        /// 修改人        /// </summary>        public string Modifier        {            get { return modifier; }            set { modifier = value; }        }        IList<ColumnInfo> columns;        /// <summary>        /// Key涉及的列        /// </summary>        public IList<ColumnInfo> Columns        {            get { return columns; }        }        public void AddColumn(ColumnInfo mColumn)        {            if (columns == null)                columns = new List<ColumnInfo>();            columns.Add(mColumn);        }        private List<string> _ColumnObjCodes = new List<string>();        /// <summary>        /// Key涉及的列代码,根据辞可访问到列信息.对应列的ColumnId        /// </summary>        public List<string> ColumnObjCodes        {            get { return _ColumnObjCodes; }        }        public void AddColumnObjCode(string ObjCode)        {            _ColumnObjCodes.Add(ObjCode);        }        private TableInfo _OwnerTable = null;        public PdmKey(TableInfo table)        {            _OwnerTable = table;        }    }}/* * 本程序代码用于读取PowerDesign的pdm文件中的表和视图信息. * Albert.Tian 编辑整理于2013-03-11 * CSDN博客地址:http://blog.csdn.net/hawksoft * 本文件参照了其它网友的代码,在此表示感谢. * 说明:基于一般在数据库中并不需要建立实际的参照(外键关联),这里没有实现 * 读取参照的方法,大家如果需要可以在此基础上进行扩展。 */using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Xml;namespace PdmFileSimpleReader{    public class PdmFileReader    {        private const string a = "attribute", c = "collection", o = "object";        private const string cClasses = "c:Classes";        private const string oClass = "o:Class";        private const string cAttributes = "c:Attributes";        private const string oAttribute = "o:Attribute";        private const string cTables = "c:Tables";        private const string oTable = "o:Table";        private const string cColumns = "c:Columns";        private const string oColumn = "o:Column";        private const string cPrimaryKey = "c:PrimaryKey";        private const string cViews = "c:Views";        private const string oView = "o:View";                      /// <summary>构造函数 </summary>        public PdmFileReader()        {        }        /// <summary>        /// 读取指定Pdm文件的实体集合        /// </summary>        /// <param name="PdmFile">Pdm文件名(全路径名)</param>        /// <returns>实体集合</returns>        public PdmModels ReadFromFile(string PdmFile)        {            XmlDocument xmlDoc;            //加载文件.            xmlDoc = new XmlDocument();            xmlDoc.Load(PdmFile);            //必须增加xml命名空间管理,否则读取会报错.            XmlNamespaceManager xmlnsManager;            xmlnsManager = new XmlNamespaceManager(xmlDoc.NameTable);            xmlnsManager.AddNamespace("a", "attribute");            xmlnsManager.AddNamespace("c", "collection");            xmlnsManager.AddNamespace("o", "object");            PdmModels theModels = new PdmModels();                        //读取所有表节点            XmlNodeList xnTablesList = xmlDoc.SelectNodes("//" + cTables, xmlnsManager);            foreach (XmlNode xmlTables in xnTablesList)            {                foreach (XmlNode xnTable in xmlTables.ChildNodes)                {                    //排除快捷对象.                    if (xnTable.Name != "o:Shortcut")                    {                        theModels.Tables.Add(GetTable(xnTable));                    }                }            }            //读取所有视图节点.            XmlNodeList xnViewsList = xmlDoc.SelectNodes("//" + cViews, xmlnsManager);            foreach (XmlNode xmlViews in xnViewsList)            {                foreach (XmlNode xnView in xmlViews.ChildNodes)                {                    theModels.Views.Add(GetView(xnView));                }            }            return theModels;        }        //初始化"o:View"的节点        private ViewInfo GetView(XmlNode xnView)        {            ViewInfo theView = new ViewInfo();            XmlElement xe = (XmlElement)xnView;            theView.ViewId = xe.GetAttribute("Id");            XmlNodeList xnTProperty = xe.ChildNodes;            foreach (XmlNode xnP in xnTProperty)            {                switch (xnP.Name)                {                    case "a:ObjectID": theView.ObjectId = xnP.InnerText;                        break;                    case "a:Name": theView.Name = xnP.InnerText;                        break;                    case "a:Code": theView.Code = xnP.InnerText;                        break;                    case "a:CreationDate": theView.CreationDate = String2DateTime(xnP.InnerText);                        break;                    case "a:Creator": theView.Creator = xnP.InnerText;                        break;                    case "a:ModificationDate": theView.ModificationDate = String2DateTime(xnP.InnerText);                        break;                    case "a:Modifier": theView.Modifier = xnP.InnerText;                        break;                    case "a:Comment": theView.Comment = xnP.InnerText;                        break;                    case "a:Description": theView.Description = xnP.InnerText;                        break;                    case "a:View.SQLQuery": theView.ViewSQLQuery = xnP.InnerText;                        break;                    case "a:TaggedSQLQuery": theView.TaggedSQLQuery = xnP.InnerText;                        break;                    case "c:Columns":                        InitColumns(xnP, theView);                        break;                }            }            return theView;        }        //初始化"o:Table"的节点        private TableInfo GetTable(XmlNode xnTable)        {            TableInfo mTable = new TableInfo();            XmlElement xe = (XmlElement)xnTable;            mTable.TableId = xe.GetAttribute("Id");            XmlNodeList xnTProperty = xe.ChildNodes;            foreach (XmlNode xnP in xnTProperty)            {                switch (xnP.Name)                {                    case "a:ObjectID": mTable.ObjectID = xnP.InnerText;                        break;                    case "a:Name": mTable.Name = xnP.InnerText;                        break;                    case "a:Code": mTable.Code = xnP.InnerText;                        break;                    case "a:CreationDate": mTable.CreationDate = String2DateTime(xnP.InnerText);                        break;                    case "a:Creator": mTable.Creator = xnP.InnerText;                        break;                    case "a:ModificationDate": mTable.ModificationDate = String2DateTime(xnP.InnerText);                        break;                    case "a:Modifier": mTable.Modifier = xnP.InnerText;                        break;                    case "a:Comment": mTable.Comment = xnP.InnerText;                        break;                    case "a:PhysicalOptions": mTable.PhysicalOptions = xnP.InnerText;                        break;                    case "c:Columns": InitColumns(xnP, mTable);                        break;                    case "c:Keys": InitKeys(xnP, mTable);                        break;                    case "c:PrimaryKey":                        InitPrimaryKey(xnP, mTable);                        break;                    case "a:Description": mTable.Description = xnP.InnerText;                        break;                }            }            return mTable;        }        //PDM文件中的日期格式采用的是当前日期与1970年1月1日8点之差的秒树来保存.        private DateTime _BaseDateTime = new DateTime(1970, 1, 1, 8, 0, 0);        private DateTime String2DateTime(string DateString)        {            Int64 theTicker = Int64.Parse(DateString);            return _BaseDateTime.AddSeconds(theTicker);        }        //初始化"c:Columns"的节点        private void InitColumns(XmlNode xnColumns, TableInfo pTable)        {            foreach (XmlNode xnColumn in xnColumns)            {                pTable.AddColumn(GetColumn(xnColumn,pTable));            }        }        //初始化"c:Columns"的节点        private void InitColumns(XmlNode xnColumns, ViewInfo pView)        {            foreach (XmlNode xnColumn in xnColumns)            {                pView.Columns.Add(GetColumn(xnColumn, pView));            }        }        //初始化c:Keys"的节点        private void InitKeys(XmlNode xnKeys, TableInfo pTable)        {            foreach (XmlNode xnKey in xnKeys)            {                pTable.AddKey(GetKey(xnKey,pTable));            }        }        //初始化c:PrimaryKey"的节点        private void InitPrimaryKey(XmlNode xnPrimaryKey, TableInfo pTable)        {            pTable.PrimaryKeyRefCode= GetPrimaryKey(xnPrimaryKey);        }        private static Boolean ConvertToBooleanPG(Object obj)        {            if (obj != null)            {                string mStr = obj.ToString();                mStr = mStr.ToLower();                if ((mStr.Equals("y") || mStr.Equals("1")) || mStr.Equals("true"))                {                    return true;                }            }            return false;        }         private ColumnInfo GetColumn(XmlNode xnColumn,TableInfo OwnerTable)        {            ColumnInfo mColumn = new ColumnInfo(OwnerTable);            XmlElement xe = (XmlElement)xnColumn;            mColumn.ColumnId = xe.GetAttribute("Id");            XmlNodeList xnCProperty = xe.ChildNodes;            foreach (XmlNode xnP in xnCProperty)            {                switch (xnP.Name)                {                    case "a:ObjectID": mColumn.ObjectID = xnP.InnerText;                        break;                    case "a:Name": mColumn.Name = xnP.InnerText;                        break;                    case "a:Code": mColumn.Code = xnP.InnerText;                        break;                    case "a:CreationDate": mColumn.CreationDate = String2DateTime(xnP.InnerText);                        break;                    case "a:Creator": mColumn.Creator = xnP.InnerText;                        break;                    case "a:ModificationDate": mColumn.ModificationDate = String2DateTime(xnP.InnerText);                        break;                    case "a:Modifier": mColumn.Modifier = xnP.InnerText;                        break;                    case "a:Comment": mColumn.Comment = xnP.InnerText;                        break;                    case "a:DataType": mColumn.DataType = xnP.InnerText;                        break;                    case "a:Length": mColumn.Length = xnP.InnerText;                        break;                    case "a:Identity": mColumn.Identity = ConvertToBooleanPG(xnP.InnerText);                        break;                    case "a:Mandatory": mColumn.Mandatory = ConvertToBooleanPG(xnP.InnerText);                        break;                    case "a:PhysicalOptions": mColumn.PhysicalOptions = xnP.InnerText;                        break;                    case "a:ExtendedAttributesText": mColumn.ExtendedAttributesText = xnP.InnerText;                        break;                    case "a:Precision":                        mColumn.Precision = xnP.InnerText;                        break;                }            }            return mColumn;        }        private ViewColumnInfo GetColumn(XmlNode xnColumn, ViewInfo OwnerView)        {            ViewColumnInfo mColumn = new ViewColumnInfo(OwnerView);            XmlElement xe = (XmlElement)xnColumn;            mColumn.ViewColumnId = xe.GetAttribute("Id");            XmlNodeList xnCProperty = xe.ChildNodes;            foreach (XmlNode xnP in xnCProperty)            {                switch (xnP.Name)                {                    case "a:ObjectID": mColumn.ObjectID = xnP.InnerText;                        break;                    case "a:Name": mColumn.Name = xnP.InnerText;                        break;                    case "a:Code": mColumn.Code = xnP.InnerText;                        break;                    case "a:CreationDate": mColumn.CreationDate =String2DateTime(xnP.InnerText);                        break;                    case "a:Creator": mColumn.Creator = xnP.InnerText;                        break;                    case "a:ModificationDate": mColumn.ModificationDate = String2DateTime(xnP.InnerText);                        break;                    case "a:Modifier": mColumn.Modifier = xnP.InnerText;                        break;                    case "a:Comment": mColumn.Comment = xnP.InnerText;                        break;                    case "a:DataType": mColumn.DataType = xnP.InnerText;                        break;                    case "a:Length": mColumn.Length = xnP.InnerText;                        break;                    case "a:Precision":                        mColumn.Description = xnP.InnerText;                        break;                }            }            return mColumn;        }        private string GetPrimaryKey(XmlNode xnKey)        {            XmlElement xe = (XmlElement)xnKey;            if (xe.ChildNodes.Count > 0)            {                XmlElement theKP = (XmlElement)xe.ChildNodes[0];                return theKP.GetAttribute("Ref");            }            return "";        }        private void InitKeyColumns(XmlNode xnKeyColumns, PdmKey Key)        {            XmlElement xe = (XmlElement)xnKeyColumns;            XmlNodeList xnKProperty = xe.ChildNodes;            foreach (XmlNode xnP in xnKProperty)            {                string theRef = ((XmlElement)xnP).GetAttribute("Ref");                Key.AddColumnObjCode(theRef);            }        }        private PdmKey GetKey(XmlNode xnKey,TableInfo OwnerTable)        {            PdmKey mKey = new PdmKey(OwnerTable);            XmlElement xe = (XmlElement)xnKey;            mKey.KeyId = xe.GetAttribute("Id");            XmlNodeList xnKProperty = xe.ChildNodes;            foreach (XmlNode xnP in xnKProperty)            {                switch (xnP.Name)                {                    case "a:ObjectID": mKey.ObjectID = xnP.InnerText;                        break;                    case "a:Name": mKey.Name = xnP.InnerText;                        break;                    case "a:Code": mKey.Code = xnP.InnerText;                        break;                    case "a:CreationDate": mKey.CreationDate = String2DateTime(xnP.InnerText);                        break;                    case "a:Creator": mKey.Creator = xnP.InnerText;                        break;                    case "a:ModificationDate": mKey.ModificationDate = String2DateTime(xnP.InnerText);                        break;                    case "a:Modifier": mKey.Modifier = xnP.InnerText;                        break;                    case "c:Key.Columns":                        InitKeyColumns(xnP, mKey);                        break;                }            }            return mKey;        }    }}


以上代码在vs2010,pd16上测试通过.

热点排行