C# 将日期从mysql表导出到.CSV
我试图将MySQL表导出到.csv,但有一些东西不起作用,我无法找到它是什么。我首先尝试将日期保存到数据表中,然后使用以下功能将其导出到.csv:C# 将日期从mysql表导出到.CSV,c#,mysql,csv,export,C#,Mysql,Csv,Export,我试图将MySQL表导出到.csv,但有一些东西不起作用,我无法找到它是什么。我首先尝试将日期保存到数据表中,然后使用以下功能将其导出到.csv: public void CreateCSVFile(DataTable dtDataTablesList, string strFilePath) { // Create the CSV file to which grid data will be exported. StreamWriter sw = ne
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();
}
尝试使用以下代码:
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公开的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将所有内容填充到数据表中。之后,您可以使用数据创建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());
MySqlDataAdapter sda=new MySqlDataAdapter();
sda.SelectCommand=cmdDataBase;
DataTable数据=新DataTable();
sda.填写(数据);
BindingSource aSource=新的BindingSource();
aSource.DataSource=数据;
dataGridView1.DataSource=aSource;
sda.更新(数据);
StringBuilder sb=新的StringBuilder();
string[]columnNames=data.Columns.Cast()。
选择(column=>column.ColumnName)。
ToArray();
sb.AppendLine(string.Join(“,”,columnNames));
foreach(data.Rows中的DataRow行)
{
string[]fields=row.ItemArray.Select(field=>field.ToString())。
ToArray();
sb.AppendLine(string.Join(“,”字段));
}
writealText(“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>
下载表格
组件
受保护的字符串生成()
{
字符串sql=“”;
字符串行=”;
字符串datatable=“”;
int cols=0;
字符串hdr=“”;
如果(ddlTable.SelectedValue==“组件”)
{
sql=“从组件中选择*”;
hdr=“id、类别id、产品代码、供应商、说明、价格、直径、额外信息\r\n”;
}
datatable=hdr.Replace(',','\t');
使用(var connection=DBController.CreateOpenConnection())
{
MySqlCommand cmd=新的MySqlCommand(sql,连接);
MySqlDataReader=cmd.ExecuteReader();
if(dataReader.HasRows)
{
while(dataReader.Read())
{
cols=dataReader.FieldCount;
行=”;
for(int i=0;i0)行+=“\t”;//分隔
if(数据读取器[i]!=null)
{
row=row+dataReader[i].ToString();
}
其他的
{
行=行+空;
}
}
行=行+“\r\n”;
datatable=datatable+行;
}
}
}
返回数据表;
}
受保护的void btnDownload\u单击(对象发送方,事件参数e)
{
字符串数据=生成();
string fileName=string.Format(“{0}-{1}.csv”,ddlTable.SelectedValue,DateTime.Now.ToString(“yyyy-MMM-dd-HHmmss”);
Response.Clear();
Response.ContentType=“text/csv”;
Response.AddHeader(“内容处置”、“文件名=“+filename”);
//在此处将字符串数据写入Response.OutputStream
响应。写入(数据);
Response.End();
}
受保护的void b显示\单击(对象发送者,事件参数e)
{
字符串数据=生成();
divOutput.InnerHtml=“+数据+”;
}
是的,我已经知道这个命令,但问题是文件应该保存在本地,而不是MySQL服务器上。这就是为什么我想将所有数据添加到DataTable中并将其导出到.CSV。使用OUTFILE
然后从服务器读取输出文件不是更容易吗?显然是这样,但是MySQL服务器没有权限在网络上的其他PC上写入文件。所有数据都需要保存在某个位置,并由.exe写入,而不是由服务器本身写入。请使用您使用的语言进行标记。我的第一个猜测是您的连接有问题。你能确认连接正常吗?连接正常。我得到了另一个脚本,它使用了完全相同的脚本和连接细节。perfectley一切正常。我不明白的是,要么值为“SELET*from mytable”,要么变量值为“{MySql.Data.MySqlClient.MySqlCommand}”。请看这里:
<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>";
}