sql 2008的SSIS应用方法: 将多个一定格式的文本文件批量导入到数据库

Posted jwsoft007

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 2008的SSIS应用方法: 将多个一定格式的文本文件批量导入到数据库相关的知识,希望对你有一定的参考价值。


private bool ExecutePackage(string sSourceFileName)

bool bResult = false;
string srcpath = System.Windows.Forms.Application.StartupPath.Replace(@"\\bin\\Debug", "") + @"\\Resources\\NewPackage_20110526_02.dtsx";

string filepath = System.Windows.Forms.Application.StartupPath + "\\\\Resources\\\\NewPackage_20110526_02.dtsx";
if (!System.IO.File.Exists(filepath))

if (!System.IO.Directory.Exists(System.Windows.Forms.Application.StartupPath + "\\\\Resources"))

System.IO.Directory.CreateDirectory(System.Windows.Forms.Application.StartupPath + "\\\\Resources");

System.IO.File.Copy(srcpath, filepath);


Microsoft.SqlServer.Dts.Runtime.Application application = new Microsoft.SqlServer.Dts.Runtime.Application();
Package package = application.LoadPackage(filepath, null, true);

package.Connections["SourceConnectionFlatFile"].ConnectionString= sSourceFileName;
string sTargetConnection = string.Format(@"Data Source=0;User ID=1;Password=2;Initial Catalog=3;Provider=SQLNCLI10;Auto Translate=false;", sqlHelper.ImportTargetDataSource,sqlHelper.ImportTargetDBUid,sqlHelper.ImportTargetDBPwd,sqlHelper.ImportTargetDBName);
package.Connections["DestinationConnectionOLEDB"].ConnectionString = sTargetConnection;
DTSExecResult result = package.Execute();
if (result.Equals(DTSExecResult.Success))

bResult = true;
//Common.DisplayMsg(this.Text, "成功导入数据");

else

string sError = string.Empty;
for (int i = 0; i < package.Errors.Count; i++)

sError +="(" + (i+1).ToString() + ")." + package.Errors[i].Description + Convert.ToChar(Keys.Return);


if (sError.Length > 1) sError = sError.TrimEnd(Convert.ToChar(Keys.Return));
Common.DisplayMsg(this.Text, "导入失败:\\r\\n" + sError);


Common.DeleteFilesFromDisk(sSourceFileName);
return bResult;


 提示:

1,   sqlHelper.ImportTargetDataSource,sqlHelper.ImportTargetDBUid,sqlHelper.ImportTargetDBPwd,sqlHelper.ImportTargetDBName:这些设置连接你数据库的相关信息就OK了

2, 需要引用这2个命名空间,具体需要的DLL可以从网上百度到

         using Microsoft.SqlServer.Dts.Runtime;
         using Microsoft.SqlServer.Dts.Tasks.ExecutePackageTask;

3, 这里的 NewPackage_20110526_02.dtsx 是sql 2008下的包文件

        选中数据库--> 右键--> 任务--> 导入数据-->选择数据源为:平面数据源

        选中文件-->指定分割符-->绑定 源数据与目标数据的列 --> 最终生成一个.dtsx的包文件

4, 若有多个文本文件,在for循环中调用

         ExecutePackage(txtFilePath) 就OK了

5, 这种解决方案 一般适用于数据库字段 和 文本文件格式已经定型的情况。

    如果数据库字段,文本文件的列发生改变,那么 这个 .dtsx 重新生成一下就OK了。

    按上述操作完成后,用户可以随心所欲的选择 1个或多个 内容具有同样格式的文本文件,进行批量导入。

    我操作过10多个平均每个约1.5MB的文本文件(有10个字段列), 导入到sql2008的表中,数据大约有200W条,用时45秒左右。

    这个效率, 用sql语句简单的 for循环 200W次,可能没法达到。

以上是关于sql 2008的SSIS应用方法: 将多个一定格式的文本文件批量导入到数据库的主要内容,如果未能解决你的问题,请参考以下文章

使用 SSIS 2008 批量插入多个 XML 文件

通过 SSIS 创建和复制访问表到 SQL? SQL 2008

灵活运用SQL Server2008 SSIS变量

SSIS - 使用 SSIS 将多个文件 .txt 读取到 SQL

使用 SSIS 将 Access 数据库传输到 SQL 服务器

如何在SSIS中将大型Excel文件拆分为多个小文件?