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.