在实际环境中测试
在生产中测试无水印。
随时随地为您服务。
在许多不同的业务环境中,将数据从 Excel 导入 SQL Server 通常是必要的。 从 Excel 文件中读取数据并将其输入 SQL Server 数据库是本活动涉及的任务。 虽然导出向导经常被使用,但 IronXL 提供了更加程序化和灵活的数据处理方法。 IronXL.Excel 是一个功能强大的 C# 库,可以从文件中导入 Excel 数据; 因此,可以加快这一操作。 为此,本篇文章将提供一份详尽的操作指南,涉及使用 C# 将 Excel 导入 SQL Server 的配置、执行和增强。
设置开发环境
准备 Excel 文件
连接到您的 SQL Server 数据库
使用 IronXL.Excel 从 Excel 文件读取数据
使用 IronPDF 导出数据并生成 PDF 报告
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 的流畅接口。
开发人员可以使用 IronXL.Excel 对 Excel 文件进行数据读写。 制作新的 Excel 文件和编辑已有的 Excel 文件都很简单。
与某些其他库相比,IronXL.Excel 无需在托管应用程序的计算机上安装 Microsoft Excel。 因此,它非常适合服务器端应用程序。
该库支持 .xls 和 .xls 文件格式,从而提供了管理各种 Excel 文件类型的多功能性。(Excel 97-2003)和 .xlsx(Excel 2007 及更高版本)格式。
Visual Studio 控制台项目的创建非常简单。 在 Visual Studio 中,采取以下操作创建一个控制台应用程序:
打开 Visual Studio:在打开 Visual Studio 之前,请确保已在计算机上安装。
启动新项目:选择 "文件"->"新建"->"项目"。
在 "创建新项目 "框的左侧面板中,选择您喜欢的编程语言,例如 C#。
选择 "控制台应用程序 "或 "控制台应用程序(.NET Core)从可用项目模板列表中选择 ` 模板。
在名称区域,为您的项目命名。
决定保存项目的位置。
点击创建启动控制台应用项目。
由于即将更新,需要安装 IronXL 库。 最后,启动 NuGet 软件包管理器控制台并键入以下命令即可完成翻译过程:
Install-Package IronXL.Excel
使用 NuGet 软件包管理器搜索 IronXL
软件包是另一种方法。 这样,我们就可以从链接到 IronXL 的 NuGet 软件包中选择要下载的软件。
有了 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
使用 "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 表,并管理整个过程。
错误处理和优化对于确保稳健高效的导入流程至关重要。 实施强大的错误处理功能可以管理潜在的问题,如文件丢失、数据格式无效和 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 即可轻松读写 Excel 数据。 通过将 System.Data.SqlClient
与 IronXL 集成,开发人员可以使用参数化查询在 SQL 服务器之间轻松移动数据,从而提高安全性并防止 SQL 注入。
最后,将 IronXL 和 Iron Software 添加到您的 .NET 开发工具组中,您就可以高效地处理 Excel、创建 PDF、进行 OCR 和利用条形码。 Iron Software 灵活的套件与 IronXL 的易用性、互操作性和性能相结合,保证了开发的简化和应用能力的提高。 有了根据项目要求定制的明确许可选项,开发人员就可以放心地选择合适的模式。 通过利用这些优势,开发人员可以有效地解决一系列难题,同时保持合规性和开放性。