使用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 文件變得更容易。這個強大的工具非常適合伺服器端應用程式,因為它使開發人員能夠讀取、創建和編輯 Excel 文件,而不需要在電腦上安裝 Microsoft Excel。支持 Excel 2007 及更高版本。

(.xlsx) 和 Excel 97–2003 (.xls) IronXL 支援多種格式,提供處理各種 Excel 文件版本的多樣性。它允許進行重要的數據操作,例如操作工作表、行和列,以及插入、更新和刪除數據。

IronXL 還支援單元格格式和 Excel 公式,從而能夠程式生成複雜且格式完美的電子表格。通過其性能優化和對多個 .NET 平台的兼容性,包括 .NET Framework、.NET Core 和 .NET 5/6,IronXL 保證能有效處理大量數據集。對於希望將 Excel 文件操作集成到應用程式中的開發人員來說,無論是簡單的數據導入/導出活動還是複雜的報告系統,IronXL 憑藉其與其他 .NET 框架的無縫接口都是一個靈活的選擇。

主要功能

讀取和寫入 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 之前,請確保您的電腦上已安裝 Visual Studio。

  2. 開始一個新專案:選擇 文件 -> 新建 -> 項目

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

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

  2. 選擇「控制台應用程式」或「控制台應用程式」 (.NET Core)從可用專案範本列表中選擇範本。

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

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

  1. 選擇一個位置保存專案。

  2. 點擊 Create 以啟動一個 Console 應用程序專案。

如何在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.10 剛剛發布

免費 NuGet 下載 總下載次數: 1,023,839 查看許可證 >