Click here to Skip to main content
15,886,110 members
Please Sign up or sign in to vote.
1.33/5 (2 votes)
See more:
I have the following codes; I can export data from database but i want to create multiple csv file per Row of data.

Private Function SetProperties(ByVal Name, ByVal Value) As Object
Dim objServiceManager As Object
Dim objStruct As Object
objServiceManager = CreateObject("com.sun.star.ServiceManager")
objStruct = objServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
objStruct.Name = Name
objStruct.Value = Value
SetProperties = objStruct
End Function
Public Sub ExportCSV()
Dim counter As Integer = 1
While counter <= frmExtract.DataGridView1.RowCount
Dim strFilename As String = "test" & counter & ".csv"
Dim Csv As New Exporter()
Using CsvWriter As New StreamWriter("C:\Documents and Settings\frgits9\Desktop\harold_files\test_folder\" & strFilename)
CsvWriter.Write(Csv.CsvFromDatatable(GetSampleData()))
End Using
counter += 1
cn.Close()
End While
End Sub
--------------------
Public Function GetSampleData() As DataTable
conn()
Dim da As New SqlDataAdapter("spOutBoundProoflist", cn)
Dim ProoflistData As New DataSet()
da.Fill(ProoflistData, "Prooflist")
Return ProoflistData.Tables(0)
cn.Close()
End Function
---------------
Public Function GetSampleData2() As DataTable
conn()
Dim da As New SqlDataAdapter("spgetheader", cn)
Dim Prooflistheader As New DataSet()
da.Fill(Prooflistheader,"Prooflistheader")
Return Prooflistheader.Tables(0)
cn.Close()
End Function
------------------------
Public Class Exporter
Public Sub New()
TextDelimiter = "|"c
HasColumnHeaders = True
End Sub
Public Property TextDelimiter() As Char
Get
Return _TextDelimiter
End Get
Set(ByVal value As Char)
_TextDelimiter = value
End Set
End Property
Public Property HasColumnHeaders() As Boolean
Get
Return _HasColumnHeaders
End Get
Set(ByVal value As Boolean)
_HasColumnHeaders = value
End Set
End Property
Public Function CsvFromDatatable(ByVal InputTable As DataTable) As String
Dim CsvBuilder As New StringBuilder()
If HasColumnHeaders Then
CreateHeader(InputTable, CsvBuilder)
End If
CreateRows(InputTable, CsvBuilder)
Return CsvBuilder.ToString()
End Function
Private Sub CreateRows(ByVal InputTable As DataTable, ByVal CsvBuilder As StringBuilder)
For Each ExportRow As DataRow In InputTable.Rows
For Each ExportColumn As DataColumn In InputTable.Columns
Dim ColumnText As String = ExportRow(ExportColumn.ColumnName).ToString()
CsvBuilder.Append(ColumnText)
CsvBuilder.Append(TextDelimiter)
Next
CsvBuilder.AppendLine()
Next
End Sub
Private Sub CreateHeader(ByVal InputTable As DataTable, ByVal CsvBuilder As StringBuilder)
For Each ExportColumn As DataColumn In InputTable.Columns
Dim ColumnText As String = ExportColumn.ColumnName.ToString()
CsvBuilder.Append(ExportColumn.ColumnName)
CsvBuilder.Append(TextDelimiter)
Next
CsvBuilder.AppendLine()
End Sub
End Class
Posted
Updated 10-May-15 23:30pm
v2
Comments
Ralf Meier 11-May-15 6:49am    
Your Code is not designed as I would do it - so what is your Problem actually ?
virusstorm 11-May-15 13:54pm    
Can you provide an example of the input and the desired output?

1 solution

Here is the code -
C#
foreach (DataTable table in Ds.Tables)
{
    foreach (DataRow row in table.Rows)
    {
        ID_Queue=ID_Queue+1;
        CSVData=String.Concat("Field1,Field2,Field3,Field4,Field5",Environment.NewLine);
        CSVData=String.Concat(CSVData, row[0].ToString(),",", row[1].ToString(),",", row[2].ToString(),",", row[3].ToString(),",", row[4].ToString());
        System.IO.StreamWriter file = new System.IO.StreamWriter(String.Concat("CSV",ID_Queue.ToString(),".csv"));
        file.WriteLine(CSVData);
        file.Close();
    }
}
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900