怎么把package(.dtsx文件)导入到MSDB,求详细解说

怎么把package(.dtsx文件)导入到MSDB,求详细解说,第1张

打开 Managemenet Studio -->服务器类型选择 IntegrationServices服务 -->已存储的包 -->MSDB --> 右键导入包 -->选择“文件系统”,指定之前做好的包 --> 导入

调用ssis包实现Sql Server的数据导入功能网上已经有很多人讨论过,自己参考后也动手实现了一下,上一次笔者的项目中还用了一下这个功能。思前想后,决定还是贴一下增强记忆,高手请54.

1、直接调用ssis包,需要引用Microsoft.SqlServer.DTSRuntimeWrap.dll,客户端需要安装MS SQL Server2005的客户端组件。

2、调用代码

代码

///

/// /通过SSIS包 将数据导入数据库

///

/// dtsx文件名

/// csv文件名

///

protected bool FillData2DB(string dtsxFileName, string csvFileName)

{

string dtsxFile = System.AppDomain.CurrentDomain.BaseDirectory + "DTSX\\" + dtsxFileName

Microsoft.SqlServer.Dts.Runtime.Wrapper.Application app = new Microsoft.SqlServer.Dts.Runtime.Wrapper.Application()

//Call the dtsx file

IDTSPackage90 package = app.LoadPackage(dtsxFile, true, null)//另外还有一种方法叫LoadFromSQLServer

package.Connections["File"].ConnectionString = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, csvFileName)

package.Connections["本地连接"].ConnectionString = ConfigurationSettings.AppSettings["ConnStr"]

DTSExecResult result = package.Execute()

//获取包的执行信息

//string message = string.Empty

//if (result.Equals(DTSExecResult.DTSER_FAILURE))

//{

//for (int i = 0i <package.Errors.Counti++)

//{

//message += package.Errors[i].Description

//}

//}

//if (!string.IsNullOrEmpty(message))

//{

//throw new Exception(message)//抛出异常

//}

if (result.Equals(DTSExecResult.DTSER_SUCCESS))

return true

else

return false

}

2.SqlBulkCopy是个不错的选择,直接由DataTable可以导入到数据库,但要注意(1)列名与目标表一致(2)数据类型一致(3)空值容错处理,参考代码:///<summary///将<see cref="DataTable"/

的数据批量插入到数据库中。///</summary///<param name="dataTable"

要批量插入的

<see cref="DataTable"/。

</param///<param name="batchSize"

每批次写入的数据量。

</parampublicboolInsertBatchDataTable(DataTable dataTable,

stringtableName,

intbatchSize =10000){using(SqlConnection connection =newSqlConnection(myConnectionString)){try{connection.Open()//给表名加上前后导符using(varbulk =newSqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity,

null){DestinationTableName=tableName,

BatchSize=batchSize}){//循环所有列,为bulk添加映射//dataTable.EachColumn(c = bulk.ColumnMappings.Add(c.ColumnName, c.ColumnName), c = !c.AutoIncrement)foreach(DataColumn dcindataTable.Columns){bulk.ColumnMappings.Add(dc.ColumnName, dc.ColumnName)}bulk.WriteToServer(dataTable)

bulk.Close()}returntrue}catch(Exception exp){returnfalse}finally{connection.Close()}}}

3.如果是数据量非常大,超过10W以上的数据,可以考虑生成.dtsx文件,然后由C#代码直接调用,效率还是不错的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/6802008.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-28
下一篇 2023-03-28

发表评论

登录后才能评论

评论列表(0条)

保存