在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
在許多不同的商業情境中,將資料從 Excel 匯入至 SQL Server 是一種典型的需求。 從 Excel 文件讀取數據並將其輸入到 SQL Server 資料庫中是此活動涉及的任務。 雖然常常使用匯出精靈,但IronXL提供了一種更具編程性和靈活性的數據處理方法。 IronXL 是一個強大的 C# 庫,可以從文件中導入 Excel 數據; 因此,可以加快此操作。 為此,本文將提供一份全面的指南,介紹使用 C# 將 Excel 資料匯入到 SQL Server 的配置、執行和提升方法。
設置您的開發環境
準備您的 Excel 檔案
連接到您的 SQL Server 資料庫
使用 IronXL 從 Excel 檔案讀取數據
使用 IronPDF 匯出資料並生成 PDF 報告
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 文件操作整合到其應用程式中的開發人員來說,是一個靈活的選擇,無論是用於簡單的數據匯入/匯出活動還是複雜的報告系統。
開發人員可以使用IronXL讀取和寫入Excel文件中的數據。 建立新的 Excel 文件和編輯現有文件非常簡單。
IronXL與某些其他程式庫不同,它不需要在托管應用程式的電腦上安裝Microsoft Excel。 這對伺服器端應用程式來說非常完美。
該庫通過支援 .xls 格式,提供了管理各種 Excel 文件類型的多樣性。(Excel 97-2003)和.xlsx(Excel 2007 及更高版本)格式。
Visual Studio 的主控台專案很容易建立。 在 Visual Studio 中,執行以下操作以創建主控台應用程式:
打開 Visual Studio:在打開之前,確保您已經在電腦上安裝了 Visual Studio。
開始一個新專案:選擇 File
-> New
-> Project
。
在「建立新專案」框的左側面板中,選擇您偏好的程式語言,例如 C#。
選擇 Console App
或 Console App(.NET Core)
從可用的專案模板列表中選擇模板。
在名稱區域,為您的專案命名。
決定保存專案的位置。
單擊 建立 以啟動主控台應用專案。
由於即將進行的更新,需要安裝IronXL函式庫。 最後,完成程序,啟動NuGet套件管理器控制台,並輸入以下命令:
Install-Package IronXL.Excel
使用 NuGet 套件管理器搜尋 IronXL
套件是另一種方法。 這使我們能夠選擇要下載的與IronXL相關的NuGet套件。
使用 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
使用 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
一旦確立了讀取 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
此類負責使用IronXL從給定的Excel文件中讀取數據。ReadExcelFile
函數加載Excel工作簿,打開第一個工作表,並通過迴圈遍歷數據工作表的行來收集數據。 為了方便處理表格,資訊被保存在字典列表中。
此類別將數據插入到指定的資料庫表中,同時管理與 SQL Server 資料庫的連接。 InsertData
方法使用參數化查詢來防止 SQL 注入,並根據字典的鍵動態構建 SQL INSERT 查詢,這些鍵用作列名。
使用 ExcelReader
類別從 Excel 文件中讀取數據到 SQL 表格,並使用 SqlServerConnector
類別將每一行插入 SQL Server 表格,Main
函數管理整個過程。
錯誤處理和優化對於確保穩健且高效的匯入過程至關重要。 實施健全的錯誤處理可以管理潛在問題,例如缺少文件、無效的數據格式和 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
最後,在 .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 的簡單易用性、互操作性及性能相結合,保證了簡化的開發過程及改進的應用程序能力。 藉由提供符合專案需求的明確授權選項,開發人員能夠自信地選擇合適的模型。 透過利用這些優勢,開發人員可以有效應對各種困難,同時保持合規性和透明度。