2016-12-18 126 views
0

我正在使用類變量DataTable dt,並試圖運行兩個SQL查詢並將結果寫入Excel。我沒有錯誤,並且一切正常,除了第二次迭代並寫入Excel,數據表中的頭文件被寫入。數據表未被清除

我所追求的是sheet1從sqlquery1獲取所有信息,然後sheet2從sqlquery2獲取所有信息。現在datawise,它完全按照我的需要工作,但由於某種原因,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

我的理解DataTable.Clear();方法只是清除從DataTable的數據,而DataTable.Columns.Clear();方法將清除出列。

如果我正確地理解你的問題,你正在使用兩次寫入到Excel相同DataTable,寫1具有頭 字段1,字段2,字段3和寫兩個有頭RED1,綠1,藍天航空公司你的工作你所得到的頭
字段1,字段2,字段3,RED1,綠1,藍天航空公司

這就是DataTable.Columns.Clear()方法將發揮作用,因爲它會在第二次寫入之前清除列,並確保與寫寫2一個你只有得到標題
字段1,字段2,字段3
和寫你們兩個ONLY獲得頭
RED1,綠1,藍天航空公司

本質嘗試直接在上面的DataTable.Clear()通話,你必須添加在DataTable.Columns.Clear();,你應該得到的輸出Excel就像你以後一樣。

0

而不是dt.Clear();

dt = new DataTable(); 

應該工作,只要你想。 @user2676140解釋了原因。