C#实现导出数据库数据到Excel文件

 更新时间:2024年12月09日 15:37:16   作者:Eiceblue  
利用C#编程语言的强大特性和丰富的.NET库支持,开发人员可以高效地完成从数据库到Excel文件的数据迁移,下面就跟随小编一起学习一下具体操作吧

随着企业业务的增长和复杂性的增加,对数据进行有效的分析、共享和报告变得至关重要;而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的资料请关注脚本之家其它相关文章!

相关文章

  • RandomId生成随机字符串详解实例

    RandomId生成随机字符串详解实例

    本文主要介绍RandomId 生成随机字符串的方法,大家参考使用吧
    2013-12-12
  • C#净化版WebApi框架的实现

    C#净化版WebApi框架的实现

    这篇文章主要介绍了C#净化版WebApi框架的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • 使用C#实现数据结构堆的代码

    使用C#实现数据结构堆的代码

    这篇文章主要介绍了使用C#实现数据结构堆,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • C# 变量作用域常用说明小结

    C# 变量作用域常用说明小结

    在C#编程中,变量作用域是一个重要概念,指的是变量在何处被定义和可以访问的范围,正确理解和使用变量作用域有助于提升代码的可读性和避免潜在的错误,感兴趣的可以了解一下
    2024-10-10
  • 亲自教你实现栈及C#中Stack源码分析

    亲自教你实现栈及C#中Stack源码分析

    大家都知道栈的实现方式有两种,一种是基于数组实现的顺序栈,另一种是基于链表实现的链式栈。这篇文章主要介绍了手把手教你实现栈以及C#中Stack源码分析,需要的朋友可以参考下
    2021-09-09
  • C# Oracle数据库操作类实例详解

    C# Oracle数据库操作类实例详解

    这篇文章主要介绍了C# Oracle数据库操作类实例,进行数据库操作时很有实用价值,需要的朋友可以参考下
    2014-07-07
  • WPF中窗体最大化问题的解决方法

    WPF中窗体最大化问题的解决方法

    这篇文章主要给大家介绍了关于WPF中窗体最大化问题的解决方法,文中通过示例代码介绍的非常详细,对大家学习或者使用wpf具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • C#彩色图片灰度化算法实例

    C#彩色图片灰度化算法实例

    这篇文章主要介绍了C#彩色图片灰度化算法,以实例形式对灰度化算法进行了较为详细的介绍,非常具有实用价值,需要的朋友可以参考下
    2014-10-10
  • C#实现DevExpress本地化实例详解

    C#实现DevExpress本地化实例详解

    这篇文章主要介绍了C#实现DevExpress本地化,以实例形式较为详细的分析了DevExpress本地化的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-08-08
  • C#实现多选项卡的浏览器控件

    C#实现多选项卡的浏览器控件

    这篇文章主要为大家详细介绍了C#实现多选项卡的浏览器控件的相关资料,感兴趣的小伙伴们可以参考一下
    2016-03-03

最新评论