Shashank Srivastava
Shashank Srivastava

Reputation: 125

OleDBException when reading an open excel file

I have an excel file and an oledb connection to it. When reading data while file is opened in windows, it throws the following error (at Adapter.Fill method).

However, the code runs fine when file is not opened manually.

private System.Data.DataSet GetExcelData()
{
    // Create new DataSet to hold information from the worksheet.
    System.Data.DataSet objDataset1 = new System.Data.DataSet();
    DataTable dt = new DataTable();
    try
    {
        string path = ConfigurationManager.AppSettings["ExcelFilePath"];
        //string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;";

        string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;\"";

        OleDbConnection objConn = new OleDbConnection(connectionString);
        objConn.Open();

        //String strConString = "SELECT * FROM [Data Version5.2$A2:ZZ] where [Status] = 'aa'";//Status
        String strConString = "SELECT * FROM [Data Version5.2$A2:ZZ] where [Status] IS NULL OR [Status]='SubReport'";//Status SubReport

        OleDbCommand objCmdSelect = new OleDbCommand(strConString, objConn);
        OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();

        // Pass the Select command to the adapter.  
        objAdapter1.SelectCommand = objCmdSelect;

        // Fill the DataSet with the information from the work sheet.
        objAdapter1.Fill(objDataset1, "ExcelData");

        objConn.Close();
    }
    catch (Exception ex)
    {
        throw ex;
    }

    return objDataset1;
}

The error message is

enter image description here

Upvotes: 3

Views: 4278

Answers (1)

Sid Holland
Sid Holland

Reputation: 2921

Assuming you don't need to write to the file, try adjusting your connection string to include the read only mode (Mode=Read). I have that in all of mine (where I don't need to write to the file) and I've never had a problem reading from workbooks that are already open:

string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
    path + ";Mode=Read;Extended Properties=\"Excel 12.0 Xml;HDR=YES;IMEX=1;\"";

I also don't tend to read Excel files as XML, so the Extended Properties for my connection strings are Excel 12.0;HDR=YES;IMEX=1;

Upvotes: 4

Related Questions