Wenn Sie eine Anwendung, ein Skript oder eine Funktion aus einer früheren SQL Server-Installation mit CLR-Features (Common Language Runtime) in SQL Server 2008 oder SQL Server 2008 R2 ausführen, wird eine Fehlermeldung angezeigt: ".NET Framework-Fehler"

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 955629 - Produkte anzeigen, auf die sich dieser Artikel bezieht
Alles erweitern | Alles schließen

Auf dieser Seite

Problembeschreibung

Wenn Sie nach der Aktualisierung auf Microsoft SQL Server 2008 oder Microsoft SQL Server 2008 R2 eine Anwendung, ein Skript oder eine Funktion aus einer früheren Microsoft SQL Server-Installation mit CLR-Features (Common Language Runtime) ausführen, wird eine Fehlermeldung mit etwa folgendem Inhalt angezeigt:
Msg 6522, Level 16, State 1, Line 1

.NET Framework-Fehler beim Ausführen der benutzerdefinierten Routine oder des benutzerdefinierten Aggregats Name der Routine:

System.InvalidOperationException: Datenzugriff ist in diesem Kontext nicht zulässig. Der Kontext ist eine Funktion oder Methode, die nicht mit "DataAccessKind.Read" oder "SystemDataAccessKind.Read" markiert ist, ein Rückruf zum Abrufen von Daten von der "FillRow"-Methode einer Tabellenwertfunktion oder eine UDT-Überprüfungsmethode.

System.InvalidOperationException
Das Problem kann z. B. in den folgenden Szenarien auftreten.

Szenario 1

Sie verwenden eine Methode mit den folgenden Merkmalen:
  • Die Methode verwendet eine benutzerdefinierte CLR-Funktion, eine benutzerdefinierte Methode (UDT) oder ein benutzerdefiniertes Aggregat, die bzw. das einen Identitätswechsel durchführt.
  • Die Methode verwendet ein LOB (Large Object) als Parameter.
  • Die Methode verwendet nicht die DataAccesKind.Read-Eigenschaft.

Szenario 2

Sie verwenden die Methode INIT in einer CLR-Tabellenwertfunktion, die einen Identitätswechsel durchführt.

Szenario 3

Sie verwenden die Methode FillRow in einer CLR-Tabellenwertfunktion, die einen Identitätswechsel durchführt.

Ursache

Das Problem tritt aufgrund einer Änderung in den Features des Datenbankmoduls in SQL Server 2008 und SQL Server 2008 R2 auf.

Abhilfe

Als Problemumgehung für die im Abschnitt "Problembeschreibung" aufgeführten Szenarien wenden Sie folgende Methoden an.

Methode 1: Problemumgehung für Szenario 1 und Szenario 2

Um das Problem zu umgehen, fügen Sie die Eigenschaft DataAccessKind.Read zur Methode hinzu.

Methode 2: Problemumgehung für Szenario 3

Gehen Sie folgendermaßen vor, um dieses Problem zu umgehen:
  • Entfernen Sie den Identitätswechsel aus der Methode FillRow.
  • Greifen Sie nicht unter Verwendung der Methode FillRow auf externe Ressourcen zu.
  • Greifen Sie auf externe Ressourcen nur mit der Methode INIT der Tabellenwertfunktion zu.

Informationsquellen

Weitere Informationen zur Eigenschaft DataAccessKind.Read und anderen benutzerdefinierten Attributen für CLR-Routinen finden Sie auf der folgenden Microsoft TechNet-Website:
http://technet.microsoft.com/de-de/library/ms131050.aspx
Informationen zu wichtigen Änderungen in den Datenbankmodulfeatures in SQL Server 2008 finden Sie auf der folgenden Microsoft TechNet-Website:
http://technet.microsoft.com/de-de/library/ms143179.aspx

Eigenschaften

Artikel-ID: 955629 - Geändert am: Freitag, 28. Mai 2010 - Version: 2.2
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2008 Express
  • Microsoft SQL Server 2008 Express with Advanced Services
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Web
  • Microsoft SQL Server 2008 Workgroup
  • Microsoft SQL Server 2008 R2 Datacenter
  • Microsoft SQL Server 2008 R2 Developer
  • Microsoft SQL Server 2008 R2 Enterprise
  • Microsoft SQL Server 2008 R2 Express
  • Microsoft SQL Server 2008 R2 Express with Advanced Services
  • Microsoft SQL Server 2008 R2 Standard
  • Microsoft SQL Server 2008 R2 Standard Edition for Small Business
  • Microsoft SQL Server 2008 R2 Workgroup
Keywords: 
sql2008relnotedatabaseengine sql2008relnote kbprogramming kbautomation kberrmsg kbtshoot kbexpertiseinter kbprb KB955629
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com