【发布时间】:2009-03-13 15:22:51
【问题描述】:
我们的一些客户在使用我们的 .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% 发生而不是暂时发生吗?
【问题讨论】:
标签: .net sql-server thick-client