首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

高效能 CSV 檔案產生器:設計與實作全解析

     編輯:關於C語言

前言:從需求出發

將資料庫大量資料匯出為 CSV 檔案,看似簡單,若要兼顧多資料庫支援、程式體積精簡、高效能處理百萬筆資料,則須深思熟慮。本文介紹一款基於 ATL COM 元件的 CSV 產生器,搭配 C# 呼叫,滿足上述所有指標。

核心架構設計

  • 底層:C++ ATL COM 元件,使用 ADO 存取資料庫(支援 Oracle、SQL Server 等)。
  • 上層:C# 或其他解釋性語言呼叫 COM 元件,享受開發效率與效能的雙重優勢。
  • 權衡:作者坦言 ADO 多執行緒支援較弱、智慧指標繁瑣,但為通用性妥協採用。

功能特色一覽

功能說明
多資料庫支援透過 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"

C# 呼叫範例

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。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved