Unable to find the requested .Net Framework Data Provider

Unsere Umstellung auf SQL Server 2012 läuft und nun hat man sich mit den ersten Schwierigkeiten auseinanderzusetzen. Ein SSIS-Paket lief nicht mehr unter SQL Server 2012, obwohl es auf dem Entwicklungs-PC (Windows 7) problemlos funktionierte.

Der Fehler

Die Fehlermeldung im Log lautete: "<OLEDB -Quelle>" failed validation and returned validation status "VS_ISBROKEN".

Ich habe dann die SQL Server Data Tools (Visual Studio 2010) einmal auf dem Server (Windows Server 2008 R2) geöffnet und dort das Paket editiert. Diese OLEDB-Verbindung wurde als nicht funktionsfähig angezeigt und beim Versuch irgendeine neue OLEDB-Verbindung anzulegen, kam der nächste Fehler: "Unable to find the requested .Net Framework Data Provider. It may not be installed."

Die Ursache

Für die Steuerung des .Net Frameworks gibt es eine XML-Datei machine.config. In dieser sind u. a. die zusätzlich installierten OLEDB-Provider eingetragen.

In der Urform sieht ein Abschnitt in dieser Datei wie folgt aus:

<system.data>
        <DbProviderFactories/>
</system.data>

Damit funktionieren auch die SQL Server Data Tools problemlos. Man beachte hier die einzelne Zeile <DbProviderFactories/>. Dieses Konstrukt ist ein "self terminated tag" und sorgt dafür, dass die Datei syntaktisch in Ordnung ist, also alle "tags" vorhanden sind indem es nur eine leere Hülle abbildet.
Gelegentlich kann es aber wohl vorkommen, dass die Installation eines zusätzlichen OLEDB-Providers dort registriert wird und sich der Abschnitt z. B. wie folgt ändert:

<system.data>
        <DbProviderFactories>
            <add name="IBM DB2 for i5/OS .NET Provider" invariant="IBM.Data.DB2.iSeries" description=".NET Framework Data Provider for i5/OS" type="IBM.Data.DB2.iSeries.iDB2Factory, IBM.Data.DB2.iSeries, Version=12.0.0.0, Culture=neutral, PublicKeyToken=9cdb2ebfb1f93a26" />
        </DbProviderFactories>
        <DbProviderFactories/>
</system.data>

Man beachte jetzt wieder die Zeile <DbProviderFactories/> am Ende. Diese Zeile ist mit Einfügung des anderen Abschnitts überflüssig geworden, wurde aber nicht entfernt. In der Zeile davor hat das "tag" den Schrägstrich am Anfang, da es kein "self terminated tag" ist.

In der Folge können die SQL Server Data Tools und die SQL Server Integration Services nicht mehr korrekt mit OLEDB-Providern arbeiten.

Die Lösung

Ich habe einfach das "self terminated tag" aus dieser Datei entfernt, da es nicht mehr benötigt wurde. Hierbei ist zu beachten, dass es auf einem 64-Bit-System mehrere machine.config geben wird. Außerdem ist die korrekte Version des .Net Frameworks zu beachten. Daraus ergaben sich also (für .Net Framework 4) diese beiden Pfade auf meinem Server für die Datei machine.config:

  • C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config
  • C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config

Die 32-Bit Variante wird von den SQL Server Data Tools verwendet, die andere von den SQL Server Integration Services.

Alle Änderungen an dieser Datei geschehen natürlich auf eigene Gefahr und vorher macht man sich natürlich eine Kopie des alten Standes!