2016-12-18 13 views
0

クラス変数DataTable dtを使用していますが、2つのSQLクエリを実行して結果をExcelに書き込もうとしています。私はエラーはありません。すべての作業はうまくいきます。ただし、2回目の繰り返しとExcelへの書き込みを除いて、データテーブルのヘッダーが書き込まれます。DataTableがクリアされない

私が後にしていることは、sheet1がsqlquery1からすべての情報を取得した後、sheet2がsqlquery2からすべての情報を取得することです。今度はdatawise、それは私が必要としているように正確に動作しますが、何らかの理由でsheet2がsqlquery1からヘッダーを取得します。

私の構文では、次の繰り返しがきれいなスレートで始まるようにデータテーブルを適切にクリアしませんか?私の理解TO

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.Columns.Clear();方法が列をクリアする一方DataTable.Clear();方法は、単純にDataTableからデータを消去します。

私はあなたがExcelに2つの書き込みのために同じDataTableを使用して、1を書きされている正しく問題を理解していた場合は、ヘッダーRED1、Green1、ブルーワン航空しかし上を フィールド1、フィールド2、フィールド3のヘッダを有し、2つの書き込みがありますあなたは
フィールド1、フィールド2、フィールド3、RED1、Green1、ブルーワン航空

それは第2の書き込みの前に列をクリアし、書き込みとそれを確保するようDataTable.Columns.Clear()方法が遊びに来る場所ですヘッダを取得WRITE2のためのワークシートあなたはのみヘッダーを取得
フィールド1、フィールド2、フィールド3
と書き込み2のためのあなたONLY取得ヘッダ
RED1、Green1、ブルーワン航空

基本的に、直接あなたが持っているDataTable.Clear()コール上DataTable.Columns.Clear();に追加してみてください、あなたは出力のを取得する必要がありますExcelはあなたが後にいるように。あなたが望むよう代わりにdt.Clear();

dt = new DataTable(); 

関連する問題