新閣上位機開發--數據庫系列之特定實例錯誤

前言

 

 

 

 

對於出現上位機開發的同學來說,大家在學習數據庫的時候,以上兩個錯誤基本上是不可避免的,圖1是使用SSMS登錄時出現的錯誤,圖2是通過C#代碼連接數據庫時出現的錯誤。

今天就這個錯誤,跟大家做一些具體的分析,希望大家可以徹底解決這個問題。

分析

以上兩個錯誤是完全一樣的,是同一個問題導致的。

其實錯誤提示已經清晰地說明了原因:網絡相關或特定於實例的錯誤。

網絡相關的我們先不用管,先說“特定於實例的錯誤”,換句更加明白的話就是“數據庫的實例名稱有錯誤”。那數據的實例名是哪部分呢?很清楚上面數據庫登錄界面中,用紅色方框標出來的部分就是。在C#程序中,用箭頭標出的Server=後面的部分就是。那實例名到底對不對呢?

解決步驟1

首先,我們打開計算機的系統信息,看看你當前用的計算機的名稱是什麼不就知道了?如下圖:

 

 

經過仔細對比發現原來上面的實例寫錯了,在“DESKTOP-LNU3H65”後面多寫了一個“0”,這個就是問題的原因。那我們就改過來,再測試一下,登錄是OK的!如下圖:

 

 

C#程序中也修改成正確的,如下:

 

 

 

 

運行也OK。

也就是你自己把自己電腦的名稱複製過去就解決了。

那如果以上方法還不行,還是同樣的錯誤!怎麼辦?

解決步驟2

我們打開計算機的服務,找到數據庫的服務,發現如下:

 

 

通過上面的查看,在我當前的計算機服務中有兩個服務,第一個是“默認實例”,第二是“命名實例”,我們剛纔直接用的計算機名稱,表示連接的“默認實例”,但是現在這個默認實例的狀態是禁用的,也就是服務沒有運行,所以,還是登錄不了。解決方法就是雙擊這個服務,彈出窗口,啓動類型選擇“自動”,點擊右下角“應用”,然後在點擊“啓動”按鈕即可。

 

 

修改完成後,再次運行肯定能夠連接上。但是,如果你的計算機上,並不是默認實例,也沒有默認實例,只有一個命名實例怎麼辦?比如我們連接命名實例如下:

 

 

這就要求登錄數據庫時,那個服務器名就要用“計算機名\實例名”這樣來寫纔行,參考如下圖的修改:

 

 

點擊連接,完全OK!

 

 

當然,前提條件是要保證這個服務同樣也要正常運行纔可以。特別注意的是看好你的數據庫服務命名實例的具體名稱,不要寫錯,如果寫錯,同樣還是前面的錯誤。而且要注意這個“反斜槓\”要寫對。

C#程序中要按照如下要求去寫:

 

 

也就是C#中要使用兩個反斜槓來實現轉義,使用一個會出錯,這個是基礎語法知識,大家應該是知道的。如果你不想用兩個反斜槓,也可以這麼解決,在字符串的前面使用@符號來實現轉義,如下:

 

 

解決步驟3

如果你的計算機,並不是本地連接服務器,而是連接局域網其他的計算機中的數據庫服務,或者是遠程雲服務器的數據庫,那連接字符串如果是默認實例就應該寫“Server=IP地址”,如果是命名實例就寫“Server=IP地址/實例名稱”。IP地址必須是局域網正確的IP地址或者是遠程服務器的外網IP地址。特別的,以上修改後,如果問題還是沒有解決,請按照如下方法去做:

【1】檢查網絡連接是否正常,確保物理連接暢通(可以使用ping IP地址的方法)

【2】檢查數據庫服務所在的計算機,有沒有防火牆,如果有,查看防火牆有沒有攔截,如果攔截放行即可,或者直接關閉即可(如果允許)

【3】檢查局域網或遠程服務器的TCP/IP協議是否打開,這裏要求必須打開,方法如下:

通過“開始菜單”的目錄,找到SQLServer的安裝菜單中的“配置管理器”

 

 然後點擊,打開窗口:

 

 

 

 

雙擊“TCP/IP”,然後選擇“是”,接着點擊“確定”按鈕:

 

 

 

 

最後,別忘記,重新啓動SQLServer的服務。可以在配置管理器中直接找到服務雙擊,然後點擊“重新啓動”即可:

 

 

按照以上方法,即可解決所有網絡連接和實例問題。

解決步驟4

但是在C#程序中還有一種特殊情況,也會報同樣的錯誤,C#程序錯誤提示如下:

 

 

其實這個並不是實例本身的錯誤,是因爲寫字符串的時候,把關鍵字之間的分號“;”,寫成了逗號,這樣在解析字符串的時候,它認爲Server後面的全部都是實例名稱,那這樣相對來說肯定是錯誤的實例。

所以會出現同樣的錯誤。解決方法就是當你看到實例沒問題的時候,看看是不是把分號寫錯了。而且,注意任何標點符號,必須要用“英文半角”。

好了以上就是關於這個錯誤產生的各種原因和解決方法,已經給大家講解完畢了,希望對大家有幫助。

不管是上位機開發,還是軟件開發,數據庫都是比較基礎的部分,一定要熟練掌握,

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章