2009-06-12 22 views
1

Wir haben 3 Datenbankanbieter, die wir verwenden, um eine Verbindung zu unseren Datenbanken herzustellen: DB2, MS SQL und Interbase. Ich möchte eine einzelne generische Datenbank-Wrapper-Klasse erstellen, die verwendet werden kann, um mit allen dreien zu kommunizieren, indem die richtige Verbindungszeichenfolge, der Benutzername, das Passwort und der gewünschte Provider übergeben werden.Ist es möglich, in VB.NET eine gemeinsame Datenbankklasse zu erstellen?

Ich möchte keine Referenzen hinzufügen und importieren alle drei Anbieter in der Datenbankklasse. Ist das möglich?

Ich habe dies zuvor in Java mit der Class.forName() Funktion getan.

Antwort

3

Es ein abstract factory in .NET 2.0 oder höher, ein Beispiel für seine Verwendung wäre gebaut ist:

zu erweitern auf
Dim factory As System.Data.Common.DbProviderFactory 
factory = System.Data.Common.DbProviderFactories.GetFactory("System.Data.SqlClient") 

Dim conn As System.Data.Common.DbConnection = factory.CreateConnection() 
conn.ConnectionString = "connectionString" 
conn.Open() 

Es gibt Methoden auf DbProviderFactory wie Create, Create usw.

0

Können Sie Framework 3.5 SP1 verwenden?

wenn ja, Sie bei Linq to Entity

3

aussehen sollte Wenn Sie keine Verweise auf die einzelnen Anbieter in Ihrer Anwendung haben wollen, müssen Sie diese ein wenig anders zu handhaben.

Es gibt zwei Hauptoptionen, die ich sehe - die erste (und einfachste) wäre die Verwendung eines Dependency-Injection-Frameworks, um einfach den entsprechenden Provider zur Laufzeit zu pluginieren. Dies ist einfach, sauber und funktioniert gut.

Sie könnten es aber selbst ohne das tun. Erstellen Sie einfach eine allgemeine Basisklasse, die die Schnittstelle bereitstellt, und erstellen Sie für jeden Anbieter eine separate Assembly (sodass die Referenzen getrennt sind), die diese Basisklasse implementiert. Sie können dann Activator.CreateInstance verwenden, um zur Laufzeit eine Instanz des entsprechenden Typs zu erstellen.

1

Patrick McDonald's Antwort, Sie können den Provider-Namen und die Verbindungszeichenfolge im Abschnitt < connectionStrings> Ihrer Anwendungskonfigurationsdatei speichern. Dann brauchen Sie nicht die Anbieter in der Anwendung fest einprogrammiert haben:

ConnectionStringSettings c = ConfigurationManager.ConnectionStrings["MyConnectionName"]; 
if (c != null) 
{ 
    DbProviderFactory factory = DbProviderFactories.GetFactory(c.ProviderName); 
    IDbConnection connection = factory.CreateConnection(); 
    connection.ConnectionString = c.ConnectionString; 
    ... 
} 

Wo Ihre Anwendungskonfigurationsdatei enthält einen Abschnitt connection so etwas wie:

<connectionStrings> 
    <add name="MyConnectionName" providerName="System.Data.SqlClient" connectionString="Data Source=serverName;Initial Catalog=DBName;Integrated Security=True"/> 
</connectionStrings> 
Verwandte Themen