首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

VB.NET 連接 SQL Server:使用 IP 位址出現 AccessViolationException、用 Local 則正常的解決方案

     編輯:關於.NET

錯誤現象

System.AccessViolationException:嘗試讀取或寫入受保護的記憶體。這通常指示其他記憶體已損壞。在 System.Data.dll 中發生。

例外截圖

復現條件

  • OS:Windows 7 x64 / Windows 8.x
  • VS2013、VB.NET、SQL Server 2008
  • 連接字串 Server=(Local) → 正常
  • 連接字串 Server=192.168.x.x (本機 IP) → 拋出 AccessViolationException
  • 同樣程式碼在其他機器正常

程式碼對比

' 正常
Public connStr As String = "Server=(Local);Database=charge_sys;User ID=sa;Password=123456"

' 錯誤
Public connStr As String = "Server=192.168.24.123;Database=charge_sys;User ID=sa;Password=123456"

唯一差異在 Server 值:(Local) vs 具體 IP。

解決方案一:重置 Winsock 目錄 (推薦首試)

以系統管理員身分開啟命令提示字元:

netsh winsock reset

重啟電腦。此操作重置網路通訊端介面,修復因驅動/軟體衝突導致的 TCP/IP 堆疊損壞。

解決方案二:升級 .NET Framework 4.5.2+

Visual Studio 回報中心確認此為 VS2013 安裝後的已知問題,微軟於 .NET Framework 4.5.2 (2014/05 釋出) 修復。

  1. 檢查目前版本:Tools > About 或註冊表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\Release (394802 = 4.6.1, 394254 = 4.5.2)。
  2. 下載安裝 .NET Framework 4.5.2 或更新版本。
  3. 重啟後問題解決。

檢查 .NET 版本 回報中心確認

根因分析

  • VS2013 安裝過程可能修改系統 Winsock 目錄或註冊表,導致非本地回環介面的 TCP 連線在 System.Data.SqlClient 內部觸發非受控記憶體存取違規。
  • (Local) 走 Shared Memory / Named Pipe 協定,繞過 TCP 堆疊,因此不受影響。
  • .NET 4.5.2 修正了 SqlClient 內部緩衝區管理邏輯,徹底解決此類 AccessViolation。

總結建議

  1. 優先嘗試 netsh winsock reset + 重啟,無風險、速度快。
  2. 若無效,升級 .NET Framework 至 4.5.2+ (含 4.6.x, 4.7.x, 4.8),一勞永逸。
  3. 連接字串建議統一使用 Server=localhost 或 Server=127.0.0.1 走 TCP 回環,避免 (Local) 協定歧義。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved