使用ssis完成excel的數據導入


SSIS(SQL Server Integration Service)是從MS SQL 2005開始引入的,是一種ETL(Extract Transform Load)工具,SSIS比普通的ETL更進一步,它是可視化的,用Visual Studio來開發,包文件(*.dtsx)采用的是XML格式。

對於SSIS的研究其實去年就已經開始,但是由於它的不穩定性所以一直沒敢大規模的使用它。公司一個實驗室的項目,我開始嘗試了一下SSIS的數據采集的強大功能,根據系統的需求,有大量的地方使用到數據的導入功能。目前大部分軟件系統的初始化都采用的Excel文檔的方式實現數據向數據庫的錄入。只要涉及到Excel的導入,在。Net平台中無非就是那幾種方式:1、ext模版導入2、NPOI,一些常用的數據導入方式,雖然說它們的使用技術已經成熟但遇到復雜的數據表現方式或大量數據入庫的時候,性能就沒有那么的完美了。比如下面一張課表信息:

如果使用NPOI這樣的方式來讀取入庫太復雜了。SSIS本身自帶了excel的數據源的導入方式,可以將ExceL的整張表都一行一行的導入到指定的數據庫表中,還可以在導入的過程中進行數據轉換,非常方便,特別是對於大數據量的導入非常方便,但同時有利就有弊端。

第一、Excel在數據行插入的時候是無序的,所以對於順序由嚴格要求的數據導入是必須注意,自己定義索引,方便排序。

第二、數據導入時,會產生大量的空行數據,就是表中一行數據都為“Null”

第三、excel表中的每一列數據必須保證數據格式一致,否則它會自動從excel 的前五行根據少數服從多數的原則,確定數據格式,其它不同類型的數據導入數據庫中后將為空。

第四、目前excel導入數據時只能支持32位生成的包類型。

在Excel進行數據導入時,對多個包進行包配置時,如果重用了配置文件,並配置了相同的Excel的文件路徑位置,但Excel數據源內容列並不一致。在用SSISDeploymentManifest包發布時千萬不要點擊‘安裝后並驗證“,當包完成發布后,包會自動尋找Excel的原位置進行數據列匹配,並記憶了列屬性。這時即使在未進行包配置前SBIDS進行包運行調試無誤,驗證也一定會失敗,發布后程序也必然是無法使用的。

 

 

using DtsRunTime = Microsoft.SqlServer.Dts.Runtime.Wrapper;

           DtsRunTime.Application dtsApplication = new DtsRunTime.Application();
            //DtsRunTime.IDTSPackage90 package = dtsApplication.LoadPackage(@"c:\xx.dtsx", true, null);

            // IDTSPackage90(數據庫為2005)IDTSPackage100(數據庫為2008)
            DtsRunTime.IDTSPackage90 package = dtsApplication.LoadFromSQLServer(
                this.YOUR_PACKAGE_NAME, 
                this.YOUR_SERVER_NAME, 
                this.SQL_USER,
                this.SQL_PASSWORD,
                true, 
                null);
            
            DtsRunTime.DTSExecResult result = package.Execute();

C#.NET可使用程序對Package進行調用,其實是對數據庫安裝目錄,如:C:\Program Files\Microsoft SQL Server\100\DTS\Binn\DTExec.exe的調用。

DTExec.exe 命令提示實用工具用於配置和執行 SQL Server Integration Services 包。使用 dtexec 實用工具,可以訪問所有包配置和執行功能,如連接、屬性、變量、日志和進度指示器等。使用 dtexec 實用工具,可以加載來自以下三個源的包:Microsoft SQL Server 數據庫、SSIS 服務和文件系統

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM