2009-08-06 90 views
1

我有一箇舊的.net 1.0 web應用程序,需要對其進行一些維護。我使用自動升級程序將其升級到.net 3.5(以及後來嘗試2.0),但現在它無法連接到數據庫。已升級.net webapp無法打開與數據庫的連接

表面上看起來像一個noob連接字符串問題,但我認爲它更可能與升級中的一些細微問題有關。


我得到的一般錯誤消息:

在建立與服務器的連接時出錯。連接到SQL Server 2005時,此故障可能是由於在默認設置下,SQL Server不允許遠程連接。 (provider:命名管道提供程序,error:40 - 無法打開到SQL Server的連接)


的源代碼是非常基本的,沒有鈴鐺或口哨聲:

protected static SqlConnection objConn; 

objConn = new SqlConnection(strConnectionString); 

try 
{ 
    objConn.Open(); 
} 

,也嘗試過作爲:

using (objConn = new SqlConnection(strConnectionString)) 
{ 
    objConn.Open(); 
    ... 
} 

連接字符串來自web.config中,並使用調試器設置一個破發點,並通過連接的屬性看它試圖打開它之前,我可以看到,它的發現連接字符串正確:

的connectionString = 「數據源= XXX.XXX.XXX.XXX;初始目錄= XXXXXX;用戶ID = XXXXXX,密碼= XXXXXX」


我想的事情少數我已經排除了:

無論連接到Sql Server 2005還是Sql Server 2000,錯誤消息都是相同的。

VS錯誤列表中沒有錯誤或警告。

連接字符串與其他一些也使用相同數據庫的網站相同,所以我知道連接字符串是正確的。

我試過讓它從我的本地計算機(我可以通過Sql查詢分析器連接到數據庫)連接,從普通的網絡服務器,因此它不是防火牆問題,也不是最大連接問題。

它連接到服務器的IP地址,所以它不是一個電腦瀏覽器問題(和其他的web應用可以正常連接。

TCP和命名管道是在SQL Server上啓用了2個網絡協議。

在連接字符串中添加「Network Library = DBMSSOCN;」會將錯誤消息更改爲包含「provider:TCP Provider,error」(有一天我在連接字符串中進行了更改,但也有影響,不要記得現在。)


我已經通過堆棧溢出3樓其他類似的帖子已經看到:
(無法列出這裏鏈接,因爲我是一個新用戶,但他們的問題的ID,如果其他人想要在鏈接到它們評論是:63875,1038888,846479)
而這篇文章在其他網站上有東西一些好的想法去嘗試這並沒有幫助:
http://weblogs.sqlteam.com/tarad/archive/2008/05/23/60609.aspx


我最好的猜測是,它的東西引起的.net版本之間的升級 - 在web.config中可能出錯了?

這是一個C#應用程序,很小/基本,但已被分成三個項目。

+0

更新到3.5時,我想確定一些事情:你在3.5sp1上還是隻在基礎上3.5? – 2009-08-06 04:44:55

+0

另外,您是否可以使用同一個服務器上的相同連接字符串連接到數據庫? – 2009-08-06 04:45:36

+0

你說你可以通過SQL Server Management工作室(或查詢分析器)進行連接,你是否也在你遇到問題的機器上測試它(從你的文本中不完全清楚)? – Gertjan 2009-08-06 06:07:47

回答

0

編寫一個控制檯應用程序,它除了嘗試使用您發佈的代碼連接到數據庫外什麼也不做。在控制檯程序中對連接字符串進行硬編碼。

換句話說,刪除所有的干擾,以確保您試圖運行的核心代碼實際上正常工作。

+0

最後的手段:-)如果/當其他所有事情都失敗了,至少我還有什麼可以嘗試......除非這仍然失敗! – Redzarf 2009-08-06 22:22:58

+0

我現在已經試過了,控制檯應用程序也無法連接。時間讓它成爲系統管理員的問題!感謝您的建議。 – Redzarf 2009-08-07 03:18:31

0

根據this,SQL 2005未​​配置爲允許傳入本地或遠程連接,您必須自行啓用它。

+0

我不認爲這是問題所在。他說,相同的字符串對其他應用程序有效(「連接字符串與其他一些也使用相同數據庫的網站相同,因此我知道連接字符串是正確的。」)。但對於可能會遇到連接到SQL 2005數據庫時遇到問題的其他用戶而言,指出這一點很好。 – Gertjan 2009-08-06 06:04:51

+0

是的,這是別人應該檢查的第一件事情之一,但那已經完成了。此外,我也無法連接到SQL 2000數據庫。 – Redzarf 2009-08-06 22:19:08

0

我確定您已經完成了這些步驟,但是嘗試啓用SQL Server的遠程連接並啓用SQL Server Browser服務。兩種演練都可以在here找到。

0

您可以嘗試使用其他類型的連接字符串。我的連接字符串通常格式,如:

<add name="DataFrom" connectionString="SERVER=[servername];Database=[dbname];UID=[userid];PWD=[password];"/> 

你說,也正在.NET 3.5應用程序的其他aplication?



我也很好奇你如何設法讓這段代碼工作

using (var = new SqlConnection(strConnectionString)) 
{ 
    objConn.Open(); 
    ... 
} 

我想你的意思

using (objConn = new SqlConnection(strConnectionString)) 

吧?

+0

謝謝,我已經修復了上面的代碼示例中的錯誤(正在整理一些信息,應該保持原樣)。我會嘗試更改您建議的連接字符串關鍵字。 – Redzarf 2009-08-06 22:21:53

1

由於從來就沒有提供對這一問題的解決方案的實際,這裏是一個幫助我:

我有完全相同的問題,當我升級了完美運行ASP.NET 2.0應用到.NET 3.5。 Web應用程序正在在Windows XP主辦IIS 5.1,我使用SQL Server Express 2005年,我用我的web.config以下連接字符串:

<add name="myDbConnection" providerName="System.Data.SqlClient" connectionString="Data Source=http://localhost;Server=.\SQLEXPRESS;Initial Catalog=MyDatabaseName;Integrated Security=True"/> 

所以你看,我在這裏沒有tcp連接或連接到遠程服務器。我只是通過命名管道連接本地主機上的SQLEXPRESS實例。這就是爲什麼我認爲,與SQL Server 2005上的遠程連接完全沒有任何關係。但正如我發現的那樣,它的確如此! (我不知道這個的真正原因!)我花了幾個小時找出來,所以也許這有助於某人......

,你所要做的(請使用谷歌的細節):

  1. 允許通過SQL Server的本地和遠程連接2005外圍應用配置工具 (我選擇的選項「同時使用TCP/IP和命名管道「)
  2. 啓用SQL Server Browser服務
  3. 通過SQL Server配置管理器工具監聽TCP端口設置爲1433所有IP
  4. 享受你運行的Web App :-)

爲什麼所有這些都是必需的,以便從.NET 3.5 Web App成功連接到SQL Server時,它已經可以從.NET 2.0運行了!