gpt4 book ai didi

c# - 如何将 C# 中的 2 个 SQL 过程的结果附加到单个 CSV 文件中?

转载 作者:行者123 更新时间:2023-11-30 22:42:56 25 4
gpt4 key购买 nike

我有 2 个 SQL 过程,它们的结果应该从 C# 转储为 CSV 文件。我能够获得第 1 个过程的结果,但对于如何添加第 2 个过程的结果我一无所知。

过程 1. 获取 CSVData

程序 2 。获取标题

下面的 C# 代码成功地将数据从过程 1 ('GetCSVData') 获取到 CSV 中。请帮助我将 Procedure2(“GetHeader”)中的数据整合到“GetCSVData”中,并将其写入同一个 CSV 文件。

我的 C# 代码:

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 条件,我认为你应该没问题。

希望这可以让您了解如何在此方面取得进展。

关于c# - 如何将 C# 中的 2 个 SQL 过程的结果附加到单个 CSV 文件中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30616395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com