簡體   English   中英

VB6應用程序可以連接到SQL Server,但.NET應用程序不能

[英]VB6 applications can connect to SQL Server, but .NET applications can't

我們的系統結合使用VB6遺留應用程序和較新的.NET應用程序。 應用程序部署到我們的客戶端,他們從終端服務器框運行應用程序,SQL Server數據庫在不同的框上運行。

VB6應用程序工作正常,而所有.NET應用程序在啟動時都會失敗(嘗試連接到數據庫以讀取配置信息),每次都有錯誤:

System.Data.SqlClient.SqlException:建立與SQL Server的連接時發生與網絡相關或特定於實例的錯誤。 服務器未找到或無法訪問。 驗證實例名稱是否正確,以及SQL Server是否配置為允許遠程連接。 (提供程序:TCP提供程序,錯誤:0 - 連接嘗試失敗,因為連接方在一段時間后沒有正確響應,或者由於連接主機無法響應而建立連接失敗。)

這是非常奇怪的事情:我在C#中創建了一個測試.NET應用程序,它復制了.NET應用程序使用的確切連接字符串 - 我部署了一個顯示所使用的實際連接字符串的應用程序的檢測版本 - 以及測試應用程序的工作原理

VB6連接字符串(有效): Provider=SQLOLEDB;Data Source=servername;Initial Catalog=databasename;User ID=username;Password=password;

.NET連接字符串(兩者都有效和不起作用): Data Source=servername;Initial Catalog=databasename;User ID=username;Password=password;Application Name="ourappname"

我們的其他客戶都沒有遇到過同一個二進制文件的問題,這告訴我.NET應用程序如何與這個特定客戶端系統進行交互是一個問題。

我應采取哪些步驟來解決/解決此問題? 我現在真的很茫然。 我希望其他人之前見過這個問題; 我在Google上找不到任何相關內容。


  • 這兩個框都是在VMWare上運行的Windows Server 2008 R2 SP1,並且位於同一個域中
  • 兩個盒子都運行ESET NOD32; 禁用沒有改變任何東西
  • SQL Server是2008 R2 RTM的默認實例(在同一個框中也有2008和2008 R2命名實例)
  • 應用程序(和我的測試應用程序)是.NET 4.0
  • 該應用程序使用SQL登錄進行身份驗證(是的,我檢查了失敗的應用程序使用的密碼是否正確)
  • 某些.NET應用程序使用不同的代碼來執行應用程序啟動,但它們都表現出相同的錯誤
  • 一些.NET應用程序是C#,一些是VB,一些是混合的(VB應用程序,C#核心程序集)
  • 我試過修復.NET 4.0安裝
  • 我試過重啟兩個盒子
  • 我已經嘗試部署源二進制文件,以便繞過我們的部署子系統(如果它導致某種類型的損壞)
  • 我在本地編譯的檢測應用程序經歷了與通過Team System構建的原始應用程序相同的行為

我發現這種行為通常有幾個主要原因:

  1. SQL Server未配置為偵聽特定連接類型。 要確定這一點,請在SQL計算機上打開SQL Server配置管理器,單擊SQL Server網絡COnfiguraiton,然后單擊MSSQLServer的協議。 驗證是否已啟用TCP / IP。

  2. SQL Server不允許遠程連接(如果其他應用程序正在連接,那么這顯然不是問題)。

  3. 客戶端計算機未配置為使用SQL Server支持的協議與SQL Server通信,或者客戶端計算機輸入的配置信息不正確。 要驗證這一點,請從Run ...提示符運行cliconfg,並確保啟用了相應的協議,並且Alias選項卡中沒有任何沖突的別名。 我通常會為連接字符串中配置的計算機名稱添加一個特定的IP地址,以防出現DNS問題(至少用於測試)。

  4. 由於VB6客戶端工作,而.Net客戶端不工作,因此64位與32位訪問可能存在問題。 如果您的應用程序是針對64位或任何CPU編譯的,您可以嘗試使用32位構建來查看是否可以解析訪問權限。 如果是這樣,那么這很可能是64位SQL客戶端配置問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM