將資料庫大量資料匯出為 CSV 檔案,看似簡單,若要兼顧多資料庫支援、程式體積精簡、高效能處理百萬筆資料,則須深思熟慮。本文介紹一款基於 ATL COM 元件的 CSV 產生器,搭配 C# 呼叫,滿足上述所有指標。
| 功能 | 說明 |
|---|---|
| 多資料庫支援 | 透過 ADO 統一介面存取異構資料庫 |
| 標準 CSV 格式 | 正確處理欄位分隔符、換行符、雙引號逸出 |
| 多表/自訂 SQL 匯出 | 支援指定多個資料表或任意 SQL 查詢結果 |
| 彈性設定 | 可自訂副檔名、欄位分隔符、列分隔符、是否含標題列 |
| 大資料分批處理 | 支援指定起始位置與步長,控制記憶體佔用 |
BlindFetchCSVData:依資料表名稱批次匯出,檔名同表名FetchCsvData:依 SQL 查詢將資料讀入快取WriteToCSV:將快取資料寫入 CSV 檔GetConnectionStringFromCfg:從設定檔讀取連線字串FetchAndWriteCsv:依 SQL 直接查詢並寫入檔案ConnectionString、FileSuffix、FieldsDelimiter、RecordsDelimiter、Header、NumOfTables、TableName隨附 ATLCSV.dll 與 ATLV6Client.exe。先註冊元件:
regsvr32 /c atlcsv.dll
常用指令範例:
# 匯出單一資料表
atlv6client user=system/Helpdesk1@test table="tab"
# 自訂 SQL 查詢
atlv6client user=system/Helpdesk1@test sql="select * from tab"
# 百萬筆大表分批處理(每批 5 萬筆)
atlv6client user=system/Helpdesk1@test table="vehicle" opt="2|1|50000"
private void Form1_Load(object sender, EventArgs e)
{
ATLCSVLib.ComCsvSrvClass csv = new ComCsvSrvClass();
csv.ConnectionString = "dsn=test;user=system;pwd=Helpdesk1;";
csv.NumOfTables = 2;
csv.set_bstrTableName(0, "vehicle");
csv.set_bstrTableName(1, "van");
csv.OnConnectDbOk += (s, args) => MessageBox.Show("連線成功");
csv.OnDataFechFinished += (s, args) => MessageBox.Show("讀取完成");
csv.OnWriteCSV += (s, args) => MessageBox.Show("寫入完成");
csv.BlindFetchCSVData();
}
來源:「靜侯佳音」博客,原文連結:https://thomas.blog.51cto.com/177910/29358。元件原始碼請聯繫作者 thomas.x.wang@gmail.com。