日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

快速的CSV文件生成器

發(fā)布時間:2023/12/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 快速的CSV文件生成器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
介紹
在某些應(yīng)用程序中,往往需要將數(shù)據(jù)庫表中的數(shù)據(jù)取出來存為CSV文件。看起來是很容易的一件事情,但是如果要做到靈活,而且要在取大數(shù)據(jù)量的表時保證足夠的性能,卻需要認(rèn)真考慮。本CSV文件生成器的設(shè)計(jì)考慮滿足以下指標(biāo):
1、支持多種不同的數(shù)據(jù)庫,如Oracle,SQL Server等
2、程序尺寸要小
3、足夠的性能 程序的設(shè)計(jì)
基本的思路是采用C++通過ATL作出一個COM組件,然后用解釋性語言如C#來調(diào)用。數(shù)據(jù)庫訪問采用ADO來實(shí)現(xiàn),從本人的經(jīng)驗(yàn)來說,我是不太愿意使用ADO的,雖然它很通用各種數(shù)據(jù)庫都可以訪問,微軟也很推崇,但是它對多線程應(yīng)用支持的卻很差,而且一堆繁瑣的智能指針,能把人給扎死。但是考慮到其通用性,而且現(xiàn)在好像比較時髦,還是勉為其難的采用了ADO. CSV文件生成器說明
1. 支持不同數(shù)據(jù)庫訪問
2. 滿足CSV文件格式的要求
3. 能支持指定多個表的CSV文件生成
4. 支持SQL語句的CSV文件生成
5. 可設(shè)置文件后綴、分隔符等
方法描述
Methods<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Description

BlindFetchCSVData

Fetch data from one or multiple tables and writes to CSV files. File name has same name as table name

FetchCsvData

Fetch data into cache specified by a SQL

WriteToCSV

Write Cache Data into a CSV file.

GetConnectionStringFromCfg

Get DB connection info from a profile file

FetchAndWriteCsv

Fetch data specified by a SQL and write to CSV file

屬性描述
Properties

Description

ConnectionString

DB connection string.

FileSuffix

File suffix.default is csv.

FieldsDelimiter

Delimiter between fields.

RecordsDelimiter

Delimiter between rows.

Header

Specify header is required or not. default is required.

NumOfTables

Number of tables to be queried

TableName

Table name to be queried

? ? ? ? ? ? ? ? ? ? ? 怎樣實(shí)驗(yàn)CSV文件生成器
在提供的可執(zhí)行文件包中包含了兩個文件一個是ATLCSV.dll,一個是ATLV6Client.exe, 先用如下命令要注冊一下組件
D:\> regsvr32 /c atlcsv.dll
然后敲一下atlv6client,看一下程序的使用說明,
D:\>atlv6client
Usage:
??????? atlv6client user=... table=... sql=... field=... row=... suffix=...
(@) Copyright Thomas WANG 2007, all rights reserved.
Parameters:
???????
user=username/password@tnsname.mandatory parameter
??????? table=table1|table2|...|tablen.mandatory parameter if not specify sql
??????? sql=SQL statement.mandatory parameter if not specify table
??????? opt=nMode|nStart|nDelta start position and Delta.optional.nMode can
???????? be 1,2or3. 1:default value 2:segmentation operations on a table
??????? 3:fetch to cache and write.if say 2, also speficy nStart,nDelta.
??????? field=seperator string between fields. default is ","
??????? row=seperator string between rows. default is "\n"
??????? suffix=file suffix. default is csv
??????? Notes: No space adjacent to =
這個程序是一個VC++ 6.0寫的一個控制臺程序,在正式運(yùn)行前保證你已經(jīng)有了一個數(shù)據(jù)源。例如我機(jī)器上有一個ODBC數(shù)據(jù)源TEST,我想取數(shù)據(jù)庫中TAB這個表,可用如下命令:
D:\> atlv6client user=system/Helpdesk1@test table="tab"
Parsing DB info
Connect to DB ...
Write CSV file spent: 0:2
Fetch Data and Write ...
Write CSV file spent: 0:1
Finished
在目錄下,會生成一個以表名命名的CSV文件。以上這種指定表主要用于在有很多表需要導(dǎo)出的場合或需要許多控制的時候使用。也可以用如下命令完成以上的功能
D:\>atlv6client user=system/Helpdesk1@test sql="select * from tab"
Parsing DB info
Connect to DB ...
Write CSV file spent: 0:0
Fetch DB ...
Write select * from tab to file
Write CSV file spent: 0:0
Finished
當(dāng)你在導(dǎo)出一個大表時,如這個表有一百萬條記錄,你可以用以下命令:
D:\> atlv6client user=system/Helpdesk1@test table="vehicle" opt="2|1|50000"
Parsing DB info
Connect to DB ...
Write CSV file spent: 0:1
Fetch Data and Write ...
讓它以5萬條步長處理數(shù)據(jù)。這樣機(jī)器的CPU內(nèi)存占用也不會那么多。 如何編寫C#客戶端 以上提供的客戶端是C++寫的,如果你想在C#里調(diào)用那就太方便不過了,首先,在增加引用菜單里加入COM組件
然后增加如下代碼即可 ? private void Form1_Load(object sender, EventArgs e)
??????? {
??????????? ATLCSVLib.ComCsvSrvClass bb = new ComCsvSrvClass();
??????????? bb.ConnectionString = "dsn=test;user=system;pwd=Helpdesk1;";
??????????? bb.NumOfTables = 2;
?????????? bb.set_bstrTableName(0, "vehicle");
??????????? bb.set_bstrTableName(1, "van");
??????????? bb.OnConnectDbOk += new _IComCsvSrvEvents_OnConnectDbOkEventHandler(bb_OnConnectDbOk);
??????????? bb.OnDataFechFinished += new _IComCsvSrvEvents_OnDataFechFinishedEventHandler(bb_OnDataFechFinished);
??????????? bb.OnWriteCSV += new _IComCsvSrvEvents_OnWriteCSVEventHandler(bb_OnWriteCSV);
??????????? bb.BlindFetchCSVData();???????????
??????? }
??????? void bb_OnWriteCSV(string bstrFileInfo)
??????? {
??????????? MessageBox.Show("Write!");???????????
??????? }
??????? void bb_OnDataFechFinished(string theString)
??????? {
??????????? MessageBox.Show("Fetch!");???????????
??????? }
??????? void bb_OnConnectDbOk(string strDBInfo)
??????? {
??????????? MessageBox.Show("Connection!");???????????
??????? }
考慮到目前CSV組件我仍在改進(jìn)中,所以只傳了可行文件,和客戶端程序,如果你要組件源碼,發(fā)郵件到[email]thomas.x.wang@gmail.com[/email].

轉(zhuǎn)載于:https://blog.51cto.com/thomas/29358

總結(jié)

以上是生活随笔為你收集整理的快速的CSV文件生成器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。