2010-11-03 48 views
0

我從SQL Server中取出報告不是遊標的粉絲我在我的代碼後面的文件中處理該表服務器端。所以我把這個報告稱爲地址標籤報告,我的客戶希望每個人都有X個標籤。所以我編碼這個功能:複製數據表中的錶行會導致Excel輸出報表中的數據類型不同?

Private Function ProcessX(ByVal dt As DataTable, ByVal X As Integer) As DataTable 
    Dim dtProcessed As DataTable = dt.Copy 

    dtProcessed.Clear() 

    For Each dr As DataRow In dt.Rows 
     For i As Integer = 0 To X - 1 
      Dim drHolder As DataRow = dtProcessed.NewRow 
      drHolder.ItemArray = dr.ItemArray 
      dtProcessed.Rows.Add(drHolder) 
     Next 
    Next 

    Return dtProcessed 
End Function 

哪個功能工作得很漂亮,它的處理速度比光盤中的光標快得多。這個特定報告的問題是,當我將它導出爲ex​​cel時,它將從以0開始的郵政編碼的前0開始。我也有zip + 4和國際郵政編碼,這些郵政編碼在相同的拉動下返回。通常情況下,我只是把它寫成一個標準的excel故障,關於它如何處理前導0,但是當我不通過上述函數處理報告時,Excel並沒有切斷我的前導0。

我遍歷了該函數,所涉及列的數據類型在進程前後相同,並與原始表的數據類型相匹配。我能想到的唯一可能是因爲我傳遞的是數據對象ByVal而不是ByRef?我不知道我已經嘗試了幾乎所有的東西,包括按值複製每一行,並手工重新創建數據表。似乎沒有什麼改變結果。

回答

0

我發現了一個解決方案,我不滿意它,但它的工作原理。

SELECT [ZipCode] = ' ' + ISNULL(TABLE.ZipCode,'') 
FROM TABLE 
... 

無論是在線報告,並擅長把它解釋爲一個空的空間,它與我的格式不亂。

相關問題