使用IRONXL

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

发布 2024年七月1日
分享:

介绍

在许多不同的业务环境中,将数据从 Excel 导入 SQL Server 通常是必要的。 从 Excel 文件中读取数据并将其输入 SQL Server 数据库是本活动涉及的任务。 虽然导出向导经常被使用,但 IronXL 提供了更加程序化和灵活的数据处理方法。 IronXL.Excel 是一个功能强大的 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 从 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 文件,为管理各种 Excel 文件版本提供了多功能性。 除了插入、更新和删除数据外,它还允许进行大量数据操作,如操作工作表、行和列。

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

主要功能

读写 Excel 文件

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

Microsoft Excel 无需安装

与某些其他库相比,IronXL.Excel 无需在托管应用程序的计算机上安装 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 从 Excel 中读取数据

有了 IronXL.Excel,从 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 兼容多种 Excel 格式,功能强大,无需安装 Microsoft Excel 即可轻松读写 Excel 数据。 通过将 System.Data.SqlClient 与 IronXL 集成,开发人员可以使用参数化查询在 SQL 服务器之间轻松移动数据,从而提高安全性并防止 SQL 注入。

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

< 前一页
如何在C#中处理Excel文件
下一步 >
如何使用C#自动调整Excel单元格大小

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

免费NuGet下载 总下载量: 1,111,773 查看许可证 >