2017-02-03 6 views
1

Я создал MDB (базы данных Access 97) файл с этим кодом,Непризнанные Формат базы данных При попытке открыть доступ к 97 базы данных

string DBPath = @"C:\\Users\\Desktop\\test.mdb"; 

     // create DB via ADOX if not exists 
     if (!File.Exists(DBPath)) 
     { 
      ADOX.Catalog cat = new ADOX.Catalog(); 
      cat.Create("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + DBPath); 
      cat = null; 
     } 

     // connect to DB 
     OleDbConnection con = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + DBPath); 
     con.Open(); 

Когда я пытаюсь открыть созданную базу данных он дает «непризнанный формат базы данных» ошибка.

Я использую Microsoft Access 97, я думаю, это 32 бит. Я пробовал все цели платформы (x86, x64 & Любой процессор) от C#, но все та же проблема.

Оба доступа 97 и Microsoft Office 2010 установлены на моем компьютере.

Ошибка такая:

enter image description here

Не могли бы вы мне помочь?

+0

Я вижу, что вы пытаетесь соединиться с ACE OLEDB 12,0 водитель вместо того, чтобы использовать драйвер Jet OLEDB. Используйте только драйвер Jet OLEDB для MS Access 97/2000. –

+0

Как настроить объекты C# на настройках сборки? Как называется драйвер Jet OLEDB Database Driver, я не могу найти его в ссылках? – bakin

+0

Изменен «Microsoft.ACE.OLEDB.12.0» на «Microsoft.Jet.OLEDB.4.0» и все та же ошибка, пока файл openind mdb – bakin

ответ

3

После проведения глубокого исследования в часах, я нашел 2 основные вопросы, касающиеся подключения к базе данных:

  1. Использование обратной косой черты последовательности в строковый литерал не преобразовывая последовательность экранирующего символа, вместо этого вы должны использовать один символ для путь к файлу:

    string DBPath = @"C:\Users\Desktop\test.mdb"; 
    
  2. строка подключения поставщика, чтобы соединиться с базой данных Access в вопросе использует Microsoft ACE OLE DB 12.0, который поддерживается только с помощью Access 2007, а затем в формате ACCDB (используйте Microsoft Jet 4.0 provider).

    Кроме того, в части создания базы данных, которая включает в себя метод ADOX.Catalog.Create(), он должен включать параметр Jet OLEDB:Engine Type, чтобы указать, какая версия версии используется. По умолчанию он устанавливается в Jet OLEDB:Engine Type=5, что означает формат файла Access 2000 (вызовет unrecognized database format ошибку в Access 97), следовательно, заставить ADOX создание MDB с форматом Access 97 необходимо установить Engine Type=4, как показано ниже:

    // database creation 
    if (!File.Exists(DBPath)) 
    { 
        ADOX.Catalog cat = new ADOX.Catalog(); 
        cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DBPath + ";Jet OLEDB:Engine Type=4"); 
        // other stuff 
    } 
    
    // connect to database using Jet OLE DB provider 
    OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DBPath); 
    

Дополнительная ссылка:

Unrecognized MDB created by ADOX