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