簡體   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