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