Экспорт в CSV в режиме отладки успешно, но в режиме выполнения не удается - PullRequest
0 голосов
/ 10 июля 2019

Я читаю записи из таблицы SQL Server в набор данных и затем экспортирую их в файл CSV. Когда я делаю это в режиме отладки, все работает нормально. Когда я запускаю его, он экспортирует только одну ячейку с данными дерьма. Так как это приложение ASP.NET, я не уверен, что делаю что-то не так в отношении обратных передач. Кажется, во время выполнения, он не ждет записи файла CSV.

Dim sbldRecordCSV As New StringBuilder

Dim dtHCMTable As DataTable = mdsHCMTable.Tables(0)
Dim intIndex As Integer = 0

'Read the connection-string from web.config
Dim connHCM As New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("connHCM").ConnectionString)

'Read the exported CSV file path from web.config
Dim strCSVpath As String = System.Configuration.ConfigurationManager.AppSettings("CSVpath").ToString

Try
    For intIndex = 0 To mdsHCMTable.Tables(0).Rows.Count - 1
        Dim drHCMTable As DataRow = dtHCMTable.Rows(intIndex)
        For Each field As Object In drHCMTable.ItemArray
            sbldRecordCSV.Append(field.ToString & "|")
        Next
        sbldRecordCSV.Replace("|", vbNewLine, sbldRecordCSV.Length - 1, 1)
    Next

    My.Computer.FileSystem.WriteAllText(strCSVpath.ToString & lstDataTables.SelectedValue.ToString & ".csv", sbldRecordCSV.ToString, False)

1 Ответ

0 голосов
/ 10 июля 2019

После некоторых поисков я понял, что мне нужно изменить код ExportCSV. Измененная процедура выглядит следующим образом:

Защищенная подпрограмма ExportToCSV (mdsHCMTable As DataSet) Dim dt As DataTable = mdsHCMTable.Tables (0)

    'Read the exported CSV file path from web.config
    Dim strCSVpath As String = System.Configuration.ConfigurationManager.AppSettings("CSVpath").ToString

    Response.Clear()
    Response.Buffer = True
    Response.AddHeader("content-disposition", "attachment;filename=" & lstDataTables.SelectedValue.ToString & ".csv")
    Response.Charset = ""
    Response.ContentType = "application/text"

    Dim sb As New StringBuilder()
    For k As Integer = 0 To dt.Columns.Count - 1
        'add separator
        sb.Append(dt.Columns(k).ColumnName + "|"c)
    Next
    'append new line
    sb.Append(vbCr & vbLf)
    For i As Integer = 0 To dt.Rows.Count - 1
        For k As Integer = 0 To dt.Columns.Count - 1
            'add separator
            sb.Append(dt.Rows(i)(k).ToString().Replace(",", "|") + "|"c)
        Next
        'append new line
        sb.Append(vbCr & vbLf)
    Next

    Response.Clear()
    Response.BufferOutput = False
    Response.Output.Write(sb.ToString())
    Response.Flush()
End Sub

Это решение сработало для меня. Я надеюсь, что это может быть полезно для других.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...