喬治強
摘要:介紹vs2005環(huán)境下,利用C#完成Excel數(shù)據(jù)讀取并導(dǎo)入sql server的思路和方法,同時還介紹了查詢結(jié)果導(dǎo)出excel的思路和方法,并給出了主要程序的實現(xiàn)步驟和詳細(xì)的程序代碼。
關(guān)鍵詞: c#;sql server;EXCEL數(shù)據(jù);導(dǎo)入;導(dǎo)出
中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2012)26-6195-02
Research of the Technology about EXECL Data Import and Export SQL Server Based on C#
QIAO Zhi-qiang
(School of Management, Shaanxi University of Technology,Hanzhong 723200,China)
Abstract:The ideas and methods of Reading Excel data and Import Sql Server with using the C# is studided by visual Stu? dio2005,but also the ideas of saving query results into Excel file is studided, and gives the main program implementation steps and detailed code.
Key words:C#; sql server;Excel data; import; export
在信息系統(tǒng)的的應(yīng)用中,常常需要讀取各種excel文件并處理后存入數(shù)據(jù)庫中,此外大量的查詢結(jié)果需要導(dǎo)出為excel文件。在一些文獻(xiàn)中,介紹了將excel轉(zhuǎn)化為xml文件再進(jìn)行導(dǎo)入,還有的文獻(xiàn)介紹用自動化的方法啟動excel進(jìn)程逐行讀取,但此類方法操作復(fù)雜或者運行緩慢。此類方法在應(yīng)用中效果不是很理想,此外還有一種方式是將excel當(dāng)做數(shù)據(jù)庫來讀取,但常常遇到一些不規(guī)范的excel文件,下面詳細(xì)講述這一方法及應(yīng)對不規(guī)范excel文件的方法。
1.1 Excel導(dǎo)入sql server
1.1.1實現(xiàn)方法
Excel文件可以認(rèn)為是數(shù)據(jù)庫,excel工作表名稱加"$"可以看作是數(shù)據(jù)庫中的表名,通過微軟microsoft.jet.oledb連接excel數(shù)據(jù)庫,通過sql語句讀取數(shù)據(jù)。Excel的列可以看作是數(shù)據(jù)表的列,列名為”F”+序號+”$”,序號即列的順序號(1…n)。對于合并的單元格,數(shù)據(jù)算作是被合并前的最左、最上側(cè)的數(shù)據(jù)。
數(shù)據(jù)文件的讀取
首先,生成數(shù)據(jù)庫聯(lián)接對象OleDbConnection,new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + excel文件名+ ";Extended Properties=Excel 8.0;HDR=Yes;IMEX=1");
注意:HDR=Yes表示電子表格第一行是標(biāo)題,不當(dāng)數(shù)據(jù)處理。若HDR=NO則表示第一行是數(shù)據(jù)。通常要求客戶將第一行置為標(biāo)題以方便程序處理。
其次,適用sql語言讀取數(shù)據(jù)表,語句的形式通常為“select字段名1,字段名2,……,字段名n from“+excel工作表名+”$”。最后,連接sql server,并循環(huán)將數(shù)據(jù)插入sql server中。
1.1.2存在問題及解決方法
在實際應(yīng)用中,客戶提供的excel文件常是不規(guī)范的,包括列順序不規(guī)范,列名稱不規(guī)范。在實際應(yīng)用中,常常出現(xiàn)多行表頭,用戶在表頭中存放標(biāo)題等信息。如果忽視這些問題,在數(shù)據(jù)讀取過程中可能引發(fā)錯誤造成程序死機,造成軟件容錯性能差。此外,對于不規(guī)范的數(shù)字輸入應(yīng)采取轉(zhuǎn)換(比如全角數(shù)字)和提示。
對于列標(biāo)題的讀取,分兩種情況:單表頭,即第一行是列2標(biāo)題,第二行及以下都是數(shù)據(jù);多表頭,客戶往往喜歡在excel表前面
Excel數(shù)據(jù)導(dǎo)入sql server數(shù)據(jù)庫及查詢結(jié)果導(dǎo)出excel文件是管理信息系統(tǒng)常用的功能。本文基于c# .NET,實現(xiàn)了sql server與Excel表格的數(shù)據(jù)批量導(dǎo)入導(dǎo)出,該方法在一些管理系統(tǒng)中得到了應(yīng)用,實踐證明該方法切實可行。
[1]李志云. C#對SQL Server中的數(shù)據(jù)導(dǎo)入導(dǎo)出[J].電腦編程技巧與維護(hù),2009(17):43-46.
[2]陳瑾.在C#中實現(xiàn)SQL server和Excel之間的數(shù)據(jù)傳輸[J].蘇州市職業(yè)大學(xué)學(xué)報,2010,21(2):41-45.
[3]陳瑾.在C#中實現(xiàn)SQL server和Excel之間的數(shù)據(jù)傳輸[J].蘇州市職業(yè)大學(xué)學(xué)報,2010,21(2):41-45.
[4]余秋明.基于C#實現(xiàn)SQL Server和Oracle數(shù)據(jù)庫間數(shù)據(jù)遷移[J].電腦知識與技術(shù),2009,5(2):7842-7844.
[5]華國棟.基于ADO.NET的數(shù)據(jù)庫訪問及其性能優(yōu)化[J].電腦知識與技術(shù),2004(6):215-218.