程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#發現之旅第三講 使用C#開發基於XSLT的代碼生成器(1)(6)

C#發現之旅第三講 使用C#開發基於XSLT的代碼生成器(1)(6)

編輯:關於C語言

DataBaseInfo.cs

本代碼生成器包括了 DataBaseInfo.cs文件,其中就是比較底層的描述數據庫表結構和字段設計信息的對象。這個 文件中定義了多個類型,其中DataBaseInfo表示一個數據庫,TableInfo表示數據表設計信息 可,FIEldInfo表示數據庫字段設計信息。這三個類型構成了一個數據庫-數據表-字段的三層 對象樹狀結構。TableInfo和FIEldInfo的代碼不復雜。現在說一下DataBaseInfo類型中的一 些代碼。

首先看看LoadFromPDMXMLFile和LoadFromPDMXMLDocument函數,這個函數能 分析PDM格式的XML文檔,找出其中的數據表和字段設計信息並填充到內部結構中。某些版本 的PowerDesigner生成的PDM文件是XML格式的,這方便其他程序能加載其中的數據結構設計信 息。關於這個函數詳細的處理過程,大家可以參考一個PDM的文件仔細分析。

/// <summary>
/// 從PDM數據結構定義XML文件中加載數據結構 信息
/// </summary>
/// <param name="doc">XML文檔 對象</param>
/// <returns>加載的字段信息個數</returns>
public int LoadFromPDMXMLDocument( XMLDocument doc )
{
   intFillStyle = FillStyleConst.PDM ;
  int RecordCount = 0 ;
   myTables.Clear();
  XmlNamespaceManager nsm = new XMLNamespaceManager( doc.NameTable );
  nsm.AddNamespace( "a" , "attribute" );
  nsm.AddNamespace( "c" , "collection" );
   nsm.AddNamespace( "o" , "object");
  XMLNode RootNode = doc.SelectSingleNode("/Model/o:RootObject/c:Children/o:Model" , nsm );
  if( RootNode == null )
    return 0 ;
  strName = ReadXMLValue( RootNode , "a:Name" , nsm );
  strDescription = strName ;
  // 數據表
  foreach( XMLNode TableNode in RootNode.SelectNodes("c:Tables/o:Table" , nsm ))
  {
     TableInfo table = new TableInfo();
    myTables.Add( table );
     table.Name = ReadXMLValue( TableNode , "a:Code" , nsm );
     table.Remark = ReadXMLValue( TableNode , "a:Name" , nsm );
    string keyid = ReadXMLValue( TableNode , "c:PrimaryKey/o:Key/@Ref" , nsm );
     System.Collections.Specialized.StringCollection Keys =
      new System.Collections.Specialized.StringCollection();
    if( keyid != null )
    {
      foreach( XMLNode KeyNode in TableNode.SelectNodes(
        "c:Keys/o:Key[@Id = '" + keyid + "']/c:Key.Columns/o:Column/@Ref" , nsm ))
       {
        Keys.Add( KeyNode.Value );
      }
     }
    foreach( XMLNode FIEldNode in TableNode.SelectNodes ("c:Columns/o:Column" , nsm ))
    {
       RecordCount ++ ;
      string id = ( ( XMLElement )  FIEldNode).GetAttribute("Id");
      FieldInfo field = new FIEldInfo();
      table.Fields.Add( fIEld );
       fIEld.Name = ReadXMLValue( FIEldNode , "a:Code" , nsm );
       fIEld.Remark = ReadXMLValue( FIEldNode , "a:Name" , nsm );
       fIEld.Description = ReadXMLValue( FIEldNode , "a:Comment" , nsm );
      string FIEldType = ReadXMLValue( FIEldNode , "a:DataType" , nsm );
      if( FIEldType != null )
       {
        int index = FIEldType.IndexOf("(");
        if( index > 0 )
          FieldType = FIEldType.Substring( 0 , index );
      }
       field.FieldType = FIEldType ;
      field.FIEldWidth = ReadXMLValue( FIEldNode , "a:Length" , nsm );
      if( Keys.Contains( id ))
        fIEld.PrimaryKey = true;
    }
  }
  return RecordCount ;
}
private string ReadXMLValue(
   System.Xml.XMLNode node ,
  string path ,
   System.Xml.XMLNamespaceManager nsm )
{
  System.Xml.XMLNode node2 = node.SelectSingleNode( path , nsm );
  if( node2 == null )
     return null ;
  else
  {
    if( node2 is System.Xml.XMLElement )
      return ( ( System.Xml.XMLElement ) node2).InnerText ;
    else
      return node2.Value ;
  }
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved