DataTable未被清除

时间:2016-12-18 16:36:41

标签: c# datatable

我正在使用类变量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];
    }
 }
}

2 个答案:

答案 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)

而不是dt.Clear();

dt = new DataTable();

应该按你的意愿工作。 @user2676140解释了原因。