我正在使用类变量DataTable dt
并尝试运行两个SQL查询并将结果写入Excel。我没有错误,一切正常,除了第二次迭代并写入Excel,数据表中的标题都被写入。
我所追求的是sheet1从sqlquery1获取所有信息,然后sheet2从sqlquery2获取所有信息。现在数据方面,它完全按照我的需要工作,但是由于某种原因,sheet2从sqlquery1获取头文件。
在我的语法中,我没有正确清除数据表,以便下一次迭代以干净的平板开始吗?
public static void DoThis()
{
string sqlsyntax = null;
if (userid == "Red")
{
sqlsyntax = SQLQuery1 (just not showing syntax)
QuerySQLTable(sqlsyntax);
WriteDataToExcel(dt);
}
if (userid == "Pink")
{
sqlsyntax = SQLQuery2 (just not showing syntax)
QuerySQLTable(sqlsyntax);
WriteDataToExcel(dt);
}
}
public static void QuerySQLTable(string sqlsyntax)
{
using (conn = new SqlConnection(SqlConnection))
{
//Clearing datatable if not null
dt.Clear();
da = new SqlDataAdapter(sqlsyntax, conn);
conn.Open();
da.Fill(dt);
conn.Close();
da.Dispose();
}
}
private static void WriteDataToExcel(DataTable dt)
{
int i = 0;
int j = 0;
for (i = 0; i < dt.Columns.Count; i++)
{
xlWorkSheet.Cells[1, i + 1] = dt.Columns[i].ColumnName;
}
for (i = 0; i < dt.Rows.Count; i++)
{
for (j = 0; j < dt.Columns.Count; j++)
{
xlWorkSheet.Cells[i + 2, j + 1] = dt.Rows[i][j];
}
}
}
答案 0 :(得分:0)
据我了解,DataTable.Clear();
方法只是清除DataTable
中的数据,而DataTable.Columns.Clear();
方法会清除列。
如果我正确理解您的问题,您使用相同的DataTable
进行两次写入Excel,而写入1则具有标题
Field1,Field2,Field3和write two在您的工作表上有标题Red1,Green1,Blue1 BUT ,用于write2您获得标题
Field1,Field2,Field3,Red1,Green1,Blue1
这是DataTable.Columns.Clear()
方法发挥作用的地方,因为它会在第二次写入之前清除列,并确保通过写入 ONLY 获取标题
Field1,Field2,Field3
为了写两个你 ONLY 得到标题
Red1,Green1,Blue1
基本上尝试在您DataTable.Columns.Clear();
调用的正上方添加DataTable.Clear()
,您应该像在以后一样在Excel中获取输出。
答案 1 :(得分:0)