在實際環境中測試
在生產環境中測試無浮水印。
在任何需要的地方都能運作。
在許多不同的商業環境中,將數據從 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 文件變得更容易。這個強大的工具非常適合伺服器端應用程式,因為它使開發人員能夠讀取、創建和編輯 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 框架的無縫接口都是一個靈活的選擇。
開發者可以使用 IronXL 來讀取和寫入 Excel 檔案中的數據。創建新的 Excel 檔案和編輯現有的檔案都非常簡單。
IronXL 不需要在託管應用程式的電腦上安裝 Microsoft Excel,這與某些其他庫形成對比。這使其非常適合伺服器端應用程式。
該庫透過支援 .xls 檔案類型,在管理各種 Excel 檔案類型方面提供了靈活性。 (Excel 97-2003) 和.xlsx (Excel 2007 及更高版本) 格式。
創建 Visual Studio 主控台專案非常簡單。在 Visual Studio 中,按照以下步驟創建一個主控台應用程序:
打開 Visual Studio:在打開 Visual Studio 之前,請確保您的電腦上已安裝 Visual Studio。
文件
-> 新建
-> 項目
。在「建立新專案」方框的左側面板中,選擇您偏好的程式語言,例如 C#。
選擇「控制台應用程式」或「控制台應用程式」 (.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的簡便操作、互操作性和性能結合在一起,保證了精簡的開發過程和改進的應用能力。通過清晰的許可選項,根據項目需求量身定制許可模式,開發人員可以自信地選擇正確的模型。利用這些好處,開發人員可以有效地應對各種挑戰,同時保持合規性和透明度。