0

这是我的代码:

    private const string CONNECTION_STRING
    = "Driver={Microsoft dBase Driver (*.dbf)};"
    + "collatingsequence=ASCII;"
    + "defaultdir={0};"
    + "driverid=277;"
    + "maxbuffersize={1};"
    + "pagetimeout={2}";

    string connString = string.Format(CONNECTION_STRING, filePath, MAX_BUFFER_SIZE, PAGE_TIMEOUT);

    using (var _conn = new System.Data.Odbc.OdbcConnection(connString))
    {
      _conn.Open();
      using (var _comm = _conn.CreateCommand())
      {
        _comm.CommandText = QUERY_STRING;
        _comm.CommandType = CommandType.Text;
        using (var rdr = _comm.ExecuteReader())
        {
          while (rdr.Read())
          {
            /*Do something*/
          }
        }
      }
    }

我收到的错误消息是 SQL 执行错误。执行的 SQL 语句:SELECT * FROM MyTable 错误源 odbcjt32.dll 错误消息 错误 [HY001][Microsoft][ODBC dBase Driver] 超出系统资源。

在查询之前和之后打开了几个 Gig 的 RAM 和 HD。这总是在第一次通过时有效,但在所有连续通过时都失败。

在 Win 7 64 和 .NET 4.0 中运行。

当我收到错误时,我最终重新启动以清除它。虽然我还没有尝试过只进行 GC 刷新。

4

1 回答 1

0

由于我可以可靠地读取文件一次,因此我最终将整个文件读入内存,然后就使用了它。每个会强制转储内存空间的事件也会解决连接不释放文件锁定的问题,因此将文件重新加载到内存中也不是问题。

如果我最终找到更好的解决方案,我也会发布它。然而,我认为这是一个死线,因为项目已经关闭、交付和支付。

于 2012-01-23T16:13:51.833 回答