Create CSV FILE
Hi Everyone.
I am creating a CSV file with the information from a datatable. The problem is that it generates the file with the columns but without the datatable information. I wanted to know if there is another way to create a CSV file correctly.
Dim strFilePathFull_AllocationDetails As String = strFilePath & "/" & strModelName & "_" & strScenarioName & "_" & strTimeName & "_" & dtAllocationDetails.TableName & ".csv"
Dim xfeFile_AllocationDetails As XFFileEx = dtbSH.DataTableToFile(si, dtAllocationDetails, strFilePathFull_AllocationDetails, Nothing)
Public Function DataTableToFile(ByVal si As SessionInfo, ByVal dt As DataTable, ByVal strFilePath As String, ByVal listColToSkip As List(Of String), ByVal Optional strSeparator As String = ",") As XFFileEx
Dim strDt As String = Me.PrintDataTable(si, dt, strSeparator, 0, False, listColToSkip, """")
Dim bytes() As Byte = System.Text.Encoding.UTF8.GetBytes(strDt)
Dim fileinfo As New XFFileInfo(fileSystemLocation.ApplicationDatabase, strFilePath)
Dim xfFile As New XFFile(fileinfo, String.Empty, bytes)
BRApi.FileSystem.InsertOrUpdateFile(si, xffile)
Dim xfeFile As New XFFileEx(xffile, DataAccessLevel.AllAccess, False)
Return xfeFile
End Function
I suspect your problem might lie in the checks you do with dt.Rows.Count. In a number of situations, that property doesn't work as expected. I would suggest to just loop on rows; if you want to enforce your "limit", keep track of iterations and then break out:
' it's bad practice to mess with stuff passed as parameter, let's wrap it... Dim realLimit as Integer = -1 if limit > 0 then realLimit = limit ' keep an iteration index Dim curr As Integer = 0 ' and we're off For Each row As DataRow In dt.Rows If curr >= realLimit Then Exit For Else curr += 1 End If ' ... turn your row into a string etc etc next
The other den of dragons is that check on column names, which might be case sensitive or fail on minimal differences. At a minimum, I would turn that ColumnName to all lowercase or all uppercase, and ensure the elements in that list have had the same treatment.
Beyond that, I would check that your datatable actually contains data, particularly if it came from some .Clone() operation or similar.
Hope that helps!