繁体   English   中英

使用C#从oracle数据库读取大量数据并将其导出为.dat文件

[英]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

也许你可以尝试

CommandBehavior =顺序访问

MSDN

使用SequentialAccess检索大值和二进制数据

样品使用方法

您可以直接从PL / SQL过程导出数据,并具有从SqlPlus启动它的外壳文件(而不是exe)。

有关在导出数据的程序中放置什么内容,请参见SO上的此问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM