DataReader.GetFieldType hat null zurückgegeben

8

In meiner db-Tabelle Layout gibt es eine Spalte mit dem Typ hierarchyid (Spaltenindex = 4). Beim Versuch, eine neue Umgebung einzurichten (ein virtueller Webserver, der vom XEN-Server erstellt wurde), und dann die Site auszuführen, habe ich dieses Problem festgestellt:

  

Ausnahmebedingungsnachricht: DataReader.GetFieldType (4) hat null zurückgegeben.   Ausnahmedaten: System.Collections.ListDictionaryInternal

Ich habe eine Suche durchgeführt und herausgefunden, dass es bereits einige Themen gibt (zB auf MSDN ).

Aber selbst wenn ich die C:\Program Files\Microsoft SQL Server0\SDK\Assemblies\Microsoft.SqlServer.Types.dll -Bibliothek hinzugefügt habe, scheint der DB-Typ in der Struktur SqlHierarchyId nicht erkannt zu werden.

  

"Ausnahme bei DataReader.GetFieldType (4) gab null zurück" wird immer noch verworfen.

Hinweis: Das Problem wird gelöst, wenn ich die Installation des C # -Pakets in VS2010 auf die Umgebung (Windows Server 2008 RC2) vorgenommen habe, aber mein Chef hat das nicht akzeptiert, weil dies ein reiner Webserver ist.

    
Undefined Identity 04.07.2011, 09:33
quelle

4 Antworten

19

Verweisen Sie die Microsoft.SQLServer.Types-DLL aus dem Projekt und legen Sie für die Referenz in den Eigenschaften der Referenz "Copy Local" fest. Dadurch wird diese DLL mit der Website verpackt, wenn Sie sie bereitstellen. Dann müssen Sie nicht alle SQL Server in Ihrer Webbox installiert haben, um die SQL Server-Datentypen zu verwenden. Ich habe dies für meine Website getan, weil es die Spalten geography Datentyp verwendet und ich habe den gleichen Fehler bekommen.

    
Paul Mendoza 04.08.2011, 05:25
quelle
2

Die Lösung, die für mich funktioniert, ist " Typ der Systemversion = SQL Server 2012 " für die Verbindungszeichenfolge.

Beispiel: Zeichenfolge connectionString="Datenquelle = myserver; Initial Catalog = mydatabase; Benutzer-ID = sa; Kennwort = *******; Typ Systemversion = SQL Server 2012; ";

    
user3190933 11.03.2017 14:14
quelle
1

Anstatt das Projekt zu ändern und einen Verweis auf Microsoft.SQLServer.Types dll hinzuzufügen, können Sie es einfach in den GAC einfügen.

In meinem Fall hatte ich drei Versionen auf meinem Dev-Rechner und fügte sie dem Server GAC hinzu:

%Vor%

Ich hatte andere .NET-Tools von Drittanbietern auf dem Server, die den gleichen Fehler hatten. Nachdem die Baugruppen dem GAC hinzugefügt wurden, funktionierte alles gut.

Obwohl ich keine eigenen Assemblys in den GAC einfüge, ist es in Ordnung, einige Microsoft SQL-Server Assemblies dort zu platzieren, da sie sich auf mehrere Anwendungen auswirken.

    
Peter Hahndorf 11.05.2016 15:44
quelle
0

Wenn Sie nach einer anderen Lösung immer noch einen Fehler haben, versuchen Sie, in web.config

zu löschen %Vor%

Kopieren Sie die Datei Microsoft.SqlServer.Types.dll in den Ordner bin (oder / und fügen Sie eine Referenz hinzu)

oder / und fügen "Type System Version = SQL Server 2012;" in sqlconnectionstring

    
Sergey Shamanayev 30.03.2017 07:58
quelle

Tags und Links