将 MySQL table 导出到 csv,一行分成多行

Exporting MySQL table to csv one row divided in to multiple rows

我正在尝试将数据库 table 导出到 csv 文件。然而,文件得到转换和下载,但单行数据被分成多行,这会产生问题。以下是我从正在使用的 aspsnippets 中找到的代码。我拥有的包含 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();
            }
        }
    }
}

快照

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

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

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

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

类似的方法也可以。 (它很长但有效)

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