Intermittent “System resource exceeded” exception for OleDB connection to Microsoft Access data file

后端 未结 1 1584
天涯浪人
天涯浪人 2021-01-14 03:51

I\'m experiencing a seemingly random \"System resource exceeded\" exception when running my code. The idea behind my program is that a third party piece of software is conti

1条回答
  •  伪装坚强ぢ
    2021-01-14 04:19

    A couple of things I would try in your case:

    1. Since the user of the database is the application only, I would open the database in exclusive mode, this will help the driver get rid of the overhead of managing lock files (and should speed-up access to the db too).
    // Share Mode=12 - exclusive mode (16 for multi-user)
    string constr = @"Provider=Microsoft.ACE.OLEDB.12.0;" +
                     "Mode=12;Data Source = C:\datafile.res;user id=;password=;";
    
    1. Open a connection to the Access database when your program start, and leave it open until the application closes.
      In tight loops, lock-file issues creep up and cause all sorts of strange issues that are hard to debug.
      Just have a dummy table with a single record in the Access database, then open that table to read the record, but keep a permanent reference to that connection:
    private OleDbCommand PermanentCommand;
    
    void KeepLinkOpen() {
       if (PermanentCommand == null || 
           PermanentCommand.Connection == null || 
           PermanentCommand.Connection.State == System.Data.ConnectionState.Closed) {
    
         OleDbConnection conn = new OleDbConnection(connectionString);
         conn.Open();
         PermanentCommand = new OleDbCommand("SELECT * FROM DummyTable", conn);
         PermanentCommand.ExecuteReader(System.Data.CommandBehavior.Default);
      }    
    }
    
    void Disconnect() {
      if (PermanentCommand != null) {
          if (PermanentCommand.Connection != null) {
              PermanentCommand.Connection.Close();
          }
          PermanentCommand.Dispose();
          PermanentCommand = null;
      }
    }
    

    0 讨论(0)
提交回复
热议问题