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