У нас есть некоторые клиенты, использующие наше приложение для толстых клиентов .NET 2.0, которые испытывают странные, периодически возникающие ошибки при чтении данных с сервера SQL 2000 SP4, где действия были успешными всего несколько минут назад. У нас есть клиенты, использующие SQL 2000 (и многие, использующие 2005), где эти ошибки не возникают.
Одна вещь, которую я заметил, это то, что приложение в наших средах тестирования ссылается на System.Data 2.0.50727. 3053 ; тогда как приложение ссылается на 2.0.50727. 1433 в системах клиента. В чем разница между этими двумя версиями и может ли это быть связано с ошибками, описанными ниже?
Вот пример трассировки стека ошибки, где значение перечисления равно 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% времени, а не быть временной?