簡體   English   中英

Microsoft OLE DB Provider for SQL Server錯誤'80004005'

[英]Microsoft OLE DB Provider for SQL Server error '80004005'

我已將經典的ASP站點遷移到新服務器,並收到以下錯誤消息。

我嘗試了不同的連接字符串,但沒有一個工作。

我甚至不確定連接字符串是否是問題

新服務器是Windows 2012 Server,SQL Server 2008 R2 Express計算機。


Microsoft OLE DB Provider for SQL Server error '80004005'

[DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied.

/scripts/dbcode.asp, line 31 

Application("C2M_ConnectionString") = "Provider=SQLNCLI10;Server=(local);Database=mysite_live;Uid=mysitec_Live;Pwd=mypass;"

如果它是Express實例,則很可能不是默認實例,而是命名實例。 所以你可能意味着:

... "Provider=SQLNCLI10;Server=.\SQLEXPRESS; ...
--- instead of just (local) ---^^^^^^^^^^^^

否則,您需要在該計算機上的SQL Server配置管理器中向我們顯示服務器屬性,以便我們能夠告訴您如何更正連接字符串。

正如Aaron Bertrand所提到的,看看你的連接屬性會很有趣(在Sql Server配置中檢查以下是否啟用了Name Pipes和TCP / Ip)。 由於您可以從SSMS連接,我會要求檢查該服務器上是否允許遠程連接也可以告訴您Sql瀏覽器服務是否正在運行?

這是一個鏈接,我作為SQL Server上可能的連接問題的提醒或檢查列表與我保持密切聯系。 SQL連接問題最后你可以嘗試作為提供程序“SQLNCLI”而不是“SQLNCLI10”

嘗試在連接字符串中ping服務器。 應用程序所在的服務器應該能夠通過憑據指定的端口進行通信。 如果您在本地開發,請嘗試指定“localhost”。 如果服務器是群集的,或者您作為實例安裝,則需要指定該實例。 如果使用sql憑據,還要確保將服務器配置為進行混合模式身份驗證。

或者嘗試

Data Source = localhost; Initial Catalog = DBNAME; Persist Security Info = True; User ID = MyUserName; 密碼= myPassword;復制代碼

它可能是權限問題,請檢查服務器是否從SQL管理連接相同的配置詳細信息。 其他是用戶名/密碼錯誤。

這是我要做的:

編輯:請注意, 這個SO帖子 ,一些向下,有一個有趣的方法來創建正確的連接字符串使用。

  1. 打開SSMS(Sql Server Management Studio)並復制/粘貼用戶名/密碼。 不要輸入,復制/粘貼。 確認沒有問題。
  2. 啟動代碼(這是我的下一步b / c這將是我的下一個最容易做的事情)並逐步到第31行驗證一切設置正確。 以下是有關如何執行此操作的一些信息 我知道,對於您來說這可能是不可能的,因此您可能會跳過此步驟。 如果可能的話,我會在我的本地計算機上進行設置並驗證本地連接沒有問題。 如果我在本地收到此錯誤,那么我有更好的機會修復它。
  3. 驗證生產服務器上是否安裝了Provider = SQLNCLI10。 我會關注這篇SO帖子 ,可能是gbn發布的答案。
  4. 你有其他工作網站? 他們中的任何一個經典的asp? 即使沒有,我也會將另一個站點中的連接字符串與您在此處使用的連接字符串進行比較。 確保沒有明顯的差異。
  5. 啟動SQL Server Profiler並開始跟蹤。 連接到站點並導致錯誤,然后轉到探查器,看看它是否為您提供了其他錯誤信息。
  6. 如果所有這些都失敗了,我會開始討論這個問題

對不起,我不能指出一些事情說,有問題!

祝好運!

第31行:

cmd.ActiveConnection = Application("C2M_ConnectionString")

你是如何實例化cmd

而不是ConnectionString是錯誤的,可能cmd在新環境中的表現不同。

編輯添加:

我看到你已經從IIS 7遷移到IIS 8.要在IIS 7上運行經典ASP站點,需要手動更改服務器默認值,例如“允許父路徑”。 是否有可能某些必要的調整沒有遷移過來?

如果您沒有使用Option Strict On運行,那么您應該嘗試 - 它通常會揭示這樣的微妙問題的根源。 (當然,首先你將被迫聲明所有變量,這對於完成的代碼來說非常繁瑣。)

你有沒有嘗試過SQL Server OLE DB驅動程序連接字符串:

"Provider=sqloledb;Data Source=(local);Initial Catalog=mysite_live;User Id=mysitec_Live;Password=mypass;"

或ODBC驅動程序:

"Driver={SQL Server};Server=SERVERNAME;Trusted_Connection=no;Database=mysite_live;Uid=mysitec_Live;Pwd=mypass;"

至少這是我在沒有任何幫助的情況下會做的事情。 也許您將能夠獲得更多有用的錯誤信息。

這可能是x86 / x64嗎?

以下線程似乎表明(本地)別名是一個32位別名,它在64位服務器上失敗: http//social.msdn.microsoft.com/Forums/en-US/sqldataaccess/thread/c701d510- 90e5-4dd0-b14f-ca1d694d6615 (注意錯誤是你所擁有的)

當您在服務器上測試.udl時,您是否同時測試了x86和x64?

根據這篇博文( http://blogs.msdn.com/b/farukcelik/archive/2007/12/31/udl-test-on-a-64-bit-machine.aspx )的建議,您可以測試您當地的udl:

  • 只需雙擊即可顯示64位(與運行“C:\\ Program Files \\ Common Files \\ System \\ Ole DB \\ oledb32.dll”相同,OpenDSLFile C:\\\\ test.udl
  • 在32位通過雙重運行C:\\ Windows \\ syswow64 \\ rundll32.exe“C:\\ Program Files(x86)\\ Common Files \\ System \\ Ole DB \\ oledb32.dll”,OpenDSLFile C:\\\\ test.udl

如果您可以確認別名有問題,我建議您按照此處的指南創建一個新的: http//msdn.microsoft.com/en-us/library/ms190445(v = sql.105)的.aspx

您是否嘗試使用服務器IP地址而不是“(本地)”? 像“ Server = 192.168.1.1; ”之類的東西(顯然你需要使用服務器的真實IP地址)

如果您嘗試使用服務器IP地址,請檢查SQL Server正在偵聽您在連接中使用的IP地址的“ SQL-Server配置程序 ”。 SQL Server配置器截圖

檢查/嘗試的其他有用的事情:

  • 並檢查數據庫是否在默認的SQL Server實例中,或者它是否在命名實例中。
  • 您是否檢查過防火牆是否具有用於打開SQL Server端口的TCP / IP規則?
  • 您是否嘗試使用其他使用TCP / IP連接的軟件連接到SQL Server?

安裝時默認禁用SQL Server Browser服務。 我建議您啟用並啟動它。 有關詳細信息,請參閱此鏈接和標題為“使用SQL Server Browser”的部分,以解釋為什么這可能是您的問題。

如果您不希望啟用該服務,則可以啟用TCP / IP協議(默認情況下已禁用),指定靜態端口號,並使用127.0.01,<端口號>來標識服務器。

步驟1:啟用TCP / IP協議啟動>>所有程序>> Microsoft SQL Server >>配置工具>> SQL Server配置管理器>> SQL Server網絡配置>> MSSQLSERVER協議>>右鍵單擊“TCP / IP”和選擇“啟用”。

步驟2:將數據源屬性的特定機器名稱更改為(本地)將重新解決問題ni SQL SERVER 2012。

暫無
暫無

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

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