我希望使用 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 选择,直到整个表被导出,但是这个过程太复杂了。是否有在大型数据库表导出上使用 FileHelpers 的简单方法?