SqlBulkCopy批量写入25万条数据只需3s
Microsoft SQL Server 提供一个称为 bcp 的流行的命令提示符实用工具,用于将数据从一个表移动到另一个表(表既可以在同一个服务器上,也可以在不同服务器上)。SqlBulkCopy 类允许编写提供类似功能的托管代码解决方案。还有其他将数据加载到 SQL Server 表的方法(例如 INSERT 语句),但相比之下SqlBulkCopy 提供明显的性能优势。
使用 SqlBulkCopy 类只能向 SQL Server 表写入数据。但是,数据源不限于 SQL Server;可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataReader 实例读取数据。
下面介绍下Demo(批量写入258114条数号码归属地数据)
//打开选择文档对话框 OpenFileDialog ofd = new OpenFileDialog(); ofd.Filter = "文本类型|*.txt|文本类型|*.csv";//限定打开类型 if (ofd.ShowDialog() == false) { return; } string fileName = ofd.FileName; string[] lines = File.ReadAllLines(fileName, Encoding.Default).ToArray();//打开文本,使用指定的格式编码读出所有行,然后关闭 //GetTableCoulmn(lines); #region 原始代码 int s = System.Environment.TickCount;//记录函数执行开始时间 DataTable table = new DataTable(); //建立列名和导入的文件中的列名对应 table.Columns.Add(new DataColumn("StartNum")); table.Columns.Add(new DataColumn("TelTypes")); table.Columns.Add(new DataColumn("City")); table.Columns.Add(new DataColumn("TelCode")); for (int i = 0; i < lines.Length; i++) { //插入行数据 string[] strs = lines[i].Split('\t');//字符串分割 DataRow row = table.NewRow(); row["StartNum"] = strs[0]; row["TelTypes"] = strs[2].ToString().Trim('"');//消除两边字符 row["City"] = strs[1].ToString().Trim('"'); row["TelCode"] = strs[3].ToString().Trim('"'); table.Rows.Add(row); } string connstr = ConfigurationManager.ConnectionStrings["cnnstr"].ConnectionString; using (SqlConnection cnn = new SqlConnection(connstr)) { cnn.Open(); SqlBulkCopy copy = new SqlBulkCopy(cnn); copy.DestinationTableName = "TelephoneFull";//插入目标表数据 copy.ColumnMappings.Add("StartNum", "StartNum");//列名、数据库表字段 copy.ColumnMappings.Add("TelTypes", "TelTypes"); copy.ColumnMappings.Add("City", "TelArea"); copy.ColumnMappings.Add("TelCode", "TelCode"); copy.WriteToServer(table); } int j = System.Environment.TickCount;//记录函数执行结束时间 MessageBox.Show("成功写入" + lines.Count() + "条数据,耗时" + (j - s) + "ms"); #endregion
测试后显示
上述
定义 SqlBulkCopy 实例的数据源中的列与该实例的目标表中的列之间的映射。
如果数据源和目标表具有相同的列数,并且数据源中每个源列的序号位置匹配相应目标列的序号位置,则无需 ColumnMappings 集合。但是如果列计数不同,或序号位置不一致,则必须使用 ColumnMappings,以确保将数据复制到正确的列中。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述