title: Open an Excel file in read-only mode using OleDb?
body: <p>We have some code that opens and loads data from Excel (XLSX and XLS) files. We use an OleDbConnection with Microsoft Access Database Engine (ACE).</p>
  
  <p>Occasionally this code throws an exception when the Excel file in question is on a network share and a user has the file open in Excel. I set about trying to fix this, and my assumption was that there was a setting I could add to the connection string to configure read-only access.</p>
  
  <p>In my research I found this question posed many times, and answered with various recommended solutions. Unfortunately, I find that none of them work, and I can't find any official Microsoft documentation on connection string settings for Excel.</p>
  
  <p>I'm starting to think that want I want to do is not possible, and would appreciate any help. </p>
  
  <p>Here is my test code: </p>
  
  <pre><code>const string excelFile = @"\\server\folder\file.xlsx";
  
  var connStrings = new[] {
      // Base, no "read only" configuration
      $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={excelFile};Extended Properties=\"Excel 12.0;IMEX=1\"",
  
      // Mode=Read
      //
      // C# ace oledb 12 read-only file
      // https://stackoverflow.com/questions/45165570/c-sharp-ace-oledb-12-read-only-file
      //
      // OleDbConnection Read Only Mode
      // https://social.msdn.microsoft.com/Forums/office/en-US/498cd52a-b0ee-4c8d-8943-2b76055b4130/oledbconnection-read-only-mode?forum=accessdev
      $"Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Data Source={excelFile};Extended Properties=\"Excel 12.0;IMEX=1\"",
  
      // READONLY=TRUE (and variations) in Extended Properties
      //
      // Excel source read only?
      // https://social.msdn.microsoft.com/Forums/sqlserver/en-US/d03e4b1a-6be0-4b3c-8b31-42d6fc79bf39/excel-source-read-only?forum=sqlintegrationservices
      //
      // Working with MS Excel(xls / xlsx) Using MDAC and Oledb
      // https://www.codeproject.com/Articles/37055/Working-with-MS-Excel-xls-xlsx-Using-MDAC-and-Oled
      $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={excelFile};Extended Properties=\"Excel 12.0;IMEX=1;READONLY=TRUE\"",
      $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={excelFile};Extended Properties=\"Excel 12.0;IMEX=1;ReadOnly=true;\"",
      $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={excelFile};Extended Properties=\"Excel 12.0;IMEX=1;MODE=READ;READONLY=TRUE\"",
  
      // Wild guesses
      $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={excelFile};Extended Properties=\"Excel 12.0;IMEX=1;READONLY=1\"",
      $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={excelFile};Extended Properties=\"Excel 12.0;IMEX=1;MODE=READ;READONLY=1\""
  };
  
  for ( var i = 0; i &lt; connStrings.Length; i++ ) {
      var conn = new OleDbConnection( connStrings[i] );
  
      try {
          conn.Open();
          Console.WriteLine( $"{i}: Success" );
          conn.Close();
      }
      catch ( OleDbException ex ) {
          Console.WriteLine( $"{i}: FAIL: {ex.Message}" );
      }
      finally {
          conn.Dispose();
      }
  }
  </code></pre>
  
  <p>When the target file is open in Excel on a network share, all connection string variations fail like so:</p>
  
  <pre><code>0: FAIL: The Microsoft Access database engine cannot open or write to the file ''. It is already opened exclusively by another user, or you need permission to view and write its data.
  1: FAIL: The Microsoft Access database engine cannot open or write to the file ''. It is already opened exclusively by another user, or you need permission to view and write its data.
  2: FAIL: The Microsoft Access database engine cannot open or write to the file ''. It is already opened exclusively by another user, or you need permission to view and write its data.
  3: FAIL: The Microsoft Access database engine cannot open or write to the file ''. It is already opened exclusively by another user, or you need permission to view and write its data.
  4: FAIL: The Microsoft Access database engine cannot open or write to the file ''. It is already opened exclusively by another user, or you need permission to view and write its data.
  5: FAIL: The Microsoft Access database engine cannot open or write to the file ''. It is already opened exclusively by another user, or you need permission to view and write its data.
  6: FAIL: The Microsoft Access database engine cannot open or write to the file ''. It is already opened exclusively by another user, or you need permission to view and write its data.
  </code></pre>