none
datatable寫入txt檔錯誤 RRS feed

  • 問題

  • hi 達人們

    請問關於datatable寫入txt檔,若有dbnull時會出錯,要怎麼解決?

     

            Dim dt As DataTable
            Dim Sql As String
            Sql = "SELECT * FROM  *** "
            dt = ***.oledbGetDataTable(Connstr, Sql)

            'Export data to file
            Dim delim As String
            delim = ""
            Dim file As String = "..\..\..\OutPutFile\out.txt"
            Dim sw As New IO.StreamWriter(file)
            'Loop through each row and output it to a text file
            '    separating each field by a comma  row.ItemArray
            For Each row As DataRow In dt.Rows
                sw.WriteLine(Join(row.ItemArray, " ")) 
            Next

            'cleanup
            sw.Close()
            sw.Dispose()
            dt.Dispose()

            都填滿時沒錯,但有dbnull時,錯掉  引數 'SourceArray' 無法轉換為型別 'String'。

     

    謝謝您!!

     

     

     

    2008年4月29日 上午 10:29

解答

  • 你那根本是參數擺錯吧?

     

    Code Snippet
    sw.WriteLine(Join(" ", row.ItemArray))

     

     

    至於 DBNull 的問題,你可能要自己先過濾一次,把 DBNull 轉換成空字串才行。

    2008年4月29日 上午 10:37
    版主
  • 小朱寫的是 String.Join 的用法。

     

    樓主寫的是 VBNET 專有的 Join 函數用法。應該是 Microsoft.VisualBasic.Strings.Join 吧...

    2008年4月29日 下午 01:45
    版主

所有回覆

  • 你那根本是參數擺錯吧?

     

    Code Snippet
    sw.WriteLine(Join(" ", row.ItemArray))

     

     

    至於 DBNull 的問題,你可能要自己先過濾一次,把 DBNull 轉換成空字串才行。

    2008年4月29日 上午 10:37
    版主
  •  

    小朱

    沒錯呀!!

    2008年4月29日 上午 10:43
  • 我看函式定義是:

     

    Code Snippet
    Public Shared Function Join ( _
     separator As String, _
     value As String() _
    ) As String

     

     

    分隔字元在前面,後面那個是字串陣列。

    還是那個 Join 是你自己寫的?

    2008年4月29日 上午 10:52
    版主
  • 小朱寫的是 String.Join 的用法。

     

    樓主寫的是 VBNET 專有的 Join 函數用法。應該是 Microsoft.VisualBasic.Strings.Join 吧...

    2008年4月29日 下午 01:45
    版主
  •  

    謝謝兩位的指導!!

    已解決!! 片段如下 :

            For Each row As DataRow In dt.Rows
                For i As Integer = 0 To row.ItemArray.Length - 1
                    If row(i) Is System.DBNull.Value Then
                        row(i) = ""
                    End If
                Next i
                sw.WriteLine(Join(row.ItemArray, " "))
            Next

     

     

     

    2008年4月30日 上午 03:43