2012-04-29 41 views
10

Próbuję połączyć się z plikiem mdb i rozumiem, że potrzebowałbym dostawcy danych w postaci Microsoft.OLEDB.JET.4.0. Niestety, nie mam go zainstalowanego na maszynie (uniwersyteckiej). Ponieważ nie zapewniają tego dostawcy, uważam, że powinna istnieć jakakolwiek droga.Jak połączyć się z plikiem MS Access (mdb) przy użyciu C#?

Jak mogę połączyć się z plikiem bez Microsoft.OLEDB.JET.4.0 lub czy jest jakaś alternatywa?

Mam następujący usługodawcy:

Available Ole DB providers

Próbowałem, używając OLE DB Provider for Microsoft Directory Services, do których podczas testowania połączenia, otrzymuję "test pomyślnie, ale niektóre ustawienia nie zostały zaakceptowane przez dostawcę. Wziąłem ten ciąg i użyłem go i mam ADsDSOObject' failed with no error message available, result code: DB_E_ERRORSINCOMMAND(0x80040E14).

Odpowiedz

18

Najprostszym sposobem, aby połączyć się poprzez OdbcConnection użyciu kodu jak ten

using System.Data.Odbc; 

using(OdbcConnection myConnection = new OdbcConnection()) 
{ 
    myConnection.ConnectionString = myConnectionString; 
    myConnection.Open(); 

    //execute queries, etc 

} 

gdzie myConnectionString to coś takiego:

myConnectionString = @"Driver={Microsoft Access Driver (*.mdb)};" + 
"Dbq=C:\mydatabase.mdb;Uid=Admin;Pwd=; 

Zobacz ConnectionStrings

W alternatywę można utworzyć DSN a następnie użyć tego DSN w ciągu połączenia

  • Otwórz Panel sterowania - Narzędzia administracyjne - ODBC Data Source Menedżer
  • idź do System DSN Page i ADD nowy DSN
  • Wybierz sterownik Microsoft Access (* .mdb) i naciśnij END
  • Ustaw nazwę DSN (Wybierz MyDSN dla tego przykładu)
  • Wybierz bazę danych do wykorzystania
  • Spróbuj Compact lub odzyskać polecenia, aby sprawdzić, czy połączenie działa

teraz swoją connectionString może być napisany w ten sposób

myConnectionString = "DSN=myDSN;" 
+1

Dziękujemy, że 'OdbcConnection' zrobił to. –

+0

, gdy MDW jest na zdjęciu, możesz potrzebować innego ciągu połączenia. zobacz [tutaj] (http://stackoverflow.com/a/18307822/426315) – itsho

+0

Całkiem dobra odpowiedź, możesz również rzucić okiem na to inne [pytanie] (https://stackoverflow.com/questions/18430415/entity -ramework-with-microsoft-access), aby sprawdzić, jak używać Microsoft Access z Entity Framewor. –

3

Należy użyć "Dostawcy Microsoft OLE DB dla sterowników ODBC", aby uzyskać dostęp do Microsoft Access. Oto przykładowy poradnik na temat używania go

http://msdn.microsoft.com/en-us/library/aa288452(v=vs.71).aspx

+0

który dał mi: 'Test połączenia nie powiodło się z powodu błędu w inicjowanie dostawcy. Nie znaleziono nazwy źródła danych i nie określono domyślnego sterownika. ". Czy uważasz, że ten dostawca nie istnieje? –

+0

Proszę wysłać ciąg połączenia ... – RajN

+0

Proszę odnieść ten link dostępnych ciągi połączeń http://connectionstrings.com/access-2007 – RajN

0

Spróbuj ..

using System.Data.OleDb; 

OleDbConnection dbConn; 

dConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=Registration.accdb;"); 
+0

Jeśli używasz programu MS Access 2010 –

+0

tak, używając programu Access 2010, ale rozszerzenie pliku to .mdb –

3

Jakie rozszerzenie pliku dostępu lub używasz? Jet OLEDB lub Ace OLEDB. Jeśli masz DB dostępu.MDB (aka Jet OLEDB)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data.Oledb 

namespace MembershipInformationSystem.Helpers 
{ 
    public class dbs 
    { 
     private String connectionString; 
     private String OleDBProvider = "Microsoft.JET.OLEDB.4.0"; \\if ACE Microsoft.ACE.OLEDB.12.0 
     private String OleDBDataSource = "C:\\yourdb.mdb"; 
     private String OleDBPassword = "infosys"; 
     private String PersistSecurityInfo = "False"; 

     public dbs() 
     { 

     } 

     public dbs(String connectionString) 
     { 
      this.connectionString = connectionString; 
     } 

     public String konek() 
     { 
      connectionString = "Provider=" + OleDBProvider + ";Data Source=" + OleDBDataSource + ";JET OLEDB:Database Password=" + OleDBPassword + ";Persist Security Info=" + PersistSecurityInfo + ""; 
      return connectionString; 
     } 
    } 
} 
+1

Czy klasa OleDbConnectionStringBuilder nie jest lepszym rozwiązaniem? http://msdn.microsoft.com/de-de/library/system.data.oledb.oledbconnectionstringbuilder(v=vs.110).aspx – uli78

3

Oto jak korzystać z OLEDB Jet lub Ace OLEDB dostępu DB:

using System.Data; 
using System.Data.OleDb; 

string myConnectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;" + 
          "Data Source=C:\myPath\myFile.mdb;" +          
          "Persist Security Info=True;" + 
          "Jet OLEDB:Database Password=myPassword;"; 
try 
{ 
    // Open OleDb Connection 
    OleDbConnection myConnection = new OleDbConnection(); 
    myConnection.ConnectionString = myConnectionString; 
    myConnection.Open(); 

    // Execute Queries 
    OleDbCommand cmd = myConnection.CreateCommand(); 
    cmd.CommandText = "SELECT * FROM `myTable`"; 
    OleDbDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); // close conn after complete 

    // Load the result into a DataTable 
    DataTable myDataTable = new DataTable(); 
    myDataTable.Load(reader); 
} 
catch (Exception ex) 
{ 
    Console.WriteLine("OLEDB Connection FAILED: " + ex.Message); 
} 
0

Innym Najprostszym sposobem łączenia jest poprzeczny przez OdbcConnection użyciu App.config Plik taki jak ten

<appSettings> 
    <add key="Conn" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|MyDB.mdb;Persist Security Info=True"/> 
    </appSettings> 

MyDB.mdb to mój plik bazy danych i jest obecny w bieżącym pierwotnym folder aplikacji z głównym plikiem exe.

Jeśli plik MDF ma hasło a następnie użyć jak ten

<appSettings> 
    <add key="Conn" value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|MyDB.mdb;Persist Security Info=True;Jet OLEDB:Database [email protected]"/> 
    </appSettings> 
Powiązane problemy