C# と FileHelpers ライブラリを使用して、大きな SQL Server テーブルを CSV ファイルにエクスポートしようとしています。C# と bcp も考えられますが、FileHelpers は bcp よりも柔軟性があると思いました。速度は特別な要件ではありません。
OutOfMemoryException
以下のコードが実行されたときにスローされstorage.ExtractRecords()
ます (重要度の低いコードは省略されています)。
SqlServerStorage storage = new SqlServerStorage(typeof(Order));
storage.ServerName = "SqlServer";
storage.DatabaseName = "SqlDataBase";
storage.SelectSql = "select * from Orders";
storage.FillRecordCallback = new FillRecordHandler(FillRecordOrder);
Order[] output = null;
output = storage.ExtractRecords() as Order[];
以下のコードが実行されると、「タイムアウトが期限切れになりました」がスローされますlink.ExtractToFile()
。
SqlServerStorage storage = new SqlServerStorage(typeof(Order));
string sqlConnectionString = "Server=SqlServer;Database=SqlDataBase;Trusted_Connection=True";
storage.ConnectionString = sqlConnectionString;
storage.SelectSql = "select * from Orders";
storage.FillRecordCallback = new FillRecordHandler(FillRecordOrder);
FileDataLink link = new FileDataLink(storage);
link.FileHelperEngine.HeaderText = headerLine;
link.ExtractToFile("file.csv");
SQL クエリの実行にデフォルトの 30 秒以上かかるため、タイムアウト例外が発生します。残念ながら、FileHelpers のドキュメントには、SQL コマンドのタイムアウトをより高い値に設定する方法が見つかりません。
テーブル全体がエクスポートされるまで、小さなデータ セットで SQL 選択をループすることを検討できますが、手順が複雑すぎます。大きな DB テーブルのエクスポートで FileHelpers を使用する簡単な方法はありますか?