C#实现导出数据库数据到Excel文件
作者:Eiceblue
随着企业业务的增长和复杂性的增加,对数据进行有效的分析、共享和报告变得至关重要;而Excel,作为一款广泛接受的数据处理工具,提供了强大的计算能力、可视化选项以及与多种数据分析工具的兼容性,使得它成为从数据库导出数据的理想选择。通过利用C#编程语言的强大特性和丰富的.NET库支持,开发人员不仅能够高效地完成从数据库到Excel文件的数据迁移,还可以根据特定业务逻辑定制导出过程,确保数据的准确性和完整性,同时提升用户体验并满足不同用户的报表需求。
本文将介绍如何在.NET平台使用C#代码导出数据库数据到Excel文件。
本文所使用的方法需要用到,免费的Free Spire.XLS for .NET,以及System.Data.SQLite和System.Data.OleDb。NuGet:
PM> Install-Package FreeSpire.XLS PM> Install-Package System.Data.SQLite PM> Install-Package System.Data.OleDb
导出SQLite数据库到Excel文件
System.Data.SQLite
模块可以直接从SQLite数据库文件中读取数据。读取到数据之后,我们可以使用Free Spire.XLS for .NET创建Excel文件并将数据写入其中。以下是操作步骤及代码示例:
1.定义文件路径
- 设置SQLite数据库文件路径为Sample.db。
- 设置Excel输出文件路径为output/DatabaseToExcel.xlsx。
2.创建Excel工作簿实例
- 创建一个新的Workbook实例以表示要导出的Excel文件。
- 清除默认包含的工作表,确保工作簿为空。
3.建立SQLite连接
- 使用SQLiteConnection类创建一个到SQLite数据库的新连接,并通过提供数据源和版本号来初始化连接字符串。
- 打开与SQLite数据库的连接。
4.获取数据库中的所有表名
通过调用GetSchema("Tables")方法从数据库中获取所有表的名字,并将结果存储在一个DataTable对象中。
5.遍历每个表并处理
- 遍历DataTable对象中的每一行,提取表名。
- 对于每个表,添加一个新的工作表到Excel工作簿中,并将工作表命名为对应的表名。
6.读取表数据并写入Excel
构建SQL查询语句以选择当前表中的所有数据,并使用SQLiteCommand执行此查询。
使用SQLiteDataReader读取查询结果:
- 获取列名并将它们写入新工作表的第一行。
- 设置第一行(即标题行)的字体样式为粗体,字号为12。
- 遍历数据行,将每一行的数据值写入相应的单元格中,同时自动调整每列的宽度以适应内容。
- 设置数据行的字体大小为11。
7.关闭数据库连接
完成所有表的数据读取和写入后,关闭与SQLite数据库的连接。
8.保存Excel文件
将生成的工作簿保存到之前定义的Excel文件路径。
释放workbook对象使用的资源。
代码示例
using System.Data; using System.Data.SQLite; using Spire.Xls; namespace SQLiteToExcel { class Program { static void Main(string[] args) { // SQLite数据库路径 string sqliteFilePath = "Sample.db"; // Excel文件路径 string excelFilePath = "output/DatabaseToExcel.xlsx"; // 创建一个新的工作簿实例 Workbook workbook = new Workbook(); // 清除默认的工作表 workbook.Worksheets.Clear(); // 创建SQLite连接 using (SQLiteConnection connection = new SQLiteConnection($"Data Source={sqliteFilePath};Version=3;")) { connection.Open(); // 获取所有表名 DataTable tables = connection.GetSchema("Tables"); // 遍历每个表 foreach (DataRow tableRow in tables.Rows) { string tableName = tableRow["TABLE_NAME"].ToString(); // 创建一个新的工作表 Worksheet sheet = workbook.Worksheets.Add(tableName); // 获取表数据 string selectQuery = $"SELECT * FROM [{tableName}]"; using (SQLiteCommand command = new SQLiteCommand(selectQuery, connection)) { using (SQLiteDataReader reader = command.ExecuteReader()) { // 获取列名并写入第一行 for (int col = 0; col < reader.FieldCount; col++) { sheet.Range[1, col + 1].Value = reader.GetName(col); } // 设置标题行的字体样式 sheet.Rows[0].Style.Font.IsBold = true; sheet.Rows[0].Style.Font.Size = 12; // 写入数据行 int rowIndex = 2; while (reader.Read()) { for (int col = 0; col < reader.FieldCount; col++) { sheet.Range[rowIndex, col + 1].Value = reader.GetValue(col).ToString(); // 自动调整列宽 sheet.AutoFitColumn(col + 1); } // 设置数据行的字体样式 sheet.Rows[rowIndex - 1].Style.Font.Size = 11; rowIndex++; } } } } connection.Close(); } // 保存Excel文件 workbook.SaveToFile(excelFilePath); workbook.Dispose(); Console.WriteLine("数据已成功导出到Excel文件!"); } } }
结果
导出Access数据库到Excel文件
System.Data.OleDb可以直接读取Access数据库中的数据,我们可以使用同样的方法来导出Access数据库到Excel文件。以下是操作步骤及代码示例:
以下是将提供的C#代码转换为操作步骤的介绍,用于将Access数据库中的数据导出到Excel文件:
1.定义文件路径
- 设置Access数据库文件路径为Database.accdb。
- 设置Excel输出文件路径为output/DatabaseToExcel.xlsx。
2.创建Excel工作簿实例
- 创建一个新的Workbook实例以表示要导出的Excel文件。
- 清除默认包含的工作表,确保工作簿为空。
3.定义连接字符串
定义一个连接字符串,用于连接到指定路径的Access数据库。这里使用的是Microsoft.ACE.OLEDB.12.0提供程序,并指定了不持久化安全信息。
4.建立OleDb连接
使用OleDbConnection类创建一个新的连接对象,并通过调用Open()方法打开与Access数据库的连接。
5.获取所有表名
通过调用GetSchema("Tables")方法从数据库中获取所有表的名字,并将结果存储在一个DataTable对象中。
6.遍历每个表并处理(跳过系统表)
- 遍历DataTable对象中的每一行,提取表名。
- 跳过非用户定义的表(例如,系统表)。这一步可以通过检查TABLE_TYPE列来完成,只处理类型为TABLE的表。
- 对于每个用户定义的表,添加一个新的工作表到Excel工作簿中,并将工作表命名为对应的表名。
7.读取表数据并写入Excel
构建SQL查询语句以选择当前表中的所有数据,并使用OleDbCommand执行此查询。
使用OleDbDataReader读取查询结果:
- 获取列名并将它们写入新工作表的第一行。
- 设置第一行(即标题行)的字体样式为粗体,字号为12。
- 遍历数据行,将每一行的数据值写入相应的单元格中,同时自动调整每列的宽度以适应内容。
- 设置数据行的字体大小为11。
8.关闭数据库连接
完成所有表的数据读取和写入后,关闭与Access数据库的连接。
9.保存Excel文件
将生成的工作簿保存到之前定义的Excel文件路径。
释放workbook对象使用的资源。
代码实例
using System.Data; using System.Data.OleDb; using Spire.Xls; namespace AccessToExcel { class Program { static void Main(string[] args) { // Access数据库路径 string accessFilePath = "Database.accdb"; // Excel文件路径 string excelFilePath = "output/DatabaseToExcel.xlsx"; // 创建一个新的工作簿实例 Workbook workbook = new Workbook(); // 清除默认的工作表 workbook.Worksheets.Clear(); // 定义Access数据库的连接字符串 string connectionString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={accessFilePath};Persist Security Info=False;"; // 创建OleDb连接 using (OleDbConnection connection = new OleDbConnection(connectionString)) { connection.Open(); // 获取所有表名 DataTable tables = connection.GetSchema("Tables"); // 遍历每个表 foreach (DataRow tableRow in tables.Rows) { // 跳过系统表,您可以在这里添加更多条件 if (tableRow["TABLE_TYPE"].ToString() != "TABLE") continue; string tableName = tableRow["TABLE_NAME"].ToString(); // 创建一个新的工作表 Worksheet sheet = workbook.Worksheets.Add(tableName); // 获取表数据 string selectQuery = $"SELECT * FROM [{tableName}]"; using (OleDbCommand command = new OleDbCommand(selectQuery, connection)) { using (OleDbDataReader reader = command.ExecuteReader()) { // 获取列名并写入第一行 for (int col = 0; col < reader.FieldCount; col++) { sheet.Range[1, col + 1].Value = reader.GetName(col); } // 设置标题行的字体样式 sheet.Rows[0].Style.Font.IsBold = true; sheet.Rows[0].Style.Font.Size = 12; // 写入数据行 int rowIndex = 2; while (reader.Read()) { for (int col = 0; col < reader.FieldCount; col++) { sheet.Range[rowIndex, col + 1].Value = reader.GetValue(col)?.ToString() ?? ""; // 自动调整列宽 sheet.AutoFitColumn(col + 1); } // 设置数据行的字体样式 sheet.Rows[rowIndex - 1].Style.Font.Size = 11; rowIndex++; } } } } connection.Close(); } // 保存Excel文件 workbook.SaveToFile(excelFilePath); workbook.Dispose(); Console.WriteLine("数据已成功导出到Excel文件!"); } } }
结果
以上就是C#实现导出数据库数据到Excel文件的详细内容,更多关于C#数据库数据导出至Excel的资料请关注脚本之家其它相关文章!