[英]Exporting dates from mysql table to .CSV
我試圖將 MySQL 表導出到 .csv,但有些東西不起作用,我無法找出它是什么。 我首先嘗試將日期保存到 DataTable 中,然后使用此函數將它們導出到 .csv:
public void CreateCSVFile(DataTable dtDataTablesList, string strFilePath)
{
// Create the CSV file to which grid data will be exported.
StreamWriter sw = new StreamWriter(strFilePath, false);
//First we will write the headers.
int iColCount = dtDataTablesList.Columns.Count;
for (int i = 0; i < iColCount; i++)
{
sw.Write(dtDataTablesList.Columns[i]);
if (i < iColCount - 1)
{
sw.Write("", "");
}
}
sw.Write(sw.NewLine);
// Now write all the rows.
foreach (DataRow dr in dtDataTablesList.Rows)
{
for (int i = 0; i < iColCount; i++)
{
if (!Convert.IsDBNull(dr[i]))
{
sw.Write(dr[i].ToString());
}
if (i < iColCount - 1)
{
sw.Write("", "");
}
}
sw.Write(sw.NewLine);
}
sw.Close();
}
問題是:它通過 sda.Fill(data) 給出這個停止:
- 連接 {MySql.Data.MySqlClient.MySqlConnection} MySql.Data.MySqlClient.MySqlConnection
- sSql {MySql.Data.MySqlClient.MySqlCommand} MySql.Data.MySqlClient.MySqlCommand
- sda {MySql.Data.MySqlClient.MySqlDataAdapter} MySql.Data.MySqlClient.MySqlDataAdapter
- 數據 {} System.Data.DataTable
腳本:
MySqlConnection connection = CDBAccess.GetCon;
MySqlCommand sSql = new MySqlCommand("SELECT * from mytable;", connection);
MySqlDataAdapter sda = new MySqlDataAdapter();
sda.SelectCommand = sSql;
DataTable data = new DataTable();
sda.Fill(data);
String path = @"C:\Users\Public\Documents\MyDocument";
CreateCSVFile(data, path);
嘗試使用此代碼:
MySqlConnection = CDBAccess.GetCon;
string queryString = "SELECT * from mytable;";
SqlDataAdapter adapter = new SqlDataAdapter(queryString, connection);
DataSet ds = new DataSet();
adapter.Fill(ds, "mytable");
DataTable data = ds.Tables[0];
String path = @"C:\Users\Public\Documents\MyDocument";
CreateCSVFile(data, path);
但是,通常在 Java 代碼中迭代實際表既不必要又容易出錯。 相反,您應該利用 MySQL 公開的SELECT ... INTO OUTFILE
構造。 通過這種方式,您可以讓 MySQL 完成將數據編組到 CSV 文件中的繁重工作。
只需從您的 Java 代碼中將以下作為原始查詢執行,您就可以開始使用了:
SELECT *
INTO OUTFILE 'C:/Users/Public/Documents/MyDocument/output.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM mytable
好的,我發現了問題。 首先,您需要通過使用 MySqlDataAdapter 填充來將所有內容放入 DataTable。 之后,您可以使用數據創建 StringBuilder 並使用函數創建 .CSV 日期。 它看起來像這樣:
MySqlDataAdapter sda = new MySqlDataAdapter();
sda.SelectCommand = cmdDataBase;
DataTable data = new DataTable();
sda.Fill(data);
BindingSource aSource = new BindingSource();
aSource.DataSource = data;
dataGridView1.DataSource = aSource;
sda.Update(data);
StringBuilder sb = new StringBuilder();
string[] columnNames = data.Columns.Cast<DataColumn>().
Select(column => column.ColumnName).
ToArray();
sb.AppendLine(string.Join(",", columnNames));
foreach (DataRow row in data.Rows)
{
string[] fields = row.ItemArray.Select(field => field.ToString()).
ToArray();
sb.AppendLine(string.Join(",", fields));
}
File.WriteAllText("test.csv", sb.ToString());
謝謝你們的幫助!
此代碼段可能對人們有所幫助 - 從 mysql 表生成一個制表符分隔的字符串,然后顯示或下載。
<div >
<div style="float:left; margin-left: 20px"> Table to download
<asp:DropDownList ID="ddlTable" runat="server">
<asp:ListItem Value="components">components</asp:ListItem>
</asp:DropDownList></div>
<div style="float:left; margin-left: 20px; margin-top: 5px"><asp:Button ID="btnShow" class="button-main primary-btn" runat="server" Visible="true" Text="Show" OnClick="btnShow_Click" /></div>
<div style="float:left; margin-left: 20px; margin-top: 5px"><asp:Button ID="btnDownload" class="button-main primary-btn" runat="server" Visible="true" Text="Download" OnClick="btnDownload_Click" /></div>
</div>
<div style="clear: both"></div>
<div runat="server" id="divOutput"></div>
protected string generate()
{
string sql = "";
string row = "";
string datatable = "";
int cols = 0;
string hdr = "";
if (ddlTable.SelectedValue == "components")
{
sql = "SELECT * from components";
hdr = "id,category_id,product_code,supplier,description,price,diameter,extra_info\r\n";
}
datatable = hdr.Replace(',','\t');
using (var connection = DBController.CreateOpenConnection())
{
MySqlCommand cmd = new MySqlCommand(sql, connection);
MySqlDataReader dataReader = cmd.ExecuteReader();
if (dataReader.HasRows)
{
while (dataReader.Read())
{
cols = dataReader.FieldCount;
row = "";
for (int i = 0; i < cols; i++)
{
if (i > 0) row += "\t"; // <TAB> separated
if (dataReader[i] != null)
{
row = row + dataReader[i].ToString();
}
else
{
row = row + "NULL";
}
}
row = row + "\r\n";
datatable = datatable + row;
}
}
}
return datatable;
}
protected void btnDownload_Click(object sender, EventArgs e)
{
string data = generate();
string fileName = String.Format("{0}-{1}.csv", ddlTable.SelectedValue, DateTime.Now.ToString("yyyy-MMM-dd-HHmmss"));
Response.Clear();
Response.ContentType = "text/csv";
Response.AddHeader("content-disposition", "filename=" + fileName);
// write string data to Response.OutputStream here
Response.Write(data);
Response.End();
}
protected void btnShow_Click(object sender, EventArgs e)
{
string data = generate();
divOutput.InnerHtml = "<pre>" +data + "</pre>";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.