2020/03/11

如何将DataTable批量写入数据库

作者 Leon

我们使用.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)
0 0 投票数
文章评分