Wir haben einige Kunden, die unsere .NET 2.0-Thick-Client-App verwenden, die seltsame, zeitweilige Fehler beim Lesen von Daten von einem SQL 2000 SP4-Server erfahren, bei denen die Aktionen nur wenige Augenblicke früher ausgeführt wurden. Wir haben einige Kunden, die SQL 2000 verwenden (und viele, die 2005 verwenden), wo diese Fehler nicht auftreten.Wie kann man ArgumentOutOfRangeException auf SqlDbType diagnostizieren?
Eine Sache, die ich bemerke, ist, dass die App in unseren Testumgebungen System.Data 2.0.50727 verweist. ; während die App 2.0.50727 verweist. auf den Systemen des Kunden. Was ist der Unterschied zwischen diesen beiden Revisionen und könnte es sich auf die unten beschriebenen Fehler beziehen?
Hier ist ein Beispiel für die Stapelverfolgung des Fehlers, wo der Aufzählungswert 8 ist, aber ich habe viel mehr Instanzen, wo der Enumerationswert "out of bounds" 4 oder 14 mit der gleichen genauen Stack-Ablaufverfolgung ist. Sind die Aufzählungswerte manchmal auffindbar, aber nicht zu anderen Zeiten? Was ist, wenn der gleiche Teil der App ohne Fehler läuft?
TYPE: System.ArgumentOutOfRangeException
MSG: The SqlDbType enumeration value, 8, is invalid.
Parameter name: SqlDbType
SOURCE: System.Data
SITE: GetSqlDataType
at System.Data.SqlClient.MetaType.GetSqlDataType(Int32 tdsType, UInt32 userType, Int32 length)
at System.Data.SqlClient.TdsParser.CommonProcessMetaData(TdsParserStateObject stateObj, _SqlMetaData col)
at System.Data.SqlClient.TdsParser.ProcessMetaData(Int32 cColumns, TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.NextResult()
at Ceoimage.Basecamp.Data.Document._GetDocumentModelWithCollections(IDataReader rdr)
Update: ich System.Data von einem der Arbeitsplätze der Kunden gerade heruntergeladen haben. Sie hatten zwei Versionen im GAC, einen im GAC-Verzeichnis und einen im GAC_32-Verzeichnis. In GAC lautet die Versionsnummer 1.14322.2365. In GAC_32 ist die Versionsnummer 2.0.50727.1433, wie oben beschrieben. In allen drei Versionen jedoch die SqlDbType enumerable ordnet die gleichen int-Werte zu den gleichen Typen für die in den Fehlermeldungen:
DateTime = 4
Int = 8
UniqueIdentifier = 14
Ich bin die Version Angst könnte eine falsche Fährte sein: wenn das Problem zu tun hat Bei Framework-Versionen sollte das Problem nicht zu 100% auftreten, sondern nur vorübergehend sein?
Danke für den guten Start. Beim Betrachten von Reflector ist SqlDbType mit dem Wert 8 Int. Meine App würde nicht funktionieren, wenn es Probleme beim Lesen von Ints aus der Datenbank hat. Wie in der Welt passiert es und wie kann es so transient sein, wenn es an die Framework-Version gebunden ist? – flipdoubt