2010-06-08 17 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

相关问题