oracle 需要使用Crystal Reports和C#将具有200万行的表转换为.xlsx [已关闭]

5rgfhyps  于 2023-05-16  发布在  Oracle
关注(0)|答案(1)|浏览(113)

**关闭。**此题需要debugging details。目前不接受答复。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将帮助其他人回答这个问题。
昨天关门了。
Improve this question
我有一个Oracle存储过程的数据表。它正在生成100多万行。转换为.xls时,大小几乎为36 mb,并且显示“内存不足”异常。
我正在使用C#和Crystal Reports库。
有没有更好的方法来创建一个.xlsx文件(所有的数据和较小的大小)?
我使用C#和Crystal Report。

vmjh9lq9

vmjh9lq91#

是的,有比水晶报告更好的选择(我会抵制在这里咆哮)
假设你知道如何用C#编写一个简单的控制台应用程序。我把一些示例代码放在一起。只需使用System.Data.OracleClientNuGet包来访问数据库。我选择了EPPlus NuGet包来编写Excel文件,因为它是最常用的。其他的一些可能会很好地使用。
所以代码看起来像这样:

using System.Data.OracleClient; 
using OfficeOpenXml;

using var conn = new OracleConnection("replace with connectionstring parameters");
conn.Open();
using var cmd = conn.CreateCommand();
cmd.CommandText = "MyStoredProcedure()"; // or "SELECT id, name FROM MyTable"
using var reader = cmd.ExecuteReader();
using var excel = new ExcelPackage();
var workSheet = excel.Workbook.Worksheets.Add("Sheet1");
int rowNr = 1;
while (reader.Read())
{
    var id = reader.GetInt32(0);
    var name = reader.GetString(1);
    workSheet.Cells[rowNr, 1].Value = id;
    workSheet.Cells[rowNr, 2].Value = name;
    rowNr++;
}
excel.SaveAs("C:\\temp\\test.xlsx");

向将要返回表的存储过程提供连接参数和call语句。然后插入控制台写行用于调试目的,就可以开始了。
(Edit:忘记添加rowNr++,哦,好吧...)

相关问题