2020/03/11
如何将DataTable批量写入数据库
我们使用.net写循环获取大量数据存在一个DataTable以后,可能需要对这些数据进行一些后处理,前端呈现,或供第三方软件使用,这个时候就需要数据库来中转存储这些数据。如何快速地将DataTable中的大量数据批量导入数据库中,就是今天我遇到的一个问题,经过一番查询,发现了一个SQLBulkCopy的方法,很是好用。
SqlBulkCopy是.NETFramework 2.0新增的类,位于命名空间System.Data.SqlClient下,主要提供把其它数据源的数据有效批量的加载到SQL Server表中的功能。即使表结构完全不同,也可以通过字段间的对应关系,顺利的将数据导过来。
using System.Data;
using System.Data.SqlClient;
public static void DataTableToSQLServer(DataTable dt)
{
string connectionString = @"Persist Security Info=False;Initial Catalog=dbname;Data Source=172.11.111.111; User ID=sa; Password=pwd";
using (SqlConnection destinationConnection = new SqlConnection(connectionString))
{
destinationConnection.Open();
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnection))
{
try
{
bulkCopy.DestinationTableName = "callLog";//要插入的表的表名
bulkCopy.BatchSize = dt.Rows.Count;
bulkCopy.ColumnMappings.Add("id", "id");//第一个"id"是dt中的字段名,第二个"id"表中的字段名
bulkCopy.ColumnMappings.Add("note_id", "note_id");
bulkCopy.ColumnMappings.Add("call_start_at", "call_start_at");
bulkCopy.WriteToServer(dt);
System.Windows.Forms.MessageBox.Show("插入成功:"+ dt.Rows.Count+"行");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
3D中我们可以通过下面代码获得数据库连接
Private ActivePlant As Plant = MiddleServiceProvider.SiteMgr.ActiveSite.ActivePlant
Private oMetaMgr As MetadataManager = ActivePlant.PlantModel.MetadataMgr
Private oModName As String = MiddleServiceProvider.SiteMgr.ActiveSite.ActivePlant.PlantModel.Name
Private sModConn As SQLDBConnection = New SQLDBConnection(ClientServiceProvider.WorkingSet.ActiveConnection.Server, oModName)
Dim SqlConn As SqlConnection = New SqlConnection(sModConn.Connection.ConnectionString)