Einzelnen Beitrag anzeigen

Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#1

FirebirdClientFactory kann nicht genutzt werden

  Alt 25. Sep 2006, 10:51
Datenbank: Firebird • Version: 2.0 RC1 • Zugriff über: FB NET Provider 2.0.1 RC1
Hallo,

ich möchte mich auf einen DB-unabhängigen Zugriff vorbereiten und möchte dabei DbProviderFactory nutzen. Das klappt aber für FirebirdClientFactory nicht; die verschiedenen Fehlermeldungen helfen mir nicht weiter.

Der FB-NET-Provider ist in machine.config eingetragen (Dank an Carlos Guzmán Álvarez):
Code:
<configSections>
    <section name="firebirdsql.data.firebirdclient"
             type="System.Data.Common.DbProviderConfigurationHandler, System.Data,
             Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
...
<DbProviderFactories>
     <add name="FirebirdClient Data Provider"
                 invariant="FirebirdSql.Data.FirebirdClient"
                 description=".Net Framework Data Provider for Firebird"
                 type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory,
                      FirebirdSql.Data.FirebirdClient, Version=%Version%, Culture=%Culture%,
                      PublicKeyToken=%PublicKeyToken%" />
...
//  Subst:
%Version%        -> The version of the provider assembly you are using.
%Culture%        -> The culture of the provider assembly you are using.
%PublicKeyToken% -> The Public Key Token of the provider assembly you are using.
Ausgangspunkt ist folgender Versuch (nach @Elvis und anderen Hinweisen):
Code:
private System.Data.Common.DbProviderFactory dataFactory;
string s0 = System.Configuration.ConfigurationManager.AppSettings["provider"];
//  s0 enthält den korrekten Wert
dataFactory = System.Data.Common.DbProviderFactories.GetFactory(s0);
//  Fehlermeldung:
Exception System.TypeInitializationException was thrown in debuggee:
Der Typeninitialisierer für JThomas.DGW.Data.DbService hat eine Ausnahme verursacht.
Dieses Problem ist mir inzwischen klar, weil DbProviderFactory eine abstrakte Klasse ist. Also will ich gezielt FirebirdClientFactory einbinden, was mir aber nicht gelingt:

Versuch A
Code:
dataFactory = FirebirdSql.Data.FirebirdClient.FirebirdClientFactory;
Zitat von Fehlermeldung:
FirebirdSql.Data.FirebirdClient.FirebirdClientFact ory ist ein Typ, das im gegebenen Kontext jedoch ungültig ist.
Versuch B mit gleicher Fehlermeldung:
Code:
dataFactory = FirebirdSql.Data.FirebirdClient.FirebirdClientFactory();
Versuch C
Code:
dataFactory = new FirebirdSql.Data.FirebirdClient.FirebirdClientFactory();
Zitat von Fehlermeldung:
Der Typ FirebirdSql.Data.FirebirdClient.FirebirdClientFact ory hat keine definierten Konstruktoren.
Andererseits erfahre ich über Lutz Roeder's Reflector:
Zitat:
public static readonly FirebirdClientFactory Instance;
Declaring Type: FirebirdSql.Data.FirebirdClient.FirebirdClientFact ory
abgeleitet von: System.Data.Common.DbProviderFactory
Also müsste einer meiner Versuch funktionieren. Was verstehe ich hier noch (überhaupt) nicht?

Danke für erläuternde Hinweise! Jürgen

PS. Für dieses Problem hätte ich lieber ein NET- oder Firebird-Forum. Aber die DP wird so oft und gerne besucht (vor allem auch von DB-Fachleuten), dass ich hier die größte Erfolgsaussicht vermute.
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat