閆 淼
(吉林電子信息職業(yè)技術學院 信息技術學院,吉林 吉林 132021)
一般信息系統(tǒng)運行初始,首先需要初始化一些基礎數(shù)據(jù),如數(shù)據(jù)字典,然后再錄入信息系統(tǒng)需要處理的數(shù)據(jù)。如果人工初始這些數(shù)據(jù),效率低,易出錯,這時我們可以提前準備好初始化數(shù)據(jù),一次性導入數(shù)據(jù)庫中,此過程稱為向數(shù)據(jù)庫導入數(shù)據(jù)。
當信息系統(tǒng)運行一段時間后,需要將其中一些數(shù)據(jù)導出作為備份,或將導出數(shù)據(jù)進行格式處理后生成相應報表,一般將數(shù)據(jù)庫數(shù)據(jù)導出為相關文件,此過程稱為由數(shù)據(jù)庫導出數(shù)據(jù)。
當數(shù)據(jù)庫數(shù)據(jù)導出至Excel文件時,通常有如下幾種數(shù)據(jù)發(fā)生變化:
①形如“001”的字符串數(shù)據(jù)導出至Excel工作表單元格時,變?yōu)閿?shù)值“1”。
②形如“220203198002210551”的字符串數(shù)據(jù)導出至Excel工作表單元格時,變?yōu)閿?shù)值“2.20203E+17”。
③形如“2012-1-2”的日期數(shù)據(jù)導出至Excel工作表單元格時,變?yōu)椤?012/1/2”,日期格式發(fā)生變化。
發(fā)生以上數(shù)據(jù)變化的原因是Excel工作表單元格默認格式為“常規(guī)”引起的。在下面的示例中將給出解決方法。
本示例實現(xiàn)客戶表(client)數(shù)據(jù)的導入與導出。程序運行界面如圖1所示,客戶表各字段類型如圖2所示,準備導入數(shù)據(jù)的Excel工作表數(shù)據(jù)如圖3所示,導入數(shù)據(jù)后客戶表如圖4所示,由客戶表導出數(shù)據(jù)至Excel工作表顯示如圖3所示。
圖1 導入數(shù)據(jù)后界面
圖2 客戶表各字段類型
圖3 Excel工作表內(nèi)導入/導出數(shù)據(jù)
圖4 客戶表導入數(shù)據(jù)后
說明:本文僅實現(xiàn)數(shù)據(jù)導入導出過程中涉及的重要步驟及方法。
實現(xiàn)步驟:
(1)添加引用
為項目添加.NET引用:Microsoft.Office.Interop.Excel,版本11。
(2)導入數(shù)據(jù)
①獲取Excel工作表數(shù)據(jù),生成數(shù)據(jù)集
方法說明,參數(shù)“fileName”表示導入數(shù)據(jù)所在Excel文件的路徑及文件名;參數(shù)“sheetName”表示導入數(shù)據(jù)所在工作表的名稱,生成結果以“DataSet”類型返回,代碼如下:
②將數(shù)據(jù)集內(nèi)數(shù)據(jù)導入至數(shù)據(jù)庫相關表
解決辦法是從數(shù)據(jù)集讀取一條記錄就插入至數(shù)據(jù)庫客戶表一條,直至數(shù)據(jù)集內(nèi)所有記錄插入完畢,為使數(shù)據(jù)成功導入數(shù)據(jù)表,可以在代碼中加入了事務處理,即應用“SqlTransaction”類實現(xiàn)事務處理。
1.3.3 腦癱兒童運動障礙評估 腦癱兒童粗大運動功能障礙程度評估:使用腦性癱瘓粗大運動功能分類系統(tǒng)(GMFCS)中國版[4],該系統(tǒng)將腦癱患兒分為4個年齡組:~2歲、~4歲、~6歲、~12歲;每個年齡組根據(jù)腦癱患兒運動功能的表現(xiàn)及受限制程度分為Ⅰ、Ⅱ、Ⅲ、Ⅳ、Ⅴ,5個級別,其中I級運動功能最高,V級運動功能最低。
(3)導出數(shù)據(jù)
①將導出數(shù)據(jù)表生成數(shù)據(jù)集
根據(jù)生成數(shù)據(jù)集包含的字段,通過SQL語句,生成數(shù)據(jù)集對象。為實現(xiàn)按照指定日期類型導出數(shù)據(jù),可對日期類型字段進行格式轉換,如對客戶表“regDate”字段進行轉換,代碼如下所示:
string strSql="SELECT code,name,sex,IDCard,CONVERT(varchar(10),regDate,120),rank FROM client";
②根據(jù)數(shù)據(jù)表,生成Excel工作表
實現(xiàn)思路:根據(jù)導出數(shù)據(jù)生成的數(shù)據(jù)集,從數(shù)據(jù)集讀取一條記錄插入至Excel工作表內(nèi)一條,至到數(shù)據(jù)集內(nèi)全部數(shù)據(jù)插入為止。
?。┨砑哟a頁面引用“using Excel=Microsoft.Office.Interop.Excel;”,以達到簡化引用。
ⅱ)創(chuàng)建Excel工作表對象如下代碼所示:
關于注釋為“A”的代碼說明:
a“mySheet.Cells[i+2,j+1]”表示導出的數(shù)據(jù)是從Excel工作表第2行1列開始添加的,直到數(shù)據(jù)集中數(shù)據(jù)導出完畢。
b “"'"+dt.Rows[i][j].ToString()”,其中“dt.Rows[i][j]”表示數(shù)據(jù)表對象中i行j列的值,“"'"”中“'”的作用是將數(shù)據(jù)導入Excel工作表單元格時以文本類型處理,這樣就不會出現(xiàn)第2節(jié)數(shù)據(jù)導出存在的那些問題了。
ⅴ)生成包含導出數(shù)據(jù)的Excel文件,代碼如下:
使用本文介紹方法實現(xiàn)SQL Server與Excel間數(shù)據(jù)的導入導出的前提是應用程序所在平臺需要安裝Office辦公軟件,特別是需要安裝Excel軟件。另外建議讀者在實現(xiàn)數(shù)據(jù)導入導出時,可以考慮使用低版本的Office軟件,如Office2003,因為Office有向后兼容的功能,所以導出的Excel2003文件可以直接在Office2007中打開并編輯。
[1]Watson,等.C# 入門經(jīng)典[M].齊立波,譯.4 版.北京:清華大學出版社,2008.
[2]劉麗霞,等.C#范例開發(fā)大全[M].北京:清華大學出版社,2010.
[3]明日科技.C#開發(fā)技術大全[M].北京:人民郵電出版社,2011.