(NET) NET (2012)

Serialize Table to CSV with Iterator and Yeld

   1:  Imports System.Data
   2:  Imports System.Data.SqlClient
   3:  Imports System.IO
   4:   
   5:  Public Class DBDumper
   6:      Public Shared Sub DumpTableToFile(ByVal Connection As SqlConnection, ByVal TableName As String, ByVal DestinationFile As String)
   7:          Using CMD = New SqlCommand("select * from " & TableName, Connection)
   8:              Using RDR As SqlDataReader = CMD.ExecuteReader()
   9:                  Using OutFile = File.CreateText(DestinationFile)
  10:                      Dim ColumnNames As String() = GetColumnNames(RDR).ToArray()
  11:                      Dim NumFields As Integer = ColumnNames.Length
  12:                      OutFile.WriteLine(String.Join(",", ColumnNames))
  13:                      If RDR.HasRows Then
  14:                          While RDR.Read()
  15:                              Dim ColumnValues As String() = Enumerable.Range(0, NumFields).
  16:                                  Select(Function(i) DumpOneColumn(i, RDR)).
  17:                                  Select(Function(field) String.Concat("""", field.Replace("""", """"""), """")).ToArray()
  18:                              OutFile.WriteLine(String.Join(",", columnValues))
  19:                          End While
  20:                      End If
  21:                  End Using
  22:              End Using
  23:          End Using
  24:      End Sub
  25:   
  26:      Private Shared Function DumpOneColumn(I As Integer, RDR As SqlDataReader) As String
  27:          If RDR.GetValue(I).GetType.FullName = "System.Byte[]" Then
  28:              Dim Str1 = New StringBuilder()
  29:              For Each One As Byte In RDR.GetValue(I)
  30:                  Str1.Append(One.ToString("x2"))
  31:              Next
  32:              Return Str1.ToString()
  33:          Else
  34:              Return RDR.GetValue(I).ToString()
  35:          End If
  36:      End Function
  37:   
  38:      Private Shared Iterator Function GetColumnNames(ByVal RDR As IDataReader) As IEnumerable(Of String)
  39:          For Each Row As DataRow In RDR.GetSchemaTable().Rows
  40:              Yield CStr(Row("ColumnName"))
  41:          Next
  42:      End Function
  43:  End Class


Comments ( )
Link to this page: //www.vb-net.com/TableDumper/Index.htm
< THANKS ME>