<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      代碼生成工具之數據庫表及字段名稱轉義

      在上篇隨筆《代碼生成工具之界面快速生成》中介紹過了代碼生成工具Database2Sharp是如何快速生成所需的Web界面以及各種Winform界面,其中包括生成即可運行的Web界面效果,Winform布局信息的生成。這些看似很簡單的界面元素生成,其實是需要豐富的數據庫元數據信息作為基礎的,而且對不同的數據庫處理要有所不同。本文介紹不同數據庫之間元數據的處理差別,以及如何代碼生成工具Database2Sharp如何兼容處理這些問題的。

      1、常規的數據庫表、字段名稱的轉義

      例如,我們需要獲取表的別名,對于SqlServer一般設計的時候是采用Pascal命名方式,所以表名稱不需要轉義,但對于Oracle表名稱,基本上都是以大寫來命名,而且表名稱不是采用Pascal方式,而是兩個詞之間采用下劃線“_"來分隔的,如DEPT_NAME這樣的名稱。

      一般來說,我們為每種的數據庫定義一套轉義規則,來為表、字段名稱增加一個別名字段,如Oracle的DEPT_NAME我們設法讓它別名顯示為DeptName就可以了,SQLServer的由于一般名稱都是Pascal的,我們可以不用轉義,數據庫表、字段名稱為DeptName,我們就保留它作為別名DeptName即可。

      我的代碼生成工具的元數據屬性就是這樣的模式,有一個NameElement對象,就包含Name和Alias兩個屬性,如下所示。

      2、特別情況下的表、字段名稱轉義

      但我們有時候反向工程的時候,可能數據庫是從Oracle到SQLServer的,或者有時候考慮多數據庫兼容的情況,那么可能SQLServer的表及字段的名稱還是Oracle的命名規則的,如下SQLServer例子所示。

      對于以上的數據庫信息,如果沒有轉義數據庫名稱,那么就給生成代碼造成很大的困擾,因為實體類屬性名稱,類名稱都可能是Oracle風格的大寫的標志,非常不利于閱讀。

      但代碼生成工具已經增加了智能識別字段名稱的邏輯,對于這種從Oracle過來的數據庫命名規則,我們也能合理生成對應的代碼,如上圖的右邊,它已經判斷使用了Oracle的命名規則來處理別名了。

      這樣我們生成的代碼,就是很友好的命名風格了。

      3、自定義表、字段名稱的別名

      有時候,統一規則生成的別名不一定是我們所需要的,那么請使用代碼生成工具的別名設置操作即可把某個表名、字段名設置為你想要的名稱,如下操作所示。

      1)表別名修改

      2)字段別名修改

      4、在代碼工具的自定義模板中使用字段轉義信息

      代碼生成工具Database2Sharp提供了很好的自定義模板操作交互功能,我們只需要在模板文件中書寫NVelocity的模板代碼就可以輸出各種豐富多彩的代碼的,如下面圖就是自定義模板列表界面,其中左邊列出一些基礎的例子模板代碼,大家可以參考學習,在樹形目錄中建立自己的模板文件和模板代碼。

      使用自定義模板代碼的目的,就是要利用數據庫的元數據信息來生成復雜而有規律的代碼片段或者文件的。

      我們注意到模板代碼,其中利用到的數據庫信息及遍歷操作等。

              /// <summary>
              /// 初始化
              /// </summary>
              /// <param name="info">實體類信息</param>
              private void InitData(${ClassName}Info info)
              {
      #foreach($ColumnInfo in ${TableInfo.ColumnList.Values})        
      #if(${ColumnInfo.AutoIncrement} == false)    
      #if(${ColumnInfo.NetType} == "System.String" )
                  this.txt${ColumnInfo.Name.Alias.ToCapit()}.Text = info.${ColumnInfo.Name.Alias.ToCapit()};
      #elseif(${ColumnInfo.NetType} == "System.DateTime")
                  this.txt${ColumnInfo.Name.Alias.ToCapit()}.Text = info.${ColumnInfo.Name.Alias.ToCapit()}.ToShortDateString();
      #else
                  this.txt${ColumnInfo.Name.Alias.ToCapit()}.Text = info.${ColumnInfo.Name.Alias.ToCapit()}.ToString();
      #end
      #end ##endif
      #end
              }        
                      
              /// <summary>
              /// 獲取數據
              /// </summary> 
              private ${ClassName}Info GetData()
              { 
                  ${ClassName}Info info = new ${ClassName}Info();
      #foreach($ColumnInfo in ${TableInfo.ColumnList.Values})        
      #if(${ColumnInfo.AutoIncrement} == false)     
      #if(${ColumnInfo.NetType} == "System.Decimal" )
                  info.${ColumnInfo.Name.Alias.ToCapit()} = Helper.SafeConvertDecimal(this.txt${ColumnInfo.Name.Alias.ToCapit()}.Text);
      #elseif(${ColumnInfo.NetType} == "System.DateTime")    
                  info.${ColumnInfo.Name.Alias.ToCapit()} = Helper.SafeConvertDate(this.txt${ColumnInfo.Name.Alias.ToCapit()}.Text);        
      #else
                  info.${ColumnInfo.Name.Alias.ToCapit()} = this.txt${ColumnInfo.Name.Alias.ToCapit()}.Text;   
      #end          
      #end ##endif
      #end
               }

      其中的${ColumnInfo.Name.Alias.ToCapit()}為別名,而${ColumnInfo.Name.Name.ToCapit()}為數據庫表字段真實名稱。
      以上模板,我們選擇數據庫表生成代碼,就可以得到下面的標準賦值及獲取內容的代碼了。

              /// <summary>
              /// 初始化
              /// </summary>
              /// <param name="info">實體類信息</param>
              private void InitData(GroupInfo info)
              {
                   this.txtEditor.Text = info.Editor.ToString();
                   this.txtEdittime.Text = info.Edittime;
                   this.txtName.Text = info.Name;
                   this.txtOutGroup.Text = info.OutGroup;
                   this.txtGroupOrder.Text = info.GroupOrder;
                   this.txtDeptName.Text = info.DeptName;
                   this.txtUpperDept.Text = info.UpperDept.ToString();
                   this.txtGrade.Text = info.Grade.ToString();
                   this.txtRemark.Text = info.Remark;
               }        
                      
              /// <summary>
              /// 獲取數據
              /// </summary> 
              private GroupInfo GetData()
              { 
                   GroupInfo info = new GroupInfo();
                   info.Editor = this.txtEditor.Text;   
                   info.Edittime = this.txtEdittime.Text;   
                   info.Name = this.txtName.Text;   
                   info.OutGroup = this.txtOutGroup.Text;   
                   info.GroupOrder = this.txtGroupOrder.Text;   
                   info.DeptName = this.txtDeptName.Text;   
                   info.UpperDept = this.txtUpperDept.Text;   
                   info.Grade = this.txtGrade.Text;   
                   info.Remark = this.txtRemark.Text;   
                }

      以上就是代碼生成工具Database2Sharp的數據庫表及字段名稱轉義的智能處理以及應用,如果熟練使用NVelocity的基本語法,結合代碼工具提供的數據庫元數據信息,我們可以做的更多,做的更好。希望這個工具對你的開發有幫助。

      posted on 2012-09-06 19:28  伍華聰  閱讀(9249)  評論(11)    收藏  舉報

      導航

      主站蜘蛛池模板: 国内揄拍国内精品对久久| 中文字幕日韩精品亚洲一区| 泌阳县| 精品人妻一区二区| 日韩高清免费一码二码三码| 四虎国产精品成人免费久久| 深夜释放自己在线观看| 国内少妇人妻偷人精品视频| 亚洲欧美卡通另类丝袜美腿 | 熟女人妻aⅴ一区二区三区电影 | 亚洲人成网站在线无码| 四虎在线播放亚洲成人| 精品国产精品三级精品av网址| 在线无码午夜福利高潮视频| 91老肥熟女九色老女人| 亚洲欧美日韩国产四季一区二区三区 | 插入中文字幕在线一区二区三区| 高颜值午夜福利在线观看| 性色在线视频精品| 国产成人毛片无码视频软件| 亚洲国产精品久久久久婷婷图片| 欧美性猛交xxxx富婆| 国产综合久久99久久| 亚洲精品动漫一区二区三| 美女裸体黄网站18禁止免费下载| 中文字幕乱码亚洲无线三区| 98精品全国免费观看视频| 国产在线一区二区在线视频| 免费午夜无码片在线观看影院| 天天看片视频免费观看| 日韩一区二区黄色一级片| 在线视频不卡在线亚洲| 亚洲av不卡电影在线网址最新| 麻豆精品一区二区视频在线| 在线观看热码亚洲av每日更新| 婷婷丁香五月亚洲中文字幕| 亚洲一级特黄大片在线播放 | 亚洲国产成人久久精品不卡| 国产精品福利中文字幕| 97免费公开在线视频| 成人国产亚洲精品天堂av|