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 服务和文件系统