【问题标题】:Exporting MySQL table to csv one row divided in to multiple rows将 MySQL 表导出为 csv 一行分为多行
【发布时间】:2016-10-06 04:47:04
【问题描述】:

我正在尝试将数据库表导出到 csv 文件。但是文件被转换和下载,但是一个单行数据被分成许多行,这会产生问题。以下是我从我正在使用的 aspsn-ps 中找到的代码。我拥有的包含 HTML 标记的记录有什么问题吗?

string constr = ConfigurationManager.ConnectionStrings("conio").ConnectionString;
using (MySqlConnection con = new MySqlConnection(constr)) {
    using (MySqlCommand cmd = new MySqlCommand("SELECT * FROM products")) {
        using (MySqlDataAdapter sda = new MySqlDataAdapter()) {
            cmd.Connection = con;
            sda.SelectCommand = cmd;
            using (DataTable dt = new DataTable()) {
                sda.Fill(dt);

                //Build the CSV file data as a Comma separated string.
                string csv = string.Empty;

                foreach (DataColumn column in dt.Columns) {
                    //Add the Header row for CSV file.
                    csv += column.ColumnName + ',';
                }

                //Add new line.
                csv += Constants.vbCr + Constants.vbLf;

                foreach (DataRow row in dt.Rows) {
                    foreach (DataColumn column in dt.Columns) {
                        //Add the Data rows.
                        csv += row(column.ColumnName).ToString().Replace(",", ";") + ',';
                    }

                    //Add new line.
                    csv += Constants.vbCr + Constants.vbLf;
                }

                //Download the CSV file.
                Response.Clear();
                Response.Buffer = true;
                Response.AddHeader("content-disposition", "attachment;filename=Products.csv");
                Response.Charset = "";
                Response.ContentType = "application/text";
                Response.Output.Write(csv);
                Response.Flush();
                Response.End();
            }
        }
    }
}

快照

突出显示的是每行的开头。在创建的行之间,应该在同一行中突出显示。

【问题讨论】:

  • 正如你所提到的;这是因为 HTML 标签。您将不得不使用文本限定符。说“
  • @Anand 你能发布解决方案吗?谢谢
  • 尝试在每个单元格值周围添加双引号。让我知道这是否有帮助

标签: c# asp.net export-to-csv


【解决方案1】:
csv += "\"" + row(column.ColumnName).ToString().Replace(",", ";") + "\"" + ',';

在您的代码中更改此行,如果有帮助,请告诉我。

如果有特殊字符,它们应该放在双引号内。

所以,你的行应该如下所示

id,name,htmltags
"1","abcd","<td>values</td>"

你的代码应该是这样的

For Each row As DataRow In dt.Rows 
For Each column As DataColumn In dt.Columns 
'Add the Data rows. 
Dim str As String 
str = row(column.ColumnName).ToString() 
str = Replace(str, """", """""") 
csv += """" & str & """" & "," 
Next 

'Add new line. 
csv += vbCr & vbLf 
Next

【讨论】:

  • 嗨,阿南德。您的解决方案几乎对我有用。仍然没有什么问题,它发现标签段落

    它再次打破了这条线。我能做些什么呢?

  • @SUN 能否请您粘贴单行(可能被屏蔽)进行测试?因为对我来说它甚至可以使用

    标签

  • 有引用吗?
  • 基本上,我们在这里所说的是“双引号里面有什么,把它当作一个单元格值”。如果单元格值中有双引号,则也必须转义它们。所以问题不在于标签

    ;这是因为它周围有双引号。

  • 是的。双引号(“)出现在行中断的地方。
【解决方案2】:

您需要将'\n', '\t' 和多余的空格替换为"",就像使用 , 和 ;使用 replace() 或 RegEx,然后将其添加到文件中。

在 C# 中,使用 Environment.NewLine 进行输出是安全的。但是当您从数据库中提取时,您需要检查\n\t,因为大多数数据库都使用它们作为分隔符。

类似的方法也有效。 (冗长但有效)

csv += row(column.ColumnName).ToString().Replace(",", ";").Replace('\n',"").Replace('\t',"") + ',';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多