将 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',"") + ',';
我正在尝试将数据库 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',"") + ',';