【问题标题】:export SQL data to a csv file from ASP.net从 ASP.net 将 SQL 数据导出到 csv 文件
【发布时间】:2019-01-11 13:46:19
【问题描述】:

我在数据库中有一个视图,我想调用该视图并将数据导出到 Csv 文件。我已经使用以下链接提出了一个解决方案,但是我的视图返回了一些包含逗号值的列,因此在打开 csv 时我得到错误 csv 不安全,可能是 sylk 文件等。一旦我在那里打开它CSV 中没有日期。

我使用的链接

https://www.aspsnippets.com/Articles/Export-data-from-SQL-Server-to-CSV-file-in-ASPNet-using-C-and-VBNet.aspx

我正在使用 VS 2017 SQL 和 VB.Net

提前致谢

【问题讨论】:

  • 正确的做法是将字段值用双引号括起来。您可以选择只将包含逗号的引号括起来,但是,如果您要使用引号,您可能应该引用所有内容。正确编写的用于读取 CSV 的代码将处理引用的数据,例如TextFieldParser 类。
  • 使用像 joshclose.github.io/CsvHelper 这样的专用库。为您节省大量工作和可能的错误。

标签: sql asp.net vb.net csv


【解决方案1】:

该代码实际上有点狡猾,因为它明确地将数据中的逗号替换为分号,并且还在每行的末尾添加了一个额外的逗号。以下是从带有引用字段值的DataTable 生成 CSV 数据的简洁方法:

Dim csv = String.Join(Environment.NewLine,
                      myDataTable.AsEnumerable().
                                  Select(Function(row) """" &
                                                       String.Join(""",""",
                                                                   row.ItemArray) &
                                                       """"))

如果您不熟悉 LINQ,这里有一种更传统的方法来做同样的事情:

Dim csv As String

For rowIndex = 0 To myDataTable.Rows.Count - 1
    'Add a line break before all but the first line.
    If rowIndex > 0 Then
        csv &= Environment.NewLine
    End If

    Dim row = myDataTable.Rows(rowIndex)

    'Add a double-quote before the first field value.
    csv &= """"

    For columnIndex = 0 To myDataTable.Columns.Count - 1
        'Add a closing double-quote, a delimiting comma and an opening
        ' Double-quote before all but the first field value.
        If columnIndex > 0 Then
            csv &= ""","""
        End If

        csv &= row(columnIndex).ToString()
    Next

    'Add a double-quote after the last field value.
    csv &= """"
Next

【讨论】:

    猜你喜欢
    • 2014-07-26
    • 2019-10-03
    • 1970-01-01
    • 2021-04-04
    • 2015-09-01
    • 1970-01-01
    • 2010-10-04
    • 2014-01-09
    • 1970-01-01
    相关资源
    最近更新 更多