Was ist der ConnectionString zu erstellen, ein OdbcConnection-für eine access-mdb-Datei
Ich möchte eine Verbindung von c# zu einer Access-MDB-Datei mithilfe von Odbc.
Wenn ich versuche ausführen
OdbcConnection con = new OdbcConnection(
"Driver={Microsoft Access Driver (*.mdb)};DBQ=c:\\temp\\test.mdb;");
Bekomme ich die folgende exception:
exc {System.Data.Odbc.OdbcException (0x80131937): ERROR [IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
at System.Data.Odbc.OdbcConnection.HandleError(OdbcHandle hrHandle, RetCode retcode)
at System.Data.Odbc.OdbcConnectionHandle..ctor(OdbcConnection connection, OdbcConnectionString constr, OdbcEnvironmentHandle environmentHandle)
at System.Data.Odbc.OdbcConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection)
at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
at System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.Odbc.OdbcConnection.Open()
:
Was ist hier das Problem? Es beschwert sich über die "name der Datenquelle nicht gefunden und kein Standardtreiber angegeben", aber ich angegeben einen Treiber?
Bekam ich den connectionstring mit Hilfe von hier http://www.connectionstrings.com/access#net-framework-data-provider-for-odbc
- können Sie ersetzen Sie den Pfad mit
c:\\temp\\test.mdb
zuc:\temp\test.mdb
. dann versuchen Sie es erneut. - In C# verwenden Sie entweder eine wörtliche Zeichenfolge und verwenden Sie einfache umgekehrte Schrägstriche oder ein normaler string und verwenden Sie doppelte umgekehrte Schrägstriche:
@"c:\temp\test.mdb"
oder"c:\\temp\\test.mdb"
. - Könnte es sein, das provider-Zeichenfolge, die es nicht erkennen - es kann ein bisschen iffy über, die. Prüfen Sie hier: connectionstrings.com/access-2007 sieht aus wie Sie haben zu verwenden
Driver=
, nicht sicher, ob das das gleiche ist wieProvider=
aber die Seite scheint den Unterschied machen für ODBC - vielleicht fehlt Ihnen nur noch eine Erweiterung Namen des Fahrers name - Die Jet-ODBC-provider-Zugriff ist nur auf 32-bit-Anwendungen. Wenn Ihr c# Projekt Kompilier-Ziel 64 bit (mit jeder cpu), ändern Sie es auf x86.
- HansUp ist richtig, ich habe gerade herausgefunden mich und postet es als Antwort. @Charleh: Sie verwenden Driver= Odbc und Provider= für OldDB. Ihre Connection strings sind unterschiedlich und Sie können nicht verwenden Sie eine für die anderen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Oh, ich habe gerade die Quelle meines Problems. Ich denke, dass auch andere vielleicht darauf stoßen, wie gut:
Ich Schreibe ein .net-Anwendung, die läuft in der 32bit .net vm, wenn das Betriebssystem ist ein 32bit Windows-und in der 64bit vm, wenn das Betriebssystem ist ein 64bit Windows. Mit der 2 odbcad32.exe in syswow und system32 (ja, beide sind benannt odbcad32.exe obwohl die eine im system32 für 64bit, und ja, das ist richtig gut), fand ich heraus, dass ich nur noch die Access-MdB-Treiber installiert für odbc32 bit. Also, wenn meine Anwendung läuft auf einem 64bit Windows .Netto will die 64bit-Version von odbc-und nicht die Fahrer.
Ok, so, jetzt brauche ich eine 64-bit-Access-Treiber, die nicht vorhanden ist nach dieser geben Sie den link-Beschreibung hier. Ok, der post ist alt, also vielleicht gibt es ein jetzt?
Wenn ich Kraft der Plattform in meinem Projekt-Einstellungen auf x86, es funktioniert. Natürlich sind auch diese Kräfte meine app läuft in der 32bit .net-vm.
Driver={Microsoft Access Driver (*.mdb)};DBQ=...;
oderDriver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=...;
Verwenden web-config-Einstellung wie das Beispiel unten
Können Sie erstellen einer udl-Datei, erstellen Sie Ihre Verbindung, und öffnen Sie dann die Datei in Editor zu sehen, der Verbindungszeichenfolge. Das hat mir geholfen in der Vergangenheit -
http://msdn.microsoft.com/en-us/library/e38h511e%28v=vs.71%29.aspx
Anhand dieser können Sie erstellen, die eine regelmäßige Verbindung, wie Sie in der odbc-tool und stellen Sie sicher, dass es funktioniert.
Hoffe, das hilft.