C#高效利用SqlBulkCopy导入Excel数据到SQL Server
4星 · 超过85%的资源 需积分: 9 107 浏览量
更新于2024-12-19
收藏 4KB TXT 举报
"C# 实现高效Excel数据导入SQL Server数据库"
在C#编程中,高效地将Excel数据导入到SQL Server数据库是一个常见的需求。传统的做法是通过循环遍历每一行数据,然后拼接SQL语句进行插入,这种方法不仅容易出现错误,而且效率低下。为了提高性能和代码简洁性,可以利用`System.Data.SqlClient.SqlBulkCopy`类,它提供了批量数据复制功能,类似于SQL Server的BCP(Bulk Copy Program)工具。
`SqlBulkCopy`类允许我们快速地将大量数据从数据源(如DataTable或IDataReader)复制到SQL Server表中。在这个例子中,我们将演示如何使用C#结合`SqlBulkCopy`实现从Excel文件中的Sheet1高效导入数据到SQL Server数据库。
首先,我们需要引用必要的命名空间:
```csharp
using System;
using System.Data;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Data.SqlClient;
```
接下来,我们创建一个窗体控件,其中包含一个按钮,当用户点击按钮时,会触发数据导入操作:
```csharp
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// 从Excel文件导入数据到SQL Server
string connectionString = "server=localhost;uid=sa;pwd=sqlgis;database=master";
TransferDataFromExcelToSql(connectionString);
}
private void TransferDataFromExcelToSql(string connectionString)
{
// Excel文件路径,Sheet名称,以及数据库连接字符串
string excelFilePath = GetExcelFilePath();
string sheetName = "Sheet1";
ImportExcelData(excelFilePath, sheetName, connectionString);
}
private string GetExcelFilePath()
{
// 使用OpenFileDialog让用户选择Excel文件
System.Windows.Forms.OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
return openFileDialog.FileName;
}
return "";
}
private void ImportExcelData(string excelFilePath, string sheetName, string sqlConnectionString)
{
// 创建并打开Excel连接
string excelConnectionString = $"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={excelFilePath};Extended Properties='Excel 8.0;HDR=YES;'";
OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);
excelConnection.Open();
// 获取Excel表的信息
string excelTableName = $"[{sheetName}]";
OleDbCommand cmd = new OleDbCommand($"SELECT * FROM {excelTableName}", excelConnection);
OleDbDataReader reader = cmd.ExecuteReader();
// 创建SQL Server连接
SqlConnection sqlConnection = new SqlConnection(sqlConnectionString);
sqlConnection.Open();
// 创建SqlBulkCopy对象
SqlBulkCopy sqlBulkCopy = new SqlBulkCopy(sqlConnection);
// 设置目标表名
sqlBulkCopy.DestinationTableName = "YourDestinationTableName";
// 将Excel数据源与SqlBulkCopy关联
sqlBulkCopy.WriteToServer(reader);
// 关闭连接
reader.Close();
excelConnection.Close();
sqlConnection.Close();
}
}
```
上述代码中,`ImportExcelData`方法负责从Excel文件读取数据并使用`SqlBulkCopy`将其导入到SQL Server。首先,我们使用`OleDbConnection`打开Excel文件,然后通过`OleDbCommand`和`OleDbDataReader`读取数据。接着,创建`SqlConnection`连接到SQL Server,并实例化`SqlBulkCopy`对象。设置`DestinationTableName`为目标表名,然后调用`WriteToServer`方法将Excel数据一次性写入SQL Server。
这个方法对于大数据量的导入非常有效,因为它避免了逐行插入的开销。例如,在作者的测试环境中,导入包含6万多条数据的Sheet仅需约10秒,其中实际的导入过程只需4.5秒。
总结来说,使用C#和`SqlBulkCopy`是高效导入Excel数据到SQL Server的理想方式。它减少了错误发生的可能性,提高了程序的执行速度,简化了代码结构,使得数据迁移更加便捷。在实际项目中,可以根据具体需求对上述代码进行调整,如处理不同版本的Excel文件、支持多Sheet导入、数据类型转换等。
2021-11-11 上传
2020-08-30 上传
2021-04-13 上传
2022-02-07 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
jie2004
- 粉丝: 0
- 资源: 1
最新资源
- 01数字虚拟化抽象科技PPT背景图片
- homebridge-envisalink:用于Envisalink报警平台的Homebridge插件
- ArduinoJson.zip
- ANTConnect-2021.31-py2.py3-none-any.whl.zip
- linq:Linq用于C ++中的列表理解
- LearningFirstWebDevloper
- 20190140022_Laela-Wulida-Imroatus-Solikha
- robofam
- brazilianswhodesign:是向世界展示巴西才华横溢的设计师作品的地方
- 光线斜向拉伸的抽象科技幻灯片背景图片
- reboard:基于Angular 4 +,Angular Material 2和ngx-charts的管理仪表板模板
- 软件无线电技术的现状与发展趋势-综合文档
- 嘉灏国际货运代运助手-crx插件
- KotlinZarUygulamasi:Up School Android开发新手训练营
- 张量流2_IC入门
- 528、开关电路大全.rar-教程与笔记习题