Visual Studio 2013または.NET Framework 4.5.1 インストールした後に、System.Data.SqlClient を使用すると、「AccessViolationException」例外が発生し、アプリケーションがクラッシュする。

重要: このサポート技術情報 (以下「KB」) は、翻訳者による翻訳の代わりに、マイクロソフト機械翻訳システムによって翻訳されたものです。マイクロソフトは、お客様に、マイクロソフトが提供している全ての KB を日本語でご利用いただけるように、翻訳者による翻訳 KB に加え機械翻訳 KB も提供しています。しかしながら、機械翻訳の品質は翻訳者による翻訳ほど十分ではありません。誤訳や、文法、言葉使い、その他、たとえば日本語を母国語としない方が日本語を話すときに間違えるようなミスを含んでいる可能性があります。マイクロソフトは、機械翻訳の品質、及び KB の内容の誤訳やお客様が KB を利用されたことによって生じた直接または間接的な問題や損害については、いかなる責任も負わないものとします。マイクロソフトは、機械翻訳システムの改善を継続的に行っています。

英語版 KB:2915689
現象
Microsoft Visual Studio 2013 またはMicrosoft.NET Framework 4.5.1をインストール後、TCPポート経由でMicrosoft .NET Framework Data Provider for SQL Serverを利用してMicrosoft SQL Serverに接続しようとするとアプリケーションがクラッシュします。さらに、アプリケーションは、 System.AccessViolationException例外をスローします。

注: <b>アプリケーションでこの問題が発生すると、さまざまなコールスタックが生成されます。次の例は、このような状況での一般的なコール スタックのパターンを表示します。

例 1

<Module>.SNIAddProvider(SNI_Conn*, ProviderNum, Void*)SNINativeMethodWrapper.SNIAddProvider(System.Runtime.InteropServices.SafeHandle, ProviderEnum, UInt32 ByRef)System.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(Boolean, Boolean, Boolean ByRef)System.Data.SqlClient.TdsParser.Connect(System.Data.SqlClient.ServerInfo, System.Data.SqlClient.SqlInternalConnectionTds, Boolean, Int64, Boolean, Boolean, Boolean)System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(System.Data.SqlClient.ServerInfo, System.String, Boolean, System.Data.ProviderBase.TimeoutTimer, System.Data.SqlClient.SqlConnection)System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(System.Data.SqlClient.ServerInfo, System.String, Boolean, System.Data.SqlClient.SqlConnection

例 2

ntdll!RtlEnterCriticalSectionSystem_Data!CCriticalSectionNT_SNI::EnterSystem_Data!CAutoSNICritSec::{ctor}System_Data!SNICloseSystem_Data_ni!SNINativeMethodWrapper.SNIClose(IntPtr)System_Data_ni!System.Data.SqlClient.SNIHandle.ReleaseHandle()

例 3

SNINativeMethodWrapper.SNIClose(IntPtr)System.Data.SqlClient.SNIHandle.ReleaseHandle()System.Runtime.InteropServices.SafeHandle.InternalDispose()System.Runtime.InteropServices.SafeHandle.Dispose(Boolean)System.Runtime.InteropServices.SafeHandle.Dispose()System.Data.SqlClient.TdsParserStateObject.Dispose()System.Data.SqlClient.TdsParser.Disconnect()System.Data.SqlClient.SqlInternalConnectionTds.LoginFailure()

例 4

System.Data.SqlClient.SqlInternalConnection.OnErrorSystem.Data.SqlClient.TdsParser.ThrowExceptionAndWarningSystem.Data.SqlClient.TdsParserStateObject.SNIWritePacketSystem.Data.SqlClient.TdsParserStateObject.WriteSniSystem.Data.SqlClient.TdsParserStateObject.WritePacketSystem.Data.SqlClient.TdsParser.TdsLoginSystem.Data.SqlClient.SqlInternalConnectionTds.LoginSystem.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlistSystem.Data.SqlClient.SqlInternalConnectionTds..ctorSystem.Data.SqlClient.SqlConnectionFactory.CreateConnection System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection System.Data.ProviderBase.DbConnectionFactory.TryGetConnection System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal System.Data.ProviderBase.DbConnectionClosed.TryOpenConnectionSystem.Data.SqlClient.SqlConnection.TryOpenInner System.Data.SqlClient.SqlConnection.TryOpenSystem.Data.SqlClient.SqlConnection.Open
原因
インターセプトし、受信および送信ネットワーク トラフィックを変更するいくつかの非 IFS Winsock ベース サービス プロバイダー (Bsp) または複数層サービス プロバイダー (Lsp)、システムにインストールされているために、この問題が発生します。したがって、アプリケーションは、SQL Server に接続するときこれらの Bsp または Lsp に干渉する Winsock の呼び出し。

これは、問題の原因であるかどうかを確認するのには、「関連情報」セクションに移動します。
解決方法
この問題を解決するには、.NET Framework 4.5.1 をアップグレードします。 Microsoft.NET Framework 4.5.2.
回避策
この問題を回避するには、以下の方法を試してください。
  • 非 IFS の BSP または LSP をアンインストールします。これを行うには、次の方法のいずれかの手順に従います。
    • 非 IFS BSP または LSP をシステムにインストールするアプリケーションをアンインストールします。
    • コマンド プロンプトで次のコマンドを実行します。

      netsh winsock remove provider <id>

      注: <b> このコマンドで、id> の非-IFS LSP 次のコマンドを実行するときに表示される「カタログのエントリ Id」の値を表します。

      netsh winsock show catalog
  • 4.5.1 の.NET Framework をアンインストールします。

    注: <b> このオプションは、システムに Visual Studio 2013 がインストールされている場合には適用できません。
詳細
IFS 以外の BSP または LSP かどうかを確認するがインストールされている、 netsh WinSock カタログの表示] コマンドを使用します。次の条件を返されるWinsock カタログのプロバイダーのエントリのすべての項目を満たしていることを確認してください。
  • サービス フラグ値に0x20000ビット セットがある場合、プロバイダーは IFS のハンドルを使用して、正常に動作を示します。
  • 0x20000ビットがオフ (設定なし) の場合は、プロバイダーは、IFS 以外の BSP または LSP を示します。

IFS 以外の BSP または LSP かどうかをプログラムで確認するがインストールされている、 WSCEnumProtocols関数を使用して、利用可能なプロトコルを列挙します。XP1_IFS_HANDLESフラグ (または0x20000) が設定されているかどうかを判断するのには返された各WSAPROTOCOL_INFOWの構造体のdwServiceFlag1メンバーを確認してください。WSCEnumProtocols関数の場合、Windows SDK のマニュアルには、これを操作する方法を示すサンプル プログラムのソース コードが含まれています。

注:
  • サービス フラグ値は、netsh コマンドでは、Windows 7 および Windows Server 2008 R2 で導入されました。したがって、この値をチェックするのには netsh コマンドを使用して、Windows Vista または Windows Server 2008 では動作しません。
  • WSCEnumProtocols関数は、 WSAPROTOCOL_INFOW構造体と IFS と非-IFS Bsp または Lsp がインストールされているかどうかを検出するのにはdwServiceFlag1のメンバーを取得するために使用できます。WSCEnumProtocols関数は、Windows 2000 およびそれ以降のバージョンでサポートされています。WSCEnumProtocols関数を使用する方法のコード例については、次を参照してください。 WSCEnumProtocols 関数.
  • 以外の IFS Bsp と Lsp の問題の詳細については、次を参照してください。 SetFileCompletionNotificationModes API により、I/O 完了ポートの IFS LSP がインストールされている場合に正常に動作しません。.
状況
マイクロソフトは、この問題を「対象製品」セクションに記載されているマイクロソフト製品の問題として認識しています。

警告: この記事は自動翻訳されています

プロパティ

文書番号:2915689 - 最終更新日: 09/05/2015 07:50:00 - リビジョン: 3.0

Microsoft .NET Framework 4.5.1

  • kbsurveynew kbtshoot kbexpertiseadvanced kbmt KB2915689 KbMtja
フィードバック