您好:
要用CONSOLE 來批次 產生EXCEL,但因為裡面有類似子查詢得的需求
比如 select * from A where aa=1 , 這一個會需要產稱一個sheet
而 上一個語法,會需要再分別撈出
select * from B where xx=1 -->SHEET2
select * from C where xx=1 -->SHEET3
這樣,以下語法,是否能重複使用同一個connection 來做SalDataAdapter
SqlConnection connection = new SqlConnection();
connection.ConnectionString = con_str;
*/
//-----1.先抓取要 執行的資料
SqlCommand command = new SqlCommand();
command.CommandText = @" XX ";
using (SqlDataAdapter dataAdapter = new SqlDataAdapter(command.CommandText, connection))
{
DataTable dt = new DataTable();
dataAdapter.Fill(dt);
IWorkbook workBook;
ISheet sheet;
if (dt.Rows.Count > 0){
--->
setEXCEL( connection , 其他參數 );
}
}
//--------------------------------------
setEXCEL( SqlConnection connection , 其他參數 ){
再重新撈出 與法填到 sheet
using (SqlDataAdapter dataAdapter2 = new SqlDataAdapter(command.CommandText, connection)){
}//--
}
======================================重新釐清一下 自己想的架構
1.我要用排程來批次產生XLSX ,並寄出
2.所以同一個時間,會撈出多筆資料, 產生多個XLSX ,並寄出 ==>MASTER
2-1.於此同時,若(2)我會在COUNT 明細資料,MASTER 一筆資料有關聯多筆DATIAL
則,會再跑回圈,將DETAIL 產生多個SHEET,加到原來MASTER 的XLSX內
故,想說,在我這次 執行排程時,只有一個CONNECTION
這一個CONNECTION ,可以供 MASTER 及 DETAIL 多次使用
因為我將 要撈資料的 設定值到XLSX的動作,想做在一個FUNCTION 內,重複使用
相對的,connection 也重複使用
謝謝
如果你是想用一次SqlConnection執行多次sql語法撈取可以參考這個,上面的問題描述我看不出有沒有相依XD
您好:
我有重新在描述一下,在麻煩您看一下
順便請教,
using (SqlDataAdapter dataAdapter = new SqlDataAdapter(command.CommandText, connection))
他應該是 結尾,自動關閉dataAdapter ,而不是 connection 吧!
謝謝
如果是你上面貼的做法我沒有看到關閉連線的功能喔,第二個你的描述master跟detail的話通常應該是用left join處理,第三個就是資料撈取時就單獨做好這件事情,最後在寫入資料到excel sheet,在連線資料庫時寫資料你會卡著連線,報表如果30分鐘出來,連線就卡30分鐘...上面的連結有很多寫法可以參考看看
我會覺得沒有必要這麼複雜,單純地將資料撈出,然後直接將資料轉成檔案出來就好,是不是用同一個SQL Connection單純就是看你撈資料的設計,你想要都用同一個SQL Connection當然沒有問題,這反而是比較不需要特別問的問題。
例如 :
SqlConnection connection = new SqlConnection();
connection.ConnectionString = con_str;
DataSet ds = new DataSet();
for(int i;i<n;i++)
{
// ds.Add(GetDataTable("My SQL Code"))
}
ExcelComponent MyExcel = new();
MyExcel.Export(ds);
我的匯出Excel Component(實際使用可以回到上一層看TestProject)我的Github
來
聽不太懂你在問什麼,DataSet可以存多個DataTable,我在自己的Component裡面會自動幫你把DataSet裡面的多個DataTable轉成同一個Excel的多個Sheet。
範例程式碼只是告訴你,同一個Connection要多個查詢只是很簡單的問題,如果你今天有三段SQL要處理,可以不要用For迴圈,直接寫三段SQL把資料各自撈到DataSet裡面阿。
用ds[0]來找?這句話我完全不懂你的意思。
您好:
不好意思,沒有說清楚
比如我今天有三個排程,他會同一時間撈出來
for(int i;i<n;i++)
{
// ds.Add(GetDataTable("My SQL Code"))
}
---排程1 有2段語法
select '排程1-1' -->填到MA
select '排程1-2' -->填到Sheet2
---排程2 有1段語法
select '排程2-1' -->填到MA
---排程3 有3段語法
select '排程3-1' -->填到MA
select '排程3-2' -->填到Sheet2
select '排程3-2' -->填到Sheet3
因為每一段排程,我會產生不同的檔案,用不同的標題,寄給 不同的人
所以會需要 分出 排程1,2,3 的 資料
及不同sheet NAME
所以我就算 前面有排序
101 '排程1-1'
102 '排程1-2'
201 '排程2-1'
301 '排程3-1'
302 '排程3-2'
303 '排程3-2'
但在DATASET 內似乎,無法直接對應 101 '排程1-1' 等
謝謝
DataSet中,可以為各個DataTable去設定TableName,我的寫的Library就是依據TableName自動產生Sheet Name的。
可以參考一下我的寫法,我記得在TestProject裡面我有弄一個"haha"的範例。