弊社の .NET 2.0 シック クライアント アプリを使用しているお客様の中には、SQL 2000 SP4 サーバーからデータを読み取る際に奇妙で断続的なエラーが発生するものがあります。これらのエラーが発生しない SQL 2000 を使用している一部の顧客 (および 2005 を使用している顧客の多く) がいます。
私が気づいたことの 1 つは、テスト環境のアプリが System.Data 2.0.50727 を参照していることです。3053 ; 一方、アプリは 2.0.50727 を参照します。お客様のシステムでは1433 。これらの 2 つのリビジョンの違いは何ですか? また、それは以下に説明するエラーに関連している可能性がありますか?
列挙値が 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)
更新:クライアントのワークステーションの 1 つから System.Data をダウンロードしました。GAC には 2 つのバージョンがあり、1 つは GAC ディレクトリに、もう 1 つは GAC_32 ディレクトリにありました。GAC では、バージョン番号は 1.14322.2365 です。GAC_32 では、バージョン番号は前述のように 2.0.50727.1433 です。ただし、3 つのバージョンすべてで、SqlDbType 列挙型は同じ int 値をエラー メッセージ内の同じ型にマップします。
DateTime = 4
Int = 8
UniqueIdentifier = 14
問題がフレームワークのバージョンに関係している場合、問題は一時的なものではなく、100% の確率で発生するのではないでしょうか?