2016-03-25 4 views
1

親愛なるMS AccessがC#dllによって提供される接続を再利用するために必要なものは何ですか?

誰かがMS AccessがC#dllで提供されている接続を再利用するために必要なことを教えてもらえますか?

.NET Framework v4.0.30319でC#dllをビルドしようとしています。
このDLLは、MS Accessのリンクテーブルによって再利用される接続を提供する必要があります。
Oracle DBへの接続を設定することができますが、MS Accessはそのリンクテーブルに接続を使用しません。 全体の設定は次のとおりです。

1. Oracleデータベースへのリンクテーブルを含むAccess 2013データベースがあります。

2.これらのテーブルは、MYDSNNAMEとして作成されたODBCユーザーDSNを介してリンクされています。

3. MS Accessデータベースには、前述のdllへの参照があります。
4. dllから 'connect'関数を呼び出すと、ユーザーの資格情報を使用してOracle dabataseへの接続が開かれます。
5.接続が開いたら、MS Accessは接続を再利用し、ユーザーはAccessファイルで使用可能なリンクテーブルとパススルークエリを開くことができます。使用されている

image of Schema
コーディング:

1.リンクされたテーブルはのConnectionString:

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のコードスニペット:あなたの入力のための

// 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(); 

ありがとう!

+1

エラーメッセージはありますか?実際の問題は何ですか? –

+0

なぜさまざまな接続タイプを使用していますか? –

+0

なぜ外部DLLを使用して接続を確立する必要があると感じますか?ログイン資格情報を隠すだけですか? –

答えて

0

テーブルをリンクする.NETアセンブリからの接続を直接使用することはできないと思います。しかし、VBAマクロで使用することは可能です。おそらく、マクロでリンクテーブルを構築することができます。私はMS Accessのに慣れていないですが、コードは(テストしていない)、このようになります。

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:

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

... use conn object 

はまた、これらのリソースを見てください:

Best Practice in Writing a COM-Visible Assembly

Exposing .NET Components to COM

+0

こんにちはWernfried、あなたの入力に感謝します。あなたの応答は非常に高く評価されており、リンクはC#dllのCOM操作性を開始する上で非常に役立ちます。しかし、私は上記のコードを実装しようとしましたが、問題を解決しません。 –

関連する問題