C#教程

关注公众号 jb51net

关闭
首页 > 软件编程 > C#教程 > C#数据库数据导出至Excel

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

作者: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.定义文件路径

2.创建Excel工作簿实例

3.建立SQLite连接

4.获取数据库中的所有表名

通过调用GetSchema("Tables")方法从数据库中获取所有表的名字,并将结果存储在一个DataTable对象中。

5.遍历每个表并处理

6.读取表数据并写入Excel

构建SQL查询语句以选择当前表中的所有数据,并使用SQLiteCommand执行此查询。

使用SQLiteDataReader读取查询结果:

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.定义文件路径

2.创建Excel工作簿实例

3.定义连接字符串

定义一个连接字符串,用于连接到指定路径的Access数据库。这里使用的是Microsoft.ACE.OLEDB.12.0提供程序,并指定了不持久化安全信息。

4.建立OleDb连接

使用OleDbConnection类创建一个新的连接对象,并通过调用Open()方法打开与Access数据库的连接。

5.获取所有表名

通过调用GetSchema("Tables")方法从数据库中获取所有表的名字,并将结果存储在一个DataTable对象中。

6.遍历每个表并处理(跳过系统表)

7.读取表数据并写入Excel

构建SQL查询语句以选择当前表中的所有数据,并使用OleDbCommand执行此查询。

使用OleDbDataReader读取查询结果:

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的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文