使用IRONXL

如何在C#中將Excel匯入SQL Server

發佈 2024年7月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檔案的過程。 這款強大的工具非常適合伺服器端應用程式,因為它讓開發人員能夠在不需要在電腦上安裝 Microsoft Excel 的情況下讀取、創建和編輯 Excel 文件。 Excel 2007 及更高版本(.xlsx)和 Excel 97–2003(.xls)IronXL 支援多種格式,在管理各種 Excel 文件版本時提供了靈活性。 它允許進行重要的數據操作,例如操作工作表、行和列,此外還包括插入、更新和移除數據。

IronXL 也支援儲存格格式化和 Excel 公式,能夠程式化產生複雜且格式良好的試算表。 IronXL 具有性能優化和與多個 .NET 平台(包括 .NET Framework、.NET Core 和 .NET 5/6)的兼容性,保證有效處理龐大的數據集。 由於它可以與其他 .NET 框架無縫銜接,這對於希望將 Excel 文件操作整合到其應用程式中的開發人員來說,是一個靈活的選擇,無論是用於簡單的數據匯入/匯出活動還是複雜的報告系統。

主要功能

讀取和寫入 Excel 檔案

開發人員可以使用IronXL讀取和寫入Excel文件中的數據。 建立新的 Excel 文件和編輯現有文件非常簡單。

不需要安裝 Microsoft Excel

IronXL與某些其他程式庫不同,它不需要在托管應用程式的電腦上安裝Microsoft Excel。 這對伺服器端應用程式來說非常完美。

支持多種 Excel 格式

該庫通過支援 .xls 格式,提供了管理各種 Excel 文件類型的多樣性。(Excel 97-2003)和.xlsx(Excel 2007 及更高版本)格式。

建立一個新的 Visual Studio 專案

Visual Studio 的主控台專案很容易建立。 在 Visual Studio 中,執行以下操作以創建主控台應用程式:

  1. 打開 Visual Studio:在打開之前,確保您已經在電腦上安裝了 Visual Studio。

  2. 開始一個新專案:選擇 File -> New -> Project

    如何在C#中將Excel導入SQL Server:圖2 - 點擊新建

  3. 在「建立新專案」框的左側面板中,選擇您偏好的程式語言,例如 C#。

  4. 選擇 Console AppConsole App(.NET Core) 從可用的專案模板列表中選擇模板。

  5. 名稱區域,為您的專案命名。

    如何在 C# 中將 Excel 導入 SQL Server:圖 3 - 提供名稱和儲存位置

  6. 決定保存專案的位置。

  7. 單擊 建立 以啟動主控台應用專案。

    如何在C#中將Excel導入SQL Server:圖4 - 最後點擊創建以啟動應用程式

安裝 IronXL 函式庫

由於即將進行的更新,需要安裝IronXL函式庫。 最後,完成程序,啟動NuGet套件管理器控制台,並輸入以下命令:

Install-Package IronXL.Excel

如何將 Excel 匯入 SQL Server 在 C# 中:圖五 - 在 NuGet 套件管理控制台中輸入上述命令來安裝 IronXL

使用 NuGet 套件管理器搜尋 IronXL 套件是另一種方法。 這使我們能夠選擇要下載的與IronXL相關的NuGet套件。

如何將 Excel 匯入到 SQL Server 中的 C#:圖 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 Server

使用 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 表格,Main 函數管理整個過程。

如何在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。 通過將 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 查看許可證 >