C#高效利用SqlBulkCopy导入Excel数据到SQL Server

4星 · 超过85%的资源 需积分: 9 63 下载量 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导入、数据类型转换等。
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部