
C#向Sqlserver批量插入数据的三种高效方法
169KB |
更新于2024-09-03
| 140 浏览量 | 3 评论 | 举报
收藏
"本文将详细介绍C#中批量插入数据到Sqlserver的三种方法,包括SQL语句的使用和ADO.NET的实现方式。"
在C#编程中,向Sqlserver数据库批量插入数据是常见的操作,特别是在处理大量数据时,批量插入能显著提升性能。下面将分别介绍SQL语句和C# ADO.NET实现的三种方法。
首先,让我们回顾创建的测试表`Product`,其结构如下:
```sql
CREATE TABLE Product (
Id UNIQUEIDENTIFIER PRIMARY KEY,
Name VARCHAR(50) NOT NULL,
Price DECIMAL(18,2) NOT NULL
)
```
表`Product`使用GUID作为主键,以避免索引重建带来的性能损失。在批量插入前,可以考虑临时删除索引,插入后再重建,以进一步优化性能。
SQL批量插入的三种方式:
1. 逐条插入(不推荐)
这是最基础的方式,但效率最低,适合少量数据插入。
```sql
INSERT INTO Product (Id, Name, Price) VALUES (newid(), '牛栏1段', 160);
INSERT INTO Product (Id, Name, Price) VALUES (newid(), '牛栏2段', 260);
```
2. 多行值插入
这种方式将多条插入语句合并在一起,减少了网络往返次数,提高效率。
```sql
INSERT INTO Product (Id, Name, Price) VALUES
(newid(), '牛栏1段', 160),
(newid(), '牛栏2段', 260);
```
3. UNION ALL插入
使用`UNION ALL`将多条插入语句组合成一个SELECT语句,适用于大量数据插入。
```sql
INSERT INTO Product (Id, Name, Price)
SELECT NEWID(), '牛栏1段', 160
UNION ALL
SELECT NEWID(), '牛栏2段', 260
```
C# ADO.NET批量插入的三种方式:
1. 逐条插入
这是基础方法,通过循环逐条执行INSERT语句,效率较低。
```csharp
static void InsertOne() {
Console.WriteLine("采用一条一条插入的方式实现");
// 使用Stopwatch测量时间,省略代码...
using (SqlConnection conn = new SqlConnection(connectionString)) {
conn.Open();
for (int i = 0; i < totalRow; i++) {
SqlCommand cmd = new SqlCommand(insertSql, conn);
// 执行插入,省略代码...
}
}
}
```
其中`insertSql`是包含INSERT语句的字符串,`connectionString`是数据库连接字符串。
2. 使用SqlCommand的参数化批量插入
参数化可以避免SQL注入,并且提高执行效率。
```csharp
static void InsertBatchWithParams() {
Console.WriteLine("采用参数化批量插入的方式实现");
// 创建SqlCommand对象,设置批处理大小
SqlCommand cmd = new SqlCommand(insertSql, conn);
cmd.Parameters.AddWithValue("@name", "牛栏1段");
cmd.Parameters.AddWithValue("@price", 160);
cmd.CommandTimeout = 0; // 可根据需要设置超时时间
cmd.Parameters.Clear();
for (int i = 0; i < totalRow; i++) {
cmd.Parameters.AddWithValue("@name", names[i]); // 假设names数组已填充
cmd.Parameters.AddWithValue("@price", prices[i]);
if (i % batchSize == 0 || i == totalRow - 1) { // 每batchSize条执行一次
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
}
}
}
```
在这里,`batchSize`是批量执行的大小,可以根据数据库性能调整。
3. 使用SqlBulkCopy批量插入
`SqlBulkCopy`类专门用于高效地批量插入数据,适用于大数据量操作。
```csharp
static void InsertBulkCopy() {
Console.WriteLine("采用SqlBulkCopy批量插入的方式实现");
DataTable dataTable = new DataTable("Product");
// 初始化DataTable,设置列名和类型,与数据库表结构对应
// ...
using (SqlBulkCopy bulkCopy = new SqlBulkCopy(conn)) {
bulkCopy.DestinationTableName = "Product";
bulkCopy.WriteToServer(dataTable);
}
}
```
首先,创建一个`DataTable`对象,其结构与目标表`Product`匹配,然后填充数据,最后使用`SqlBulkCopy`将整个`DataTable`一次性写入数据库。
以上就是C#批量插入数据到Sqlserver的三种主要方法,其中,`SqlBulkCopy`通常提供最佳性能,尤其在处理大量数据时。在实际应用中,应根据数据量、网络状况和数据库配置选择合适的方法。
相关推荐
















资源评论

Unique先森
2025.04.26
文档内容详实,针对C#与Sqlserver交互的批量插入操作,提供了多种方法,很实用。

小明斗
2025.02.07
针对Sqlserver的C#批量插入技巧介绍得很详细,内容丰富,适合开发者学习。🎊

CyberNinja
2025.01.04
本文深入解析了C#操作Sqlserver时的三种高效批量插入方法,实用性很强,值得一读。

weixin_38645669
- 粉丝: 9
最新资源
- 基于RLE算法的编译码器简易实现
- 自主开发的VB记事本程序
- 一键搞定桌面背景自动更换
- 人寿管理系统:商业级源代码与数据库部署教程
- 深入浅出SQL Server2000数据库管理与应用实践
- Ajax实现网页删除功能的代码教程
- CVS操作手册中文版详细指南
- 中文开发的Buffalo AJAX框架性能优异
- 基于MFC的多客户网络聊天程序客户端实现解析
- 构建学校就业系统:BSF组件与SQL语句实践指南
- ESRIToolStripPanel控件: GIS应用的高级UI解决方案
- ASP.NET全面开发BBS与PUB全书(第一卷)
- 订票系统软件工程文档的三阶段分析与设计
- C#高级编程第二版详解与实践
- C#实现的Remoting数据库应用示例详解
- VB+Engine:ESRI中国社区北斗兄提供的界面开发代码
- C#程序员必备参考手册:十六章基础知识详解
- CAsyncSocket实现的网络聊天程序源码解读
- 掌握PHP5编程的电子书推荐
- TeaBrowser:专为Web2.0优化的桌面式浏览器
- C#实现的智能黑白棋源码分享
- 实现省市下拉菜单无刷新联动的Ajax技术
- 桌球城娱乐收费系统开发:基于源码改进
- VBScript完整参考手册