AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken C# DbProviderFactory: Provider will nicht geladen werden?
Thema durchsuchen
Ansicht
Themen-Optionen

DbProviderFactory: Provider will nicht geladen werden?

Ein Thema von Phoenix · begonnen am 31. Okt 2006 · letzter Beitrag vom 1. Nov 2006
Antwort Antwort
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.640 Beiträge
 
#1

DbProviderFactory: Provider will nicht geladen werden?

  Alt 31. Okt 2006, 11:39
Datenbank: Oracle • Version: XE • Zugriff über: CoreLab Oracle Direct
Dank dem Gespräch mit Elvis letzte Woche habe ich eine kleine Applikation versucht auf DbProviderFactory und die System.Data Interface umzustellen.

Soweit, sogut, aber beim Starten der Datenbankverbindung geht mir da noch was in die Hose.

Folgender Fehler tritt auf:
Zitat:
Column 'InvariantName' is constrained to be unique. Value 'CoreLab.Oracle' is already present.
und zwar an genau der Stelle, an der ich die Factory holen will:

Code:
_factory = DbProviderFactories.GetFactory(Properties.Settings.Default.DefaultProviderName); // <-- hier knallts
_DbConnection = _factory.CreateConnection();
Hier der Auszug aus meiner App.Config:

XML-Code:
   <configSections>
      <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
         <section name="system.data" type="System.Data.Common.DbProviderFactoriesConfigurationHandler, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
      </sectionGroup>
   </configSections>

   <applicationSettings>
      <ASTA.Properties.Settings>
   <setting name="DefaultProviderName" serializeAs="String">
    <value>CoreLab.Oracle</value>
   </setting>
  </ASTA.Properties.Settings>
   </applicationSettings>

   <system.data>
      <DbProviderFactories>
         <add name="Corelabs Oracle Provider for .NET"
    invariant="CoreLab.Oracle"
    description="Corelab Orlace Provider for .NET"
    type=" CoreLab.Oracle.OraDirectFactory, CoreLab.Oracle, Version=3.50.9.0, Culture=neutral, PublicKeyToken=09af7300eec23701" />
      </DbProviderFactories>
   </system.data>
Hab ich was übersehen oder vergessen?
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Jürgen Thomas

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

Re: DbProviderFactory: Provider will nicht geladen werden?

  Alt 31. Okt 2006, 16:39
Hallo Sebastian,

auf den ersten Blick sieht alles korrekt aus. Versuch zunächst Folgendes mit Debugger über eine zusätzliche String-Variable:

1. Wie lautet der String, der über DefaultProviderName gelesen wird? An dieser Stelle muss der Wert stehen, der in der config-Datei im invariant-Attribut steht.

2. Wenn das passt, dann solltest Du einmal - mit Debugger oder temp-DataGrid(View) - mit GetFactoryClasses() alle zur Verfügung stehenden Provider einlesen. In der davon gelieferten DataTable ist das Feld InvariantName von Bedeutung. Der Wert dieses Feldes gehört in die config-Datei als "invariant".

Wichtiger Nachtrag
Du hast in app.config den Verweis auf section name="system.data" innerhalb der sectionGroup name="applicationSettings" eingetragen. Verändere dies mal:
XML-Code:
  <configSections>
    <sectionGroup name="applicationSettings"
      type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0,
      Culture=neutral, PublicKeyToken=b77a5c561934e089" >
    </sectionGroup>
    <section name="system.data"
             type="System.Data.Common.DbProviderFactoriesConfigurationHandler,
                   System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  </configSections>
Viel Erfolg! Jürgen

[edit=Phoenix](XML-Formatierung war zerlegt... Blöder HTML-Cache ;-) Mfg, Phoenix[/edit]
#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
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.640 Beiträge
 
#3

Re: DbProviderFactory: Provider will nicht geladen werden?

  Alt 1. Nov 2006, 09:04
Sodele... ich und meine Freizeit im Moment *schnauf*

1.) Zum Nachtrag: Das reine Verschieben des Abschnitts System.data in der App.config hat nichts geholfen.

Zitat von Jürgen Thomas:
1. Wie lautet der String, der über DefaultProviderName gelesen wird? An dieser Stelle muss der Wert stehen, der in der config-Datei im invariant-Attribut steht.
Es steht tatsächlich "CoreLab.Oracle" drin. Das passt also.

Zitat von Jürgen Thomas:
2. Wenn das passt, dann solltest Du einmal - mit Debugger oder temp-DataGrid(View) - mit GetFactoryClasses() alle zur Verfügung stehenden Provider einlesen. In der davon gelieferten DataTable ist das Feld InvariantName von Bedeutung. Der Wert dieses Feldes gehört in die config-Datei als "invariant".
Hrm.. der Fehler trat auch beim Aufruf von GetFactoryClasses() auf.
Dank Debugger konnte ich aber herausfinden, das Corelab schon 2x drin war. Also meinen Eintrag aus der App.Config herausgenommen und *wuppdi* - hab ich den Provider bekommen.

Nun stimmt nur noch der ConnectionString nicht, aber den bekomm ich denk ich mal schon hin
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#4

Re: DbProviderFactory: Provider will nicht geladen werden?

  Alt 1. Nov 2006, 09:10
Zitat von Phoenix:
Nun stimmt nur noch der ConnectionString nicht, aber den bekomm ich denk ich mal schon hin
Du vertraust jetzt aber darauf, dass der CoreLabs Provider auf dem Zielsystem installiert wurde.
Wenn du ihn einfach nur durch Kopieren in dein AppDir benutzen wilst, soltest du dir einen eigenen InvariantName ausdenken. Zum Bleistift deinen eigenen Namespace prefix davorpacken.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Jürgen Thomas

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

Re: DbProviderFactory: Provider will nicht geladen werden?

  Alt 1. Nov 2006, 09:19
Zitat von Elvis:
Du vertraust jetzt aber darauf, dass der CoreLabs Provider auf dem Zielsystem installiert wurde.
Hallo Elvis,

das verstehe ich nicht:
Zitat von Phoenix:
Hrm.. der Fehler trat auch beim Aufruf von GetFactoryClasses() auf.
Dank Debugger konnte ich aber herausfinden, das Corelab schon 2x drin war. Also meinen Eintrag aus der App.Config herausgenommen und *wuppdi* - hab ich den Provider bekommen.
Dadurch ist doch schon klar, dass der Provider installiert ist, oder?! Jürgen
#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
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.640 Beiträge
 
#6

Re: DbProviderFactory: Provider will nicht geladen werden?

  Alt 1. Nov 2006, 09:29
Nachtrag: Hat alles geklappt

Das muss man aber auch erstmal wissen, dass sich Corelab direkt in die Provider einträgt und kein extra Eintrag in der App.Config nötig ist.

Naja, beim ausliefern werd ich wohl das Corelab Assembly ins Anwendungsverzeichnis legen und die dennoch eintragen in die App.config - aber das weiss ich ja jetzt
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Elvis

Registriert seit: 25. Nov 2005
Ort: München
1.909 Beiträge
 
Delphi 2010 Professional
 
#7

Re: DbProviderFactory: Provider will nicht geladen werden?

  Alt 1. Nov 2006, 09:35
Zitat von Jürgen Thomas:
Dadurch ist doch schon klar, dass der Provider installiert ist, oder?! Jürgen
Hi Jürgen,
Zielsystem != Entwicklungssystem.
Robert Giesecke
I’m a great believer in “Occam’s Razor,” the principle which says:
“If you say something complicated, I’ll slit your throat.”
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz