使用IRONXL

如何在C#中将Excel导入到SQL Server

发布 2024年七月1日
分享:

简介

在许多不同的业务环境中,将数据从 Excel 导入 SQL Server 通常是必要的。从 Excel 文件中读取数据并将其输入 SQL Server 数据库是这项工作所涉及的任务。虽然导出向导经常被使用,但 IronXL 提供了一种更程序化、更灵活的数据处理方法。IronXL 是一个功能强大的 C# 库,可以从文件中导入 Excel 数据,因此可以加快这一操作。为此,本篇文章将提供一份详尽的操作指南,介绍使用 C# 将 Excel 导入 SQL Server 的配置、执行和增强方法。

如何用 C# 将 Excel 导入 SQL Server:图 1 - IronXL:C# Excel 库

如何用 C# 将 Excel 导入 SQL Server

1.设置开发环境

2.准备 Excel 文件

3.连接到 SQL Server 数据库

4.使用 IronXL 从 Excel 文件读取数据

5.使用 IronPDF 导出数据并生成 PDF 报告

6.查看 PDF 报告

什么是 IronXL?

IronXL,有时也称为 IronXL.Excel,是一个功能丰富的 C# 库,可使在 .NET 应用程序中处理 Excel 文件变得更容易。这个强大的工具是服务器端应用程序的理想选择,因为它能让开发人员读取、创建和编辑 Excel 文件,而无需在计算机上安装 Microsoft Excel。Excel 2007 及更高版本 (.xlsx) 和 Excel 97-2003 (.xls) IronXL 支持多种 Excel 文件格式,为管理各种 Excel 文件版本提供了多功能性。除了插入、更新和删除数据外,它还允许进行大量数据操作,如操作工作表、行和列。

IronXL 还支持单元格格式化和 Excel 公式,能以编程方式生成复杂且格式良好的电子表格。IronXL 性能优化,兼容多种 .NET 平台,包括 .NET Framework、.NET Core 和 .NET 5/6,确保有效处理庞大的数据集。对于希望将 Excel 文件操作集成到其应用程序中的开发人员来说,无论是直接的数据导入/导出活动还是复杂的报表系统,IronXL 都是一个灵活的选择,这要归功于它与其他 .NET 框架的流畅接口。

主要功能

读写 Excel 文件

开发人员可以使用 IronXL 读写 Excel 文件中的数据。制作新的 Excel 文件和编辑已有的 Excel 文件都很简单。

Microsoft Excel 无需安装

与某些其他库相比,IronXL 无需在托管应用程序的计算机上安装 Microsoft Excel。因此,它非常适合服务器端应用程序。

支持各种 Excel 格式

该库支持 .xls 和 .xls 文件格式,从而提供了管理各种 Excel 文件类型的多功能性。 (Excel 97-2003) 和 .xlsx (Excel 2007 及更高版本) 格式。

创建一个新的 Visual Studio 项目

创建 Visual Studio 控制台项目非常简单。在 Visual Studio 中,执行以下操作即可创建一个控制台应用程序:

  1. 打开 Visual Studio:在打开 Visual Studio 之前,请确保已在计算机上安装。

  2. 启动新项目:选择 "文件"->"新建"->"项目"。

如何用 C# 将 Excel 导入 SQL Server:图 2 - 点击新建

3.在 "创建新项目 "框的左侧面板中,选择你喜欢的编程语言,例如 C#。

4.选择 "控制台应用程序 "或 "控制台应用程序 (.NET Core)模板。

5.在名称区域,为项目命名。

如何用 C# 将 Excel 导入 SQL Server:图 3 - 提供名称和保存位置

6.决定保存项目的位置。

7.点击创建,启动控制台的应用项目。

如何用 C# 将 Excel 导入 SQL Server:图 4 - 最后点击创建以启动应用程序

安装 IronXL 库

因为即将更新,所以需要安装 IronXL 库。最后,启动 NuGet 软件包管理器控制台并键入以下命令,完成安装过程:

Install-Package IronXL.Excel

如何用 C# 将 Excel 导入 SQL Server:图 5 - 在 NuGet 软件包管理器控制台中输入上述命令安装 IronXL

另一种方法是使用 NuGet 包管理器搜索 "IronXL "包。这样我们就可以选择下载与 IronXL 相关联的 NuGet 软件包。

如何用 C# 将 Excel 导入 SQL Server:图 6 - 或者使用 NuGet 软件包管理器搜索并安装 IronXL

使用 IronXL 将 Excel 导入 SQL

使用 IronXL 从 Excel 读取数据

有了 IronXL,从 Excel 文件读取数据的过程就变得更简单了。下面的示例展示了如何使用 IronXL 从 Excel 文件中读取数据。通过这种方法,数据被读取并保存在字典列表中,每个字典对应 Excel 表中的一行。

using IronXL;
using System;
using System.Collections.Generic;

public class ExcelReader
{
    public static List<Dictionary<string, object>> ReadExcelFile(string filePath)
    {
        var data = new List<Dictionary<string, object>>();
        WorkBook workbook = WorkBook.Load(filePath);
        WorkSheet sheet = workbook.WorkSheets[0];

        var headers = new List<string>();
        foreach (var header in sheet.Rows[0].Columns)
        {
            headers.Add(header.ToString());
        }

        for (int i = 1; i < sheet.Rows.Count; i++)
        {
            var rowData = new Dictionary<string, object>();
            for (int j = 0; j < headers.Count; j++)
            {
                rowData[headers[j]] = sheet.Rows[i][j].Value;
            }
            data.Add(rowData);
        }

        return data;
    }
}
using IronXL;
using System;
using System.Collections.Generic;

public class ExcelReader
{
    public static List<Dictionary<string, object>> ReadExcelFile(string filePath)
    {
        var data = new List<Dictionary<string, object>>();
        WorkBook workbook = WorkBook.Load(filePath);
        WorkSheet sheet = workbook.WorkSheets[0];

        var headers = new List<string>();
        foreach (var header in sheet.Rows[0].Columns)
        {
            headers.Add(header.ToString());
        }

        for (int i = 1; i < sheet.Rows.Count; i++)
        {
            var rowData = new Dictionary<string, object>();
            for (int j = 0; j < headers.Count; j++)
            {
                rowData[headers[j]] = sheet.Rows[i][j].Value;
            }
            data.Add(rowData);
        }

        return data;
    }
}
Imports IronXL
Imports System
Imports System.Collections.Generic

Public Class ExcelReader
	Public Shared Function ReadExcelFile(ByVal filePath As String) As List(Of Dictionary(Of String, Object))
		Dim data = New List(Of Dictionary(Of String, Object))()
		Dim workbook As WorkBook = WorkBook.Load(filePath)
		Dim sheet As WorkSheet = workbook.WorkSheets(0)

		Dim headers = New List(Of String)()
		For Each header In sheet.Rows(0).Columns
			headers.Add(header.ToString())
		Next header

		For i As Integer = 1 To sheet.Rows.Count - 1
			Dim rowData = New Dictionary(Of String, Object)()
			For j As Integer = 0 To headers.Count - 1
				rowData(headers(j)) = sheet.Rows(i)(j).Value
			Next j
			data.Add(rowData)
		Next i

		Return data
	End Function
End Class
VB   C#

连接到 SQL 服务器

使用 "System.Data.SqlClient "命名空间中的 "SqlConnection "类建立与 SQL Server 的连接。确保有正确的连接字符串,通常由数据库名称、服务器名称和身份验证信息组成。下面的示例将介绍如何连接到 SQL Server 数据库并添加数据。

using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;

public class SqlServerConnector
{
    private string connectionString;

    public SqlServerConnector(string connectionString)
    {
        this.connectionString = connectionString;
    }

    public void InsertData(Dictionary<string, object> data, string tableName)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            var columns = string.Join(",", data.Keys);
            var parameters = string.Join(",", data.Keys.Select(key => "@" + key));
            string query = $"INSERT INTO {tableName} ({columns}) VALUES ({parameters})";

            using (SqlCommand command = new SqlCommand(query, connection))
            {
                foreach (var kvp in data)
                {
                    command.Parameters.AddWithValue("@" + kvp.Key, kvp.Value ?? DBNull.Value);
                }
                command.ExecuteNonQuery();
            }
        }
    }
}
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;

public class SqlServerConnector
{
    private string connectionString;

    public SqlServerConnector(string connectionString)
    {
        this.connectionString = connectionString;
    }

    public void InsertData(Dictionary<string, object> data, string tableName)
    {
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            var columns = string.Join(",", data.Keys);
            var parameters = string.Join(",", data.Keys.Select(key => "@" + key));
            string query = $"INSERT INTO {tableName} ({columns}) VALUES ({parameters})";

            using (SqlCommand command = new SqlCommand(query, connection))
            {
                foreach (var kvp in data)
                {
                    command.Parameters.AddWithValue("@" + kvp.Key, kvp.Value ?? DBNull.Value);
                }
                command.ExecuteNonQuery();
            }
        }
    }
}
Imports System
Imports System.Collections.Generic
Imports System.Data.SqlClient
Imports System.Linq

Public Class SqlServerConnector
	Private connectionString As String

	Public Sub New(ByVal connectionString As String)
		Me.connectionString = connectionString
	End Sub

	Public Sub InsertData(ByVal data As Dictionary(Of String, Object), ByVal tableName As String)
		Using connection As New SqlConnection(connectionString)
			connection.Open()
			Dim columns = String.Join(",", data.Keys)
			Dim parameters = String.Join(",", data.Keys.Select(Function(key) "@" & key))
			Dim query As String = $"INSERT INTO {tableName} ({columns}) VALUES ({parameters})"

			Using command As New SqlCommand(query, connection)
				For Each kvp In data
					command.Parameters.AddWithValue("@" & kvp.Key, If(kvp.Value, DBNull.Value))
				Next kvp
				command.ExecuteNonQuery()
			End Using
		End Using
	End Sub
End Class
VB   C#

将 IronXL 与 SQL Server 结合使用

一旦建立了读取 Excel 文件并将数据插入 SQL 数据库的逻辑,就可以整合这些功能来完成导入过程。下面的应用程序会从 Excel 文件中接收信息,并将其添加到 Microsoft SQL Server 数据库中。

using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        string excelFilePath = "path_to_your_excel_file.xlsx";
        string connectionString = "your_sql_server_connection_string";
        string tableName = "your_table_name";

        // Read data from Excel
        List<Dictionary<string, object>> excelData = ExcelReader.ReadExcelFile(excelFilePath);

        // Insert data into SQL Server
        SqlServerConnector sqlConnector = new SqlServerConnector(connectionString);
        foreach (var row in excelData)
        {
            sqlConnector.InsertData(row, tableName);
        }

        Console.WriteLine("Data import completed successfully.");
    }
}
using System;
using System.Collections.Generic;

class Program
{
    static void Main(string[] args)
    {
        string excelFilePath = "path_to_your_excel_file.xlsx";
        string connectionString = "your_sql_server_connection_string";
        string tableName = "your_table_name";

        // Read data from Excel
        List<Dictionary<string, object>> excelData = ExcelReader.ReadExcelFile(excelFilePath);

        // Insert data into SQL Server
        SqlServerConnector sqlConnector = new SqlServerConnector(connectionString);
        foreach (var row in excelData)
        {
            sqlConnector.InsertData(row, tableName);
        }

        Console.WriteLine("Data import completed successfully.");
    }
}
Imports System
Imports System.Collections.Generic

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim excelFilePath As String = "path_to_your_excel_file.xlsx"
		Dim connectionString As String = "your_sql_server_connection_string"
		Dim tableName As String = "your_table_name"

		' Read data from Excel
		Dim excelData As List(Of Dictionary(Of String, Object)) = ExcelReader.ReadExcelFile(excelFilePath)

		' Insert data into SQL Server
		Dim sqlConnector As New SqlServerConnector(connectionString)
		For Each row In excelData
			sqlConnector.InsertData(row, tableName)
		Next row

		Console.WriteLine("Data import completed successfully.")
	End Sub
End Class
VB   C#

该类负责使用 IronXL 从给定的 Excel 文件中读取数据。ReadExcelFile "函数加载 Excel 工作簿,打开第一个工作表,并通过循环浏览数据工作表的行来收集数据。为方便处理表格,信息保存在字典列表中。

如何用 C# 将 Excel 导入 SQL Server:图 7 - 输入 Excel 文件示例

数据由该类插入到指定的数据库表中,该类还负责管理与 SQL Server 数据库的连接。InsertData "方法采用参数化查询来防止 SQL 注入,并根据字典键(代替列名)动态建立 SQL INSERT 查询。

主 "函数使用 "ExcelReader "类将数据从 Excel 文件读入 SQL 表,并使用 "SqlServerConnector "类将每一行插入 SQL Server 表,从而管理整个过程。

如何用 C# 将 Excel 导入 SQL Server:图 8 - 显示在 SQL Server 上成功查询的输出结果

错误处理和优化对于确保稳健高效的导入流程至关重要。实施强大的错误处理可以管理潜在的问题,如文件丢失、数据格式无效和 SQL 异常。下面是一个结合错误处理的示例。

try
{
    // Insert the importing logic here
}
catch(Exception ex)
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
try
{
    // Insert the importing logic here
}
catch(Exception ex)
{
    Console.WriteLine("An error occurred: " + ex.Message);
}
Try
	' Insert the importing logic here
Catch ex As Exception
	Console.WriteLine("An error occurred: " & ex.Message)
End Try
VB   C#

结论

最后,在.NET 应用程序中管理 Excel 文件的一种有效而可靠的方法是使用 C# 和 IronXL 将 Excel 中的数据导入 MS SQL 数据库。IronXL 兼容多种 Excel 格式,而且功能强大,无需安装 Microsoft Excel 即可轻松读写 Excel 数据。通过将 System.Data.SqlClient 与 IronXL 集成,开发人员可以使用参数化查询在 SQL 服务器之间轻松移动数据,从而提高安全性并防止 SQL 注入。

最后,将 IronXL 和 Iron Software 添加到.NET 开发工具组中,可以高效地处理 Excel、创建 PDF、进行 OCR 和使用条形码。将 Iron Software 灵活的套件与 IronXL 的易用性、互操作性和性能相结合,可确保简化开发过程并提高应用能力。通过根据项目要求定制的明确许可选项,开发人员可以放心地选择合适的模式。利用这些优势,开发人员可以有效地解决一系列难题,同时保持合规性和开放性。

下一步 >
如何使用C#自动调整Excel单元格大小

准备开始了吗? 版本: 2024.9 刚刚发布

免费NuGet下载 总下载量: 988,189 查看许可证 >