2010-06-08 18 views
0

這應該很容易,看起來像我讓自己太困惑了。將各種列類型的數據錶轉換爲字符串數組的更好方法

我從數據庫中得到一個表,數據範圍從varchar到int到Null值。轉換到這一點,我已經有一個製表符分隔文件的廉價和骯髒的方式是這樣的(皺縮保留空間,醜陋保持看齊,與原):

da.Fill(dt) 
' da - DataAdapter ' 
' dt - DataTable ' 
Dim lColumns As Long = dt.Columns.Count 
Dim arrColumns(dt.Columns.Count) As String 
Dim arrData(dt.Columns.Count) As Object 

Dim j As Long = 0 
Dim arrData(dt.Columns.Count) As Object 

For i = 0 To dt.Rows.Count - 1 

    arrData = dt.Rows(i).ItemArray() 

    For j = 0 To arrData.GetUpperBound(0) - 1 
     arrColumns(j) = arrData(j).ToString 
    Next 

    wrtOutput.WriteLine(String.Join(strFieldDelimiter, arrColumns)) 

    Array.Clear(arrColumns, 0, arrColumns.GetLength(0)) 
    Array.Clear(arrData, 0, arrData.GetLength(0)) 
Next 

這不僅是醜陋和低效,它也讓我很緊張。此外,如果可能的話,我希望避免通過表的臭名昭着的雙循環。我真的很感謝一個乾淨而安全的重寫這篇文章的方法。

我喜歡使用的方法here - 特別是試圖解決我遇到的同樣的問題,但是當我直接將其應用於我的案例時,它崩潰了。

回答

0

你應該能夠做到就像這樣:

File.WriteAllText(_ 
    fileName, _ 
    String.Join(_ 
    Environment.NewLine, _ 
    dt.Rows.Cast(Of DataRow)().Select(_ 
     Function(r) String.Join(_ 
     ",", _ 
     r.ItemArray().Select(Function(o) o.ToString()).ToArray() _ 
    ) _ 
    ).ToArray() _ 
) _ 
) 
+0

驚人!不僅這正是我想到的,但無法實現,它從第一次運行實際上起作用。你,先生,現在是我的個人英雄:) – Vlad 2010-06-08 20:38:09

相關問題