如何高效地批量导入数据到SqlServer

1.循环遍历并"Inser into XXX(xxx,xxx,xxx) values(xxx,xxx,xxx)",然后执行sql语句

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

 /// <summary>
        ///<see cref="DataTable"/> 的数据批量插入到数据库中。
        /// </summary>
        /// <param name="dataTable">要批量插入的 <see cref="DataTable"/></param>
        /// <param name="batchSize">每批次写入的数据量。</param>
        public bool InsertBatchDataTable(DataTable dataTable, string tableName, int batchSize = 10000)
        {
            using (SqlConnection connection = new SqlConnection(myConnectionString))
            {
                try
                {
                    connection.Open();
                    //给表名加上前后导符
                    using (var bulk = new SqlBulkCopy(connection, SqlBulkCopyOptions.KeepIdentity, null)
                        {
                            DestinationTableName = tableName,
                            BatchSize = batchSize
                        })
                    {
                        //循环所有列,为bulk添加映射
                        //dataTable.EachColumn(c => bulk.ColumnMappings.Add(c.ColumnName, c.ColumnName), c => !c.AutoIncrement);
                        foreach (DataColumn dc in dataTable.Columns)
                        {
                            bulk.ColumnMappings.Add(dc.ColumnName, dc.ColumnName);
                        }
                        bulk.WriteToServer(dataTable);
                        bulk.Close();
                    }
                    return true;
                }
                catch (Exception exp)
                {
                    return false;
                }
                finally
                {
                    connection.Close();
                }
            }
        }

3.如果是数据量非常大,超过10W以上的数据,可以考虑生成.dtsx文件,然后由C#代码直接调用,效率还是不错的。
以上是一些思路,如果还有其他有效的方式,会继续补充,以做为系统大数据导入之必备良药。

转载于:https://www.cnblogs.com/snowalk/p/3304976.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值