新闻详情

新闻详情

首页 / 资讯中心 / 详情

通过SqlBulkCopy类实现高效批量插入

发布时间:2026/9/25 5:28:37来源:尧图网络
通过SqlBulkCopy类实现高效批量插入
以下是关于C#中BulkSqlHelper用法的综合说明‌基础封装方法‌通过SqlBulkCopy类实现高效批量插入典型封装包含连接字符串管理、事务支持和错误处理需引用System.Data.SqlClient命名空间‌核心实现步骤public class BulkSqlHelper { private SqlConnection conn; public BulkSqlHelper(SqlConnection con) { this.conn con; } public static void BulkInsertT(SqlConnection conn, string tableName, IListT list) { try { using (var bulkCopy new SqlBulkCopy(conn)) { bulkCopy.BatchSize list.Count; bulkCopy.DestinationTableName tableName; //bulkCopy.NotifyAfter 500000; //bulkCopy.BulkCopyTimeout 600000; var table new DataTable(); var props TypeDescriptor.GetProperties(typeof(T)) .CastPropertyDescriptor() .Where(propertyInfo propertyInfo.PropertyType.Namespace.Equals(System)) .ToArray(); props props.Where(p p.Name ! ID).ToArray(); foreach (var propertyInfo in props) { if (propertyInfo.Name ID) continue; bulkCopy.ColumnMappings.Add(propertyInfo.Name, propertyInfo.Name); table.Columns.Add(propertyInfo.Name, Nullable.GetUnderlyingType(propertyInfo.PropertyType) ?? propertyInfo.PropertyType); } var values new object[props.Length]; foreach (var item in list) { for (var i 0; i values.Length; i) { values[i] props[i].GetValue(item); } table.Rows.Add(values); } bulkCopy.WriteToServer(table); } } catch (Exception e) { } } public static void BulkInsertGuidT(SqlConnection conn, string tableName, IListT list) { try { using (var bulkCopy new SqlBulkCopy(conn)) { bulkCopy.BatchSize list.Count; bulkCopy.DestinationTableName tableName; var table new DataTable(); var props TypeDescriptor.GetProperties(typeof(T)) .CastPropertyDescriptor() .Where(propertyInfo propertyInfo.PropertyType.Namespace.Equals(System)) .ToArray(); //props props.Where(p p.Name ! ID).ToArray(); foreach (var propertyInfo in props) { // if (propertyInfo.Name ID) continue; bulkCopy.ColumnMappings.Add(propertyInfo.Name, propertyInfo.Name); table.Columns.Add(propertyInfo.Name, Nullable.GetUnderlyingType(propertyInfo.PropertyType) ?? propertyInfo.PropertyType); } var values new object[props.Length]; foreach (var item in list) { for (var i 0; i values.Length; i) { values[i] props[i].GetValue(item); } table.Rows.Add(values); } bulkCopy.WriteToServer(table); } } catch (Exception e) { } } public static string BulkInsertDataTable(SqlConnection conn, DataTable table, string sqlTableName) { try { using (var bulkCopy new SqlBulkCopy(conn)) { if (table.Rows.Count 50000) { bulkCopy.BatchSize table.Rows.Count; } else { bulkCopy.BatchSize 50000; } //bulkCopy.BulkCopyTimeout 3600; bulkCopy.DestinationTableName sqlTableName; for (int i 0; i table.Columns.Count; i) { bulkCopy.ColumnMappings.Add(table.Columns[i].ColumnName, i1); } bulkCopy.WriteToServer(table); } return string.Empty; } catch (Exception e) { return $sqlbulk写入表【{sqlTableName}】错误 e; } } }具体调用if (db.Database.Connection.State ! ConnectionState.Open) { db.Database.Connection.Open(); //打开Connection连接 } BulkSqlHelper.BulkInsert((SqlConnection)db.Database.Connection, tableName,listModel; BulkSqlHelper.BulkInsertGuidModel((SqlConnection)db.Database.Connection,tableName,listModel); BulkSqlHelper.BulkInsertDataTable((SqlConnection)db.Database.Connection, DataTable, tableName); if (db.Database.Connection.State ! ConnectionState.Closed) { db.Database.Connection.Close(); //关闭Connection连接 } //其中BulkSqlHelper.BulkInsertDataTable 中数据组合如下 DataTable dt new DataTable(); AddColumnsmodel(dt); foreach (var item in list) { dt.Rows.Add(GetTableInfo(item)); } private void AddColumnsT(DataTable table) { var props TypeDescriptor.GetProperties(typeof(T)) .CastPropertyDescriptor() .Where(propertyInfo propertyInfo.PropertyType.Namespace.Equals(System)) .ToArray(); props props.Where(p p.Name ! ID).ToArray(); foreach (var propertyInfo in props) { if (propertyInfo.Name ID) continue; // bulkCopy.ColumnMappings.Add(propertyInfo.Name, propertyInfo.Name); table.Columns.Add(propertyInfo.Name, Nullable.GetUnderlyingType(propertyInfo.PropertyType) ?? propertyInfo.PropertyType); } } private object[] GetTableInfoT(T item) { var props TypeDescriptor.GetProperties(typeof(T)).CastPropertyDescriptor().Where(propertyInfo propertyInfo.PropertyType.Namespace.Equals(System)).ToArray(); props props.Where(p p.Name ! ID).ToArray(); var values new object[props.Length]; for (var i 0; i values.Length; i) { values[i] props[i].GetValue(item); } return values; }
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

DeskcommCRM实战:从线索到成交的客户关系管理全流程解析 2026/9/25 6:06:17

DeskcommCRM实战:从线索到成交的客户关系管理全流程解析

1. 为什么我会盯上DeskcommCRM:客户关系管理这块硬骨头做销售管理和团队运营这些年,我换过不少客户管理工具。最早用Excel表格,客户一多就乱;后来换过在线表格,协作虽然方便了,但权限、跟进记录、客户归属这…

阅读更多 →
从人脸检测到LSB隐写:CTF杂项题完整解题思路 2026/9/25 6:06:11

从人脸检测到LSB隐写:CTF杂项题完整解题思路

1. 看到"X-man-A face"这个名字,我的第一反应是去抠字眼CTF杂项里最不缺的就是靠名字给提示的题,有些题恨不得把答案写在题目名上。QCTF2018这道"X-man-A face"就是典型——拿到题目压缩包的时候,里面只有一张图&#xf…

阅读更多 →
immudb gRPC 协议深度指南:schema.proto 消息模型、ImmuService 服务与可验证性设计全解 2026/9/25 6:06:11

immudb gRPC 协议深度指南:schema.proto 消息模型、ImmuService 服务与可验证性设计全解

数据库安全后端 【免费下载链接】immudb immudb - immutable database based on zero trust, SQL/Key-Value/Document model, tamperproof, data change history 项目地址: https://gitcode.com/gh_mirrors/im/immudb 点击查看 免费下载 immudb 对外暴露的 gRPC 与…

阅读更多 →
老Mac免费装新macOS:OpenCore Legacy Patcher 实操指南 2026/9/25 6:06:10

老Mac免费装新macOS:OpenCore Legacy Patcher 实操指南

老Mac免费装新macOS:OpenCore Legacy Patcher 实操指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher 是个免费工具&am…

阅读更多 →
APK脱壳与反编译实战:从内存dump到Java源码还原 2026/9/25 6:06:10

APK脱壳与反编译实战:从内存dump到Java源码还原

简介:本资源是一套面向Android安全研究者、逆向工程师及中高级开发者的专业APK分析工具集,聚焦脱壳、反编译与源码还原三大核心需求,助力应用安全审计、漏洞分析与逻辑理解。压缩包共43个文件,涵盖14个jar(如apktool.j…

阅读更多 →
维度表和事实表的区别 2026/9/25 6:06:10

维度表和事实表的区别

文章目录一、什么是事实表(Fact Table)?二、什么是维度表(Dimension Table)?三、事实表和维度表的核心区别(最清晰表格)四、一个图秒懂:事实表 维度表如何组合&#xff…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉