[英]Reading large volume of data from oracle database and export it as .dat file using C#
我们有一个查询,它将每月执行一次,并返回大小为1GB的数据。
这里使用的查询只是带有内部联接的选择查询,不涉及游标。
当前,他们正在Toad中执行此查询,并从输出窗口将数据导出为.dat文件。
请注意,使用Toad手动进行此操作需要2个小时的时间。
之后,他们将.dat文件中的标题文本更改为有意义的名称,以与我们的客户共享。
我想通过创建将执行此过程的exe来自动执行此过程。
代码快照如下所示
using (OracleConnection conn = new OracleConnection())
{
conn.ConnectionString = ConfigurationManager.ConnectionStrings["connectionString"].ConnectionString;
conn.Open();
using (OracleCommand cmd = new OracleCommand(commandText))
{
cmd.Connection = conn;
using (OracleDataReader dtReader = cmd.ExecuteReader())
{
outputContent = new StringBuilder();
while (dtReader != null && dtReader.Read())
{
for (int i = 0; i < dtReader.FieldCount; i++)
{
outputContent.Append(dtReader[i]);
outputContent.Append(delimiter);
}
outputContent = outputContent.Replace(delimiter, Environment.NewLine, outputContent.Length - 1, 1);
}
}
}
}
outputPath = string.Format(ConfigurationManager.AppSettings["OutputPath"], DateTime.Now.Ticks);
outputStream = new StreamWriter(outputPath, true);
//Export
outputStream.Write(outputContent.ToString());
outputStream.Close();
从日志中,它可以知道,执行读取器语句在几秒钟内完成。
但是在8小时的时间后,从datareader读取数据会引发“异常消息为ORA-03113:System.Data.OracleClient.OracleConnection.CheckError(OciErrorHandle errorHandle,Int32 rc)的通信通道上的文件结束”。
任何人都可以让我知道以上方法很好地处理1GB大小的数据吗? 要么
还有其他更好的方法吗?
谢谢,Gayathri
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.