月度海量數據下載 (百萬行級),原方案用 ORDER BY 在資料庫端排序導致:
SELECT ... ORDER BY 到本地引擎排序
每次排序文件名不同 → 複製到固定臨時目錄 + 固定文件名 → 配置 Schema → 排序 → 複製回目標路徑。
_Sorted)
int dotPos = fileName.IndexOf(".");
string target = fileName.Substring(0, dotPos) + "_Sorted" + fileName.Substring(dotPos);
Database db = DatabaseFactory.CreateDatabase("DataStore");
string sql = CreateSql(); // SELECT ... ORDER BY ...
DbCommand cmd = db.GetSqlStringCommand(sql);
using (IDataReader dr = db.ExecuteReader(cmd)) {
using (StreamWriter sw = new FileInfo(sortedPath).CreateText()) {
while (dr.Read()) {
var sb = new StringBuilder();
for (int i = 0; i < dr.FieldCount - 1; i++)
sb.Append(dr[i] + ",");
sb.Append(dr[dr.FieldCount - 1]);
sw.WriteLine(sb.ToString());
}
}
}
File.Delete(targetPath);
File.Copy(sortedPath, targetPath);
IDataReader 避免 DataSet 全量載入內存