У нас есть некоторые клиенты, использующие наше толстое клиентское приложение .NET 2.0, которое испытывает странные, прерывистые ошибки, считывающие данные с сервера SQL 2000 SP4, где действия выполнялись всего за несколько мгновений раньше. У нас есть некоторые клиенты, использующие SQL 2000 (и многие из которых используют 2005), где эти ошибки не возникают.Как диагностировать ArgumentOutOfRangeException в SqlDbType?
Одна вещь, которую я замечаю, это то, что приложение в наших тестовых средах ссылается на System.Data 2.0.50727. ; тогда как приложение ссылается на 2.0.50727. о системах заказчика. В чем разница между этими двумя версиями и может ли это быть связано с ошибками, описанными ниже?
Вот пример трассировки стека ошибок, где значение перечисления равно 8, но у меня есть еще много экземпляров, где значение перечисления «вне границ» равно 4 или 14 с той же точной трассировкой стека. Знают ли значения перечисления иногда, но не в другое время? Как насчет того, когда одна и та же часть приложения работает без ошибок?
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)
Обновление: Я скачал System.Data от одного из рабочих станций клиентов. Они имели две версии в GAC: одну в каталоге GAC и одну в каталоге GAC_32. В GAC номер версии 1.14322.2365. В GAC_32 номер версии 2.0.50727.1433, как описано выше. Во всех трех вариантах, однако, SqlDbType перечислимы отображает те же Int значения для одних и тех же типов, для тех, кто в сообщениях об ошибках:
DateTime = 4
Int = 8
UniqueIdentifier = 14
Я боюсь, что версия может быть отвлекающий маневр: если проблема имеет с каркасными версиями, не должна ли проблема возникать в 100% случаев, а не быть переходной?
Спасибо за хорошее начало. Рассматривая Reflector, SqlDbType со значением 8 является Int. Мое приложение не будет работать, если у него возникнут проблемы с чтением Ints из базы данных. Как в мире это происходит, и как это может быть так кратковременно, если оно связано с каркасной версией? – flipdoubt