在生产环境中测试,无水印。
随时随地满足您的需求。
获得30天的全功能产品。
几分钟内就能启动并运行。
在您的产品试用期间,全面访问我们的支持工程团队。
在许多不同的业务环境中,将数据从 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。 IronXL 支持 Excel 2007及更高版本 (.xlsx) 和 Excel 97-2003 (.xls) 格式,提供了管理各种 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(Excel 97-2003)和 .xlsx(Excel 2007及更高版本)格式,在管理各种 Excel 文件类型方面提供了多功能性。
Visual Studio 控制台项目的创建非常简单。 在 Visual Studio 中,采取以下操作创建一个控制台应用程序:
打开 Visual Studio:确保在打开之前已经在您的计算机上安装了 Visual Studio。
开始一个新的项目:选择文件
-> 新建
-> 项目
。
在Create a new project
框的左侧面板中,选择您偏好的编程语言,例如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表中,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 即可轻松读写 Excel 数据。 通过将System.Data.SqlClient
与IronXL集成,开发人员可以使用参数化查询在SQL Server之间轻松移动数据,从而提高安全性并防止SQL注入。
最后,将 IronXL 和 Iron Software 添加到您的 .NET 开发工具组中,您就可以高效地处理 Excel、创建 PDF、进行 OCR 和利用条形码。 Iron Software 灵活的套件与 IronXL 的易用性、互操作性和性能相结合,保证了开发的简化和应用能力的提高。 有了根据项目要求定制的明确许可选项,开发人员就可以放心地选择合适的模式。 通过利用这些优势,开发人员可以有效地解决一系列难题,同时保持合规性和开放性。