![](/img/trans.png)
[英]Microsoft OLE DB Provider for ODBC Drivers error '80004005' when asp classic app use azure sql server
[英]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帖子 ,一些向下,有一個有趣的方法來創建正確的連接字符串使用。
對不起,我不能指出一些事情說,有問題!
祝好運!
第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:
如果您可以確認別名有問題,我建議您按照此處的指南創建一個新的: 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 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.