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