Диагностика исключения OLEDB при запросе Excel 2010

Чтобы запросить лист Excel через SQL, я использовал либо:

Dim excelConnectionString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strPath + ";Extended Properties=""Excel 8.0;IMEX=1;HDR=YES;"""

or

Dim excelConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " + strPath + ";Extended Properties=""Excel 12.0;IMEX=1;HDR=YES;"""

Теперь это работало нормально, пока я не установил Office 2010.

Теперь я получаю

Поставщик Microsoft.Ace.OLEDB.12.0 не зарегистрирован на этом исключении компьютера.

Как узнать правильную строку подключения/провайдера?


person Stefan Steiger    schedule 22.09.2009    source источник


Ответы (3)


Возможно, вы удалили компоненты Access Database Engine (ACE)? Они по-прежнему доступны для загрузки с MSDN как Драйвер системы Office 2007: компоненты подключения к данным.

person onedaywhen    schedule 23.09.2009

Я считаю, что для Excel 2010 это:

Dim excelConnectionString As String = "Provider=Microsoft.ACE.OLEDB.12.0;Password="""";User ID=Admin;Data Source=D:\\MyDocs\\oledb.xlsx;Mode=Share Deny Write;Extended Properties=""HDR=YES;"";Jet OLEDB:Engine Type=37"

Кажется, это работает в моей визуальной студии, я заставил Excel сгенерировать строку запроса, и в ней была дополнительная запись.

person JDunkerley    schedule 22.09.2009
comment
Я столкнулся с такой же ситуацией сегодня, и ваш ответ был очень полезным - person Tony Peterson; 18.09.2012
comment
Хотел бы я проголосовать за это 10 раз. Просто потратил несколько часов на эту проблему, и ваш ответ решил ее. Спасибо. - person Sergey Koulikov; 22.11.2012

Я загрузил и установил драйвер системы Office: компоненты подключения к данным, как указано выше, и приведенный ниже код сработал:

    string connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Password=\"\";User ID=Admin;Data Source=d:\\Sample.xlsx;Mode=Share Deny Write;Extended Properties=\"HDR=YES;\";Jet OLEDB:Engine Type=37";

    OleDbConnection connection = new OleDbConnection(connectionString);

    try
    {
        connection.Open();

        OleDbCommand command = new OleDbCommand("SELECT * FROM [Sheet1$]", connection);
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        adapter.SelectCommand = command;

        DataSet ds = new DataSet();
        adapter.Fill(ds);

        GridView1.DataSource = ds;
        GridView1.DataBind();

    }
    catch (Exception)
    {            
        //throw;
    }
    finally
    {
        connection.Close();
    }
person AFD    schedule 03.02.2010
comment
Почему я не получаю никаких результатов обратно. Однако это не делает мне никаких исключений. - person Meidi; 02.11.2012