如何高效地批量导入数据到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#代码直接调用,效率还是不错的。
以上是一些思路,如果还有其他有效的方式,会继续补充,以做为系统大数据导入之必备良药。

posted @ 2013-09-06 10:36  snowalkmount  阅读(411)  评论(0编辑  收藏  举报