2016-03-25 10 views
1

SevgiliMS Access'in bir C# dll tarafından sağlanan bağlantıyı yeniden kullanması için ne gerekir?

Birisi bana MS Access'in bir C# dll tarafından sağlanan bağlantıyı yeniden kullanabilmesi için neyin gerekli olduğunu söyleyebilir mi?

.NET Framework v4.0.30319'da bir C# dll oluşturmaya çalışıyoruz.
Bu dll, MS Access bağlantılı tablolarımız tarafından yeniden kullanılan bir bağlantı sağlamalıdır.
Oracle DB'ye bağlantılar kurmayı başardık, ancak MS Access 'bağlantılı tabloları için bağlantıyı kullanmıyor. Genel kurulum şu şekildedir:
1. Bir Oracle veritabanına bağlantılı tablolar içeren Access 2013 veritabanımız var.

2. Bu tablolar MYDSNNAME olarak oluşturulan bir ODBC Kullanıcı DSN'si ile bağlanır. MS Access veritabanında, yukarıda belirtilen dll'ye bir başvuru var.
4. 'connect' işlevini dll'den çağırarak, kullanıcının kimlik bilgilerini kullanarak Oracle dabatase doğru bir bağlantı açılır.
5. Bağlantı açıldıktan sonra, MS Access bağlantıyı yeniden kullanmalı ve kullanıcı Access dosyasında bulunan bağlantılı tabloları ve aktarma sorgularını açabilir. kullanılan

image of Schema
Kodlama:

1. Bağlantılı tablolar 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 kod parçacığı: girişiniz için

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

teşekkürler!

+1

Hata iletileri var mı? Asıl sorun nedir? –

+0

Neden bu kadar çok farklı bağlantı türlerini kullanıyorsunuz? –

+0

Neden harici bir DLL kullanarak bir bağlantı kurmanız gerektiğini düşünüyorsunuz? Sadece giriş kimlik bilgilerini gizlemek mi? –

cevap

0

Bir tabloyu bağlamak için doğrudan .NET derlemesinden bir bağlantı kullanmanın mümkün olduğunu düşünmüyorum. Ancak bir VBA Makroda kullanmak mümkün olmalı, belki bağlantılı tabloları bir makro ile oluşturabilirsiniz. MS Access ile aşina değilim ama kodu (test) aşağıdaki gibi görünebilir:

C#: Makro

[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 

ayrıca bu kaynakların göz at:

Best Practice in Writing a COM-Visible Assembly

Exposing .NET Components to COM

+0

Merhaba Wernfried, girişiniz için teşekkürler. Cevabınız çok beğeni topladı ve bağlantılar C# dll'den gelen COM işlemine başlamaya çok yardımcı oldu. Ancak, kodu yukarıda açıklandığı gibi uygulamaya çalıştım ve sorunu çözmüyor. –

İlgili konular