【数据处理】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 数据一次性的存入数据库中,只要内存中的数据表格的结构跟数据库中的表格结构一样,就可以了,如果数据库中包含自增列字段,我们可以不需要在内存表中定义,当数据保存到数据库中的时候,自增列会自动生成数据的。