【数据处理】SQL Server高效大数据量存储方案SqlBulkCopy

要求将Excel数据,大批量的导入到数据库中,尽量少的访问数据库,高性能的对数据库进行存储。

 

一个比较好的解决方案,就是采用SqlBulkCopy来处理存储数据。

 

SqlBulkCopy存储大批量的数据非常的高效,就像这个方法的名字一样,可以将内存中的数据表直接的一次性的存储到数据库中,而不需要一次一次的向数据库Insert数据。

 

初次实验,百万级别的数据表,也只需几秒时间内就可以完全的存入数据库中,其速度,比传统的Insert方法不止快很多倍。下面,我将用代码,介绍其用法。

 

        #region SqlBulkCopy
        /// <summary>
        /// SqlBulkCopy
        /// </summary>
        /// <param name="connectionString">目标连接字符</param>
        /// <param name="TableName">目标表</param>yyy
        /// <param name="dt">源数据</param>
        public static void SqlBulkCopyByDatatable(string TableName, DataTable dt,string ConnectionStrings="")
        {
            if (string.IsNullOrWhiteSpace(ConnectionStrings))
            {
                ConnectionStrings = System.Configuration.ConfigurationManager.ConnectionStrings["KTGJVIPHallDBConnection"].ToString();
            }
            using (SqlConnection conn = new SqlConnection(ConnectionStrings))
            {
                using (SqlBulkCopy sqlbulkcopy = new SqlBulkCopy(ConnectionStrings, SqlBulkCopyOptions.UseInternalTransaction))
                {
                    try
                    {
                        sqlbulkcopy.DestinationTableName = TableName;
                        for (int i = 0; i < dt.Columns.Count; i++)
                        {
                            sqlbulkcopy.ColumnMappings.Add(dt.Columns[i].ColumnName, dt.Columns[i].ColumnName);
                        }
                        sqlbulkcopy.WriteToServer(dt);
                    }
                    catch (System.Exception ex)
                    {
                        throw ex;
                    }
                }
            }
        }
        #endregion
    }

 

将内存中个DataTable 数据一次性的存入数据库中,只要内存中的数据表格的结构跟数据库中的表格结构一样,就可以了,如果数据库中包含自增列字段,我们可以不需要在内存表中定义,当数据保存到数据库中的时候,自增列会自动生成数据的。

 

posted @ 2017-06-22 17:40  0539  阅读(1616)  评论(0编辑  收藏  举报