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#代码直接调用,效率还是不错的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)