2016-03-25 10 views
1

Kann mir bitte jemand sagen, was für MS Access benötigt wird, um die von einer C# -Dll gelieferte Verbindung wiederzuverwenden?Was ist für MS Access erforderlich, um die von einer C# -Dll gelieferte Verbindung wiederzuverwenden?

Wir versuchen, eine C# -Dll in .NET Framework v4.0.30319 zu erstellen.
Diese DLL sollte eine Verbindung bereitstellen, die von unseren verknüpften MS Access-Tabellen wiederverwendet wird.
Wir schaffen Verbindungen zur Oracle DB, aber MS Access verwendet die Verbindung nicht für die verknüpften Tabellen. Die gesamte Einrichtung ist wie folgt:

1. Wir haben eine Access 2013-Datenbank, die verknüpfte Tabellen mit einer Oracle-Datenbank enthält.

2. Diese Tabellen sind über eine ODBC-Benutzer-DSN verknüpft, die als MYDSNNAME erstellt wird.

3. In der MS Access-Datenbank gibt es einen Verweis auf die oben erwähnte DLL.
4. Durch Aufruf der 'connect' Funktion von der DLL wird eine Verbindung zur Oracle Datenbank mit den Zugangsdaten des Benutzers hergestellt.
5. Sobald die Verbindung geöffnet ist, sollte MS Access die Verbindung erneut verwenden und der Benutzer kann die verknüpften Tabellen und Pass-Through-Abfragen öffnen, die in der Access-Datei verfügbar sind.

image of Schema
Codierung, die verwendet wird:

1. verlinkte Tabellen Connection:

ODBC;DSN=MYDSNNAME;DBQ=MyOracleDB;DBA=W;APA=T;EXC=F;FEN=T;QTO=F;FRC=10;FDL=10;LO=T; 
RST=T;BTD=F;BNF=F;BAM=IfAllSuccessful;NUM=NLS;DPM=F;MTS=T;MDI=F;CSR=F;FWC=F;FBS=64000; 
TLO=O;MLD=0;ODA=F;;TABLE=ORACLE_TABLE_NAME 

2. C# DLL-Code-Snippet:

// Ole DB 
public System.Data.OleDb.OleDbConnection cnOleDb; 
public Oracle.DataAccess.Client.OracleConnection cnOracleDataAccess; 
public Devart.Data.Oracle.OracleConnection cndevArt; 
string sConnect = "Provider=MSDAora.1;Password=strong_password; 
User ID=strong userid; 
Data Source=<MyOracleDB>;Persist Security Info=true"; 
cnOleDb = new System.Data.OleDb.OleDbConnection(sConnect); 
sConnect = "Password=strong_password;User ID=strong userid; 
Data Source=MyOracleDB;Persist Security Info=true"; 
cnOracleDataAccess = new Oracle.DataAccess.Client.OracleConnection(sConnect); 
cndevArt = new Devart.Data.Oracle.OracleConnection(sConnect); 
cnOleDb.Open(); 
cnOracleDataAccess.Open(); 
cndevArt.Open(); 
//ODBC 
string wConnect = "DSN=MYDSNNAME;UID=strong_ID;PWD=strong_PWD"; 
cnODBC = new OdbcConnection(wConnect); 
cnODBC.Open(); 

Vielen Dank für Ihre Eingabe!

+1

Alle Fehlermeldungen? Was ist das eigentliche Problem? –

+0

Warum verwenden Sie so viele verschiedene Verbindungstypen? –

+0

Warum möchten Sie eine Verbindung mit einer externen DLL herstellen? Ist es einfach, die Anmeldedaten zu verbergen? –

Antwort

0

Ich glaube nicht, dass es möglich ist, eine Verbindung von einer .NET-Assembly direkt zu verwenden, um eine Tabelle zu verknüpfen. Es sollte jedoch möglich sein, es in einem VBA-Makro zu verwenden, vielleicht können Sie die verknüpften Tabellen durch ein Makro erstellen. Ich bin nicht vertraut mit MS Access, aber der Code wie folgt aussehen (nicht getestet):

C#:

[ComVisible(true)] 
public class MyClass { 


[ComVisible(true)] 
public OracleConnection GetConnection(){ 

    var connectString = "Data Source=MYDSNNAME;User ID=strong_ID; Password=strong_PWD"; 
    var con = new Oracle.DataAccess.Client.OracleConnection(connectString); 
    con.Open(); 
    return con; 
} 

} 

VBA Makro:

Set obj = CreateObject("MyClass") 
Set conn = obj.GetConnection() 

... use conn object 

haben auch einen Blick auf die folgenden Ressourcen:

Best Practice in Writing a COM-Visible Assembly

Exposing .NET Components to COM

+0

Hallo Wernfried, danke für deine Eingabe. Ihre Antwort wird sehr geschätzt und die Links sind sehr hilfreich beim Einstieg in die COM-Funktionalität von C# -Dlls. Ich habe jedoch versucht, den Code wie oben beschrieben zu implementieren und löst das Problem nicht. –