摘要:在排球成績(jī)測(cè)評(píng)系統(tǒng)實(shí)際應(yīng)用中,導(dǎo)入學(xué)生信息和導(dǎo)出學(xué)生成績(jī)是提高數(shù)據(jù)錄入速度和快速輸出的有效途徑。本文詳細(xì)介紹了使用C#語(yǔ)言、采用SqlBulkCopy類將Excel數(shù)據(jù)表導(dǎo)入到SQL Server數(shù)據(jù)庫(kù),以及將數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)出到Excel數(shù)據(jù)表中的方法。
關(guān)鍵詞:C# Excel SQL Server 導(dǎo)入導(dǎo)出
1 概述
Excel是辦公中常用的電子表格處理工具,SQL Server是目前流行的數(shù)據(jù)庫(kù)管理系統(tǒng),均在信息系統(tǒng)中被廣泛使用[1,2]。基于安全性、通用性和共享性等考慮,信息系統(tǒng)一般都會(huì)給用戶提供借助Excel進(jìn)行數(shù)據(jù)導(dǎo)入導(dǎo)出數(shù)據(jù)庫(kù)的功能[3,4]。排球成績(jī)測(cè)評(píng)系統(tǒng)中的學(xué)生信息可以逐個(gè)添加,也可以按班級(jí)從Excel中整體導(dǎo)入;系統(tǒng)中的班級(jí)成績(jī)信息、不及格成績(jī)信息需要導(dǎo)出到Excel中。本文介紹在.Net環(huán)境下,使用C#編程實(shí)現(xiàn)排球成績(jī)測(cè)評(píng)系統(tǒng)中Excel數(shù)據(jù)與SQL Server 2005數(shù)據(jù)庫(kù)中數(shù)據(jù)的導(dǎo)入導(dǎo)出。
2 導(dǎo)入數(shù)據(jù)
2.1 SqlBulkCopy類 導(dǎo)入數(shù)據(jù)需要使用SqlBulkCopy類。SqlBulkCopy類提供了一種將其它源的數(shù)據(jù)批量復(fù)制到Sql Server數(shù)據(jù)庫(kù)表中高性能的方法。SqlBulkCopy 包含可以重載的方法WriteToServer,它用來(lái)從其它數(shù)據(jù)的源復(fù)制數(shù)據(jù)到數(shù)據(jù)的目的地。WriteToServer方法可以處理的數(shù)據(jù)類型有DataRow[]數(shù)組、DataTable和DataReader,可以根據(jù)具體情況使用相應(yīng)的數(shù)據(jù)類型。SqlBulkCopy復(fù)制數(shù)據(jù)的原理是采用SQL Server提供的bcp命令提示符實(shí)用工具進(jìn)行數(shù)據(jù)的批量復(fù)制。bcp在SQL Server實(shí)例和數(shù)據(jù)文件之間以用戶指定的格式復(fù)制數(shù)據(jù)[5,6]。
2.2 實(shí)現(xiàn)學(xué)生信息按班級(jí)批量導(dǎo)入 學(xué)生信息添加窗口如圖1(a)所示。需要先選定班級(jí),再為該班級(jí)批量導(dǎo)入學(xué)生。
2.2.1 導(dǎo)入按鈕Click函數(shù) 在學(xué)生信息添加對(duì)話框中單擊導(dǎo)入按鈕,則調(diào)用btn_Import_Click()函數(shù)。該函數(shù)首先判定班級(jí)編號(hào)是否為空,為空則彈出對(duì)話框提示班級(jí)相關(guān)信息不能為空,否則給定鏈接字符串,調(diào)用“打開文件”對(duì)話框,并獲取導(dǎo)入的Excel文件名,確定后調(diào)用導(dǎo)入函數(shù)TransferData()。導(dǎo)入學(xué)生信息后調(diào)用班級(jí)人數(shù)信息函數(shù)classNumberInfo()更新班級(jí)人數(shù)。主要實(shí)現(xiàn)代碼如下:
2.2.2 導(dǎo)入函數(shù)TransferData() 導(dǎo)入函數(shù)有三個(gè)參數(shù),分別是導(dǎo)入的Excel文件名、導(dǎo)入的Excel工作表名和鏈接字符串。導(dǎo)入函數(shù)實(shí)現(xiàn)步驟如下:
首先獲取全部數(shù)據(jù)。導(dǎo)入函數(shù)從Excel工作表中獲取全部數(shù)據(jù),并放入DataSet中。主要實(shí)現(xiàn)代碼如下:
接著檢查數(shù)據(jù)格式。導(dǎo)入函數(shù)使用ds.Tables[0].Columns.Count對(duì)放入DataSet中的數(shù)據(jù)進(jìn)行列數(shù)等信息的檢查。當(dāng)數(shù)據(jù)格式不符合要求就彈出對(duì)話框進(jìn)行提示。
最后導(dǎo)入數(shù)據(jù)。當(dāng)數(shù)據(jù)格式正確,導(dǎo)入函數(shù)進(jìn)行列的添加和數(shù)據(jù)的復(fù)制。數(shù)據(jù)表t_student有四個(gè)字段,分別為學(xué)號(hào)、姓名、性別和班級(jí)編號(hào)。而需要導(dǎo)入的Excel工作表Sheet1只有學(xué)號(hào)、姓名和性別三個(gè)字段。為了字段對(duì)應(yīng),為DataSet中的Tables[0]添加一列,該列存放導(dǎo)入學(xué)生所在班級(jí)的編號(hào)信息。接著使用SqlBulkCopy類的構(gòu)造函數(shù)SqlBulkCopy(connectionString)創(chuàng)建一個(gè)新的對(duì)象bcp。然后用bcp的WriteToServer()函數(shù),把DataSet中Tables[0]中的數(shù)據(jù)一次復(fù)制到已經(jīng)存在的目標(biāo)表t_student中,實(shí)現(xiàn)數(shù)據(jù)的導(dǎo)入。學(xué)生信息導(dǎo)入后如圖2(b)所示。用bcp導(dǎo)入數(shù)據(jù)代碼如下:
3 導(dǎo)出數(shù)據(jù)
把班級(jí)成績(jī)信息從SQL Server數(shù)據(jù)庫(kù)中查詢出來(lái)并顯示在DataGridview中,如圖3所示。班級(jí)成績(jī)導(dǎo)出可以通過(guò)單擊圖2上的“導(dǎo)出成績(jī)”按鈕完成,導(dǎo)出結(jié)果如圖3所示。
單擊“導(dǎo)出成績(jī)”按鈕調(diào)用button_cjdc_Click()函數(shù),該函數(shù)調(diào)用導(dǎo)出函數(shù)ExportDataGridview()。導(dǎo)出函數(shù)先對(duì)DataGridview的行數(shù)進(jìn)行判斷,若行數(shù)為零則退出,否則導(dǎo)出DataGridview中的數(shù)據(jù)到Excel工作表Sheet1中。導(dǎo)出數(shù)據(jù)先建立Excel對(duì)象,然后根據(jù)DataGridview中的列生成Excel表中的字段,最后逐行把DataGridview中的數(shù)據(jù)填充到Excel工作表中去,實(shí)現(xiàn)數(shù)據(jù)導(dǎo)出。
4 結(jié)束語(yǔ)
批量的導(dǎo)入導(dǎo)出數(shù)據(jù)能夠提高用戶的工作效率。本文論述了在排球成績(jī)測(cè)評(píng)系統(tǒng)中,導(dǎo)入Excel工作表中的學(xué)生信息到SQL Server數(shù)據(jù)庫(kù)表中,以及導(dǎo)出成績(jī)信息到Excel工作表中。該方法具有較強(qiáng)的通用性,有一定的實(shí)際應(yīng)用價(jià)值。
參考文獻(xiàn):
[1]魏文勝.Excel與SQLServer數(shù)據(jù)的相互轉(zhuǎn)換之方法[J].電腦知識(shí)與技術(shù),2007(10):892.
[2]張麗英.基于.NET的Excel數(shù)據(jù)批量導(dǎo)入SQL Server的設(shè)計(jì)與實(shí)現(xiàn)[J].南通紡織職業(yè)技術(shù)學(xué)院學(xué)報(bào),2012,12(1):7-10.
[3]尹幫治.基于VC#的Excel表格與SQL Server數(shù)據(jù)庫(kù)的批量數(shù)據(jù)導(dǎo)入導(dǎo)出技術(shù)研究[J].企業(yè)技術(shù)開發(fā),2008,27(8):13-16.
[4]游向峰.基于ASP.NET的SQL與EXCEL數(shù)據(jù)互導(dǎo)的研究與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù),2010(11):8953.
[5]唐紅亮.SQL Server數(shù)據(jù)庫(kù)設(shè)計(jì)與系統(tǒng)開發(fā)教程[M].北京:清華大學(xué)出版社,2007.
[6]楊湖,李風(fēng)蕾等.SQL Server 2005數(shù)據(jù)庫(kù)系統(tǒng)開發(fā)案例精選[M].北京:人民郵電出版社,2007.
基金項(xiàng)目:陜西省教育科學(xué)“十一五”規(guī)劃課題:SGH10066;咸陽(yáng)師范學(xué)院項(xiàng)目:200812013,11XSYK210;陜西省教育廳項(xiàng)目:09JK811。
作者簡(jiǎn)介:
劉小豫(1978-),女,陜西咸陽(yáng)人,講師,碩士,研究方向:圖像處理和信息系統(tǒng)開發(fā)。趙薔(1971-),女,陜西咸陽(yáng)人,副教授,碩士。研究方向:軟件工程和圖形圖像處理。