台灣最大程式設計社群網站
線上人數
991
 
會員總數:244689
討論主題:188779
歡迎您免費加入會員
討論區列表 >> ASP.NET >> 網站架上IIS之後讀不到資料庫
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
網站架上IIS之後讀不到資料庫
價值 : 50 QP  點閱數:191 回應數:7

樓主

阿宅
門外漢
0 1
34 4
發送站內信

各位大大好,小弟遇到一個問題一直無法解決
小弟在VS2019的IIS Express單機執行時,都可以讀取資料庫,但在架上IIS後一直發生下列錯誤

[Win32Exception (0x80004005): 找不到網路路徑。]

[SqlException (0x80131904): 建立連接至 SQL Server 時,發生網路相關或執行個體特定的錯誤。找不到或無法存取伺服器。確認執行個名稱是否正確,以及 SQL Server 是否設定為允許遠端連線。 (provider: Named Pipes Provider, error: 40 - 無法開啟至 SQL Server 的連接)]

看了一些文章說有可能是連接字串錯誤,連接字串如下

var connectionString= "Data Source=IP,Port;Initial Catalog=DBName;User ID=UserName;Password=UserPassword";


資料庫是架在別台機器上,跟網頁(IIS)的設備不同,開發的時候就是在IIS這台設備開發,故一開始就是以遠端連接SQL Server的方式連線,都可以讀取到資料
而且資料庫有別的網站正在使用,所以應該是可以排除SQL Server的問題。

而本機部分,爬了一些文,防火牆關了,Port開了,組態管理員的Server服務跟TCP/IP也開了,都還是不行
不知道小弟還有哪裡疏忽了沒有注意到,還請大大們指點。



搜尋相關Tags的文章: [ IIS ] , [ C# ] , [ SQL ] ,
本篇文章發表於2019-07-08 17:59
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
請教
從您的描述來看
1.您開發機器上,遠端沒問題
2.您上架的IIS主機,連接SQL似乎有問題

您所上架的IIS
是您目前開發的機器嗎?
還是另外一台機器(例如Server)

如果是另一台機器,可能要測試一下IIS這一台機器是否可以正常的連上SQL

^.^a
本篇文章回覆於2019-07-09 14:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
作者回應

阿宅
檢舉此回應
版主您好,
IIS主機跟我開發是在同一台設備上,所以才納悶為啥不能連線
目前是朝connectionString下手測試

var connString = "Server=tcp:IP,Port;Database=DBName;Integrated Security=false;User ID=UserName;Password=UserPassword";

上面這個連結字串,本機測試也可以順利讀取資料庫,而架上IIS後有不同反應了,連結時會一直轉,不會跑錯誤也沒東西跑出來....
感謝您的回答,若有其他方法還請不吝告知,謝謝
本篇文章回覆於2019-07-09 14:26
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

阿宅
檢舉此回應
問題已解決。
後來把connectionstring放到web.config裡面在讀取就可以正常讀取資料庫了
但是我不明白程式後端,跟到web.config讀取不一樣是字串格式嗎???
為什麼後端直接輸入的方式會導致讀取不到資料庫呢??
不知道有沒有大大可以解答這一點,想知道,感謝
本篇文章回覆於2019-07-09 16:59
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
為什麼後端直接輸入的方式會導致讀取不到資料庫呢??
不知道有沒有大大可以解答這一點,想知道,感謝


有沒有您本來寫法的相關程式碼?
把敏感資料置換一下貼出來

才能夠知道可能的原因
^.^a
本篇文章回覆於2019-07-10 14:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

阿宅
檢舉此回應
原本是這樣

var connectionString= "Data Source=tcp:IP,Port;Initial Catalog=DBName;User ID=UserName;Password=Password";
SqlConnection conn = new SqlConnection(connectionString);
conn.Open();


改成
[code]
SqlConnection conn = new SqlConnection(WebConfigurationManager.ConnectionStrings["connString"].ConnectionString);
conn.Open();
[/code]
在Web.config加連結字串

<connectionStrings>
<add name="connString" connectionString="Data Source=tcp:IP,Port;Initial Catalog=DBName;User ID=UserName;Password=Password"
providerName="System.Data.SqlClient" />
</connectionStrings>


就改這些而已,我開了測試專案只有連接資料庫的部分,沒有其他程式碼的影響,從原本的Code改成後來這樣就可以順利連上了
不懂的地方是從Web.Config讀取connectionString跟我在後端直接寫這個字串會有不同結果,覺得納悶 ╮(╯_╰)╭
有想法請不吝告知,謝謝
本篇文章回覆於2019-07-10 14:42
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
最有價值解答

topcat
捐贈 VP 給 topcat 檢舉此回應
如果是這樣呢?

有明確知道型態,最好直接指定型態

---
題外話
建議使用using來宣告Connection


這可以避免忘記關閉或忘記回收的問題

^.^a
本篇文章回覆於2019-07-10 16:45
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
作者回應

阿宅
檢舉此回應
是型態的關係!!!!
改成string就可以了,感謝版主大大解惑
Connection我後面有寫釋放,另外開測試的時候沒貼上,哈哈
不過又學到一招了,感謝版主大大的解惑
本篇文章回覆於2019-07-11 08:49
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.