这应该是一个简单的,看起来我太困惑了。
我从数据库中获取一个表,数据范围从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 :(得分: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() _
) _
)