C#导出数据库到Excel文件(.NET)

随着企业业务的增长和复杂性的增加,对数据进行有效的分析、共享和报告变得至关重要;而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对象使用的资源。

代码示例

csharp 复制代码
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对象使用的资源。

代码实例

csharp 复制代码
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文件!");
        }
    }
}

结果

本文演示如何在.NET平台使用C#导出数据库到Excel文件。

相关推荐
抽风侠2 分钟前
qt实现窗口的动态切换
开发语言·qt
liuweni11 分钟前
Next.js系统性教学:深入理解缓存交互与API缓存管理
开发语言·前端·javascript·经验分享·缓存·前端框架·交互
web1368856587126 分钟前
Spring Boot 中使用 @Transactional 注解配置事务管理
数据库·spring boot·sql
AI人H哥会Java27 分钟前
【JAVA】Java高级:多数据源管理与Sharding:在Spring Boot应用中实现多数据源的管理
java·开发语言
Thomas_YXQ28 分钟前
Unity3D项目为什么要使用FairyGUI
开发语言·unity·游戏引擎·unity3d·游戏开发
uyeonashi40 分钟前
【C++】刷题强训(day14)--乒乓球匡、组队竞赛、删除相邻数字的最大分数
开发语言·c++·算法·哈希算法
AskHarries1 小时前
如何利用EasyExcel导出带有选择校验框的excel?
java·后端·spring cloud·excel
egekm_sefg1 小时前
【Golang】——Gin 框架中的模板渲染详解
开发语言·golang·gin
小码编匠1 小时前
C#上位机实现高效示波器功能
后端·c#·.net
qq_10799104051 小时前
E172 ASP.NET+SQL+C#+LW+图书管理系统的设计与实现 配置 源码 文档 全套资料
sql·c#·asp.net