關於VS2013,sql連線與EF訪問遠端sql資料庫,記憶體訪問非法。
阿新 • • 發佈:2019-01-31
問題描述:
應用程式崩潰,或安裝 Visual Studio 2013年或.NET Framework 4.5.1 後,使用 System.Data.SqlClient,則會出現"AccessViolationException"異常
EF使用System.Data.SqlClient也會報記憶體訪問非法異常。
異常堆疊4種,僅列一種:
<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
解決方法:
netsh winsock reset catalog
微軟的解決方法:
若要變通解決此問題,請嘗試以下方法:
- 解除安裝非 IFS Bsp 或 Lsp。若要執行此操作,請使用下列方法之一:
- 解除安裝在系統上安裝了非 IFS BSP 或 LSP的應用程式。
- 在命令提示符處執行以下命令:
netsh winsock remove provider <id>
注意在此命令中,"目錄條目 Id"值為非-IFS LSP 時執行下面的命令顯示的 <id> 表示:
netsh winsock show catalog
- 解除安裝.NET Framework 4.5.1。
注意如果在系統上安裝了 Visual Studio 2013,此選項不適用。
原理:
由於一些非-IFS Winsock 基礎服務提供商 (Bsp) 或分層服務提供程式 (Lsp) 安裝在系統上擷取和更改的傳入和傳出網路通訊,則會出現此問題。因此,當應用程式連線到 SQL Server 時,這些 Bsp 或 Lsp 干擾 Winsock 通訊,造成記憶體訪問非法。