将包含各种列类型的数据表转换为字符串数组的更好方法

时间:2010-06-08 19:47:47

标签: vb.net parsing

这应该是一个简单的,看起来我太困惑了。

我从数据库中获取一个表,数据范围从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的方法 - 尤其是试图解决我遇到的同样问题,但是当我直接将它应用到我的案例时,它会崩溃。

1 个答案:

答案 0 :(得分: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() _
  ) _
)