如何将c#中的两个SQL过程的结果附加到单个CSV文件中
本文关键字:结果 过程 单个 文件 SQL CSV 两个 | 更新日期: 2023-09-27 17:53:04
我在SQL中有2个过程,它们的结果应该从c#转储为CSV文件。我能够得到1个过程的结果,但我不知道如何去添加第二个过程的结果。
过程1。GetCSVData
步骤2。GetHeader
下面的c#代码成功地从过程1 ('GetCSVData')中获取数据到CSV中。请帮我将procdure2("GetHeader")中的数据整合到"GetCSVData"中,并将其写入相同的CSV文件。
My c# code:
public string GetCSVData(string SId, string TotalRow)
{ try
{
Sql v = new Sql("Block_Rpt_CSV");
v.Add("SId",SId);
v.Add("TotalRow",TotalRow);
v.Run();
DataTable dt=new DataTable();
dt.Clear();
dt.Columns.Add("a", typeof(String));
dt.Columns.Add("b", typeof(String));
dt.Columns.Add("c", typeof(String));
foreach (System.Data.DataRow item in v.Results.Rows)
{
dt.Rows.Add(item.GetString("Name"),item.GetString("Id"),
item.GetString("Class")
}
dt.AcceptChanges();
string csvData = DataTableToCSVFile(dt, SId, TotalRow);
System.Web.HttpResponse response = System.Web.HttpContext.Current.Response;
response.ClearContent();
response.Clear();
string filename = "CsvView.csv";
response.ContentType = "text/csv";
response.AddHeader("Content-Disposition", "attachment;filename='"" + filename + "'";");
HttpContext.Current.Response.AddHeader("Content-Length", csvData.Length.ToString());
response.Write(csvData);
response.Flush();
response.End();
AjaxBuilder r = new AjaxBuilder();
r.Add("GetCSVData", "Success");
return r.ToString();
}
catch (Exception e)
{
AjaxBuilder r = new AjaxBuilder();
r.Add("GetCSVData", "Failed");
r.Add("Exception_Message", e.Message);
r.Add("Exception_StackTrace", e.StackTrace);
return r.ToString();
}
}
@Harvey:抱歉直到现在才看到你的帖子。谢谢你的代码。然而,在我看到你的之前,我一直在努力解决这个问题。你能看一下我的代码,看看我能不能让它工作吗?否则我就用你的代码。到目前为止,我的所有20列标题都显示在我的CSV中,显然每个列中的数据都不匹配。
private string DataTableToCSVFile(DataTable dt, string SId, string TotalRow)
{ DataTable dtExcel = dt;
StringBuilder sb = new StringBuilder();
sb.Append("CSV Data");
sb.Append("'n");
foreach (DataColumn column in dtExcel.Columns)
{
sb.Append(column.ColumnName + ",");
}
sb.Append("'n");
foreach (DataRow row in dtExcel.Rows)
{
for (int i = 0; i < dtExcel.Columns.Count; i++)
{
sb.Append(row[i].ToString() + ",");
}
sb.Append("'n");
}
return sb.ToString();
}
您可以将DataTable
对象设置为全局对象,然后在两个函数中使用相同的对象。
先运行任意一个,然后将列和记录插入到id中。然后,运行第二个,并相应地将列和记录插入其中。
您还可以为每个函数使用两个单独的DataTable
对象,然后在收到两个函数的结果后合并它们。
另外,请确保在调用两个函数之后的最后编写实际的CSV生成代码。
更新:
下面是如何在CSV文件中写入数据表值的方法:
string csvPath = System.Web.Hosting.HostingEnvironment.MapPath("pathToCSV.csv");
StreamWriter sw = new StreamWriter(csvPath, false);
if (dtDataTablesList.Rows.Count > 0)
{
//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);
}
}
现在在这里,因为你想分割一些列,先写它们,然后写其他的,你将不得不在这里修改for
条件,我认为这应该对你很好。
希望这能给你一个关于如何在这方面取得进展的想法。