2009-12-02 55 views
0

我們在Oracle中有超過200個視圖,應該將其轉換爲200個具有固定長度字段的平面文件。
幫助改進移植計劃

希望得到的想法,做好以下遷移程序的設計。

移民計劃的原型是這樣的名爲VIEWNAME1視圖(並且是在原型其他意見相同):爲

StronglyTypedDataSet views = new StronglyTypedDataSet(); 
ViewName1TableAdapter tableAdapter = new ViewName1TableAdapter(); 
tableAdapter.Fill(views.VIEWNAME1 ); 
mapFromViewToFlatFile(views.VIEWNAME1); 

目前我們使用的ODT(Oracle開發工具) .Net與C#。

的映射例程爲每個視圖:

private void mapFromViewToFlatFile(DataTable table) 
{ 
      StringBuilder format = BuildFormat(); 
      StringBuilder outBuf = new StringBuilder(); 
      foreach (views.VIEWNAME1Row row in table.Rows) 
      { 
       OneRow(outBuf, format, row); 
      } 
      SerializeToFile(outBuf, FILENAME); 
} 

private void OneRow(StringBuilder outBuf, StringBuilder format,views.VIEWNAME1Row row) 
{ 
    outBuf.AppendFormat(format.ToString(), 
        row.COLUMNNAME1.Trim(), 
        row.IsCOLUMNNAME2Null() ? string.Empty : row.COLUMNNAME2.Trim() 
    ); 
    OutBuf.AppendLine(); 
} 


private StringBuilder BuildFormat() 
{ 
     StringBuilder format = new StringBuilder(); 
     format.Append("{0,-14}"); 
     format.Append("{1,-36}"); 
     return format; 
} 

寫入
第十私人OneRow()函數
和第十私人BuildFormat()函數(一個在Oracle每個視圖之後,代碼味道)。
我知道這可以做得更好,更快,可以更輕鬆地設置新視圖,並且更輕鬆地處理更改。

歡迎任何建議。
謝謝。

回答

2

如果表中列的固定長度與文件中的長度相匹配,則可以一般性地查詢user_tab_columns以查看列大小。然後,您可以從數據庫元數據自動構建您的格式。

+0

@亞當霍克斯:好主意。謝謝+1 – 2009-12-03 06:44:49

1

我認爲,根據Adam對元數據的說法,我會自動在這些視圖之上構建視圖。通過將所有字段轉換爲文本(對日期使用顯式轉換)並將這些字段串聯在一起,並將該單個列轉儲到文本文件,從而使每個視圖成爲單個列。

+0

@David Aldridge:+1。謝謝 – 2009-12-04 06:10:10