C#向Sqlserver批量插入数据的三种高效方法
108 浏览量
更新于2024-09-03
收藏 169KB PDF 举报
"本文将详细介绍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`通常提供最佳性能,尤其在处理大量数据时。在实际应用中,应根据数据量、网络状况和数据库配置选择合适的方法。
2020-12-31 上传
2012-01-10 上传
2021-01-01 上传
2023-04-29 上传
2023-06-10 上传
2023-04-06 上传
2023-07-13 上传
2023-09-09 上传
2023-05-14 上传
weixin_38645669
- 粉丝: 9
- 资源: 960
最新资源
- C++多态实现机制详解:虚函数与早期绑定
- Java多线程与异常处理详解
- 校园导游系统:无向图实现最短路径探索
- SQL2005彻底删除指南:避免重装失败
- GTD时间管理法:提升效率与组织生活的关键
- Python进制转换全攻略:从10进制到16进制
- 商丘物流业区位优势探究:发展战略与机遇
- C语言实训:简单计算器程序设计
- Oracle SQL命令大全:用户管理、权限操作与查询
- Struts2配置详解与示例
- C#编程规范与最佳实践
- C语言面试常见问题解析
- 超声波测距技术详解:电路与程序设计
- 反激开关电源设计:UC3844与TL431优化稳压
- Cisco路由器配置全攻略
- SQLServer 2005 CTE递归教程:创建员工层级结构