-Begin-
前言
大家在學(xué)習(xí)數(shù)據(jù)庫(kù)的時(shí)候,以上兩個(gè)錯(cuò)誤基本上是不可避免的,圖1是使用SSMS登錄時(shí)出現(xiàn)的錯(cuò)誤,圖2是通過(guò)C#代碼連接數(shù)據(jù)庫(kù)時(shí)出現(xiàn)的錯(cuò)誤。
今天就這個(gè)錯(cuò)誤,跟大家做一些具體的分析,希望大家可以徹底解決這個(gè)問(wèn)題。
分析
以上兩個(gè)錯(cuò)誤是完全一樣的,是同一個(gè)問(wèn)題導(dǎo)致的。
其實(shí)錯(cuò)誤提示已經(jīng)清晰地說(shuō)明了原因:網(wǎng)絡(luò)相關(guān)或特定于實(shí)例的錯(cuò)誤。
網(wǎng)絡(luò)相關(guān)的我們先不用管,先說(shuō)“特定于實(shí)例的錯(cuò)誤”,換句更加明白的話(huà)就是“數(shù)據(jù)庫(kù)的實(shí)例名稱(chēng)有錯(cuò)誤”。那數(shù)據(jù)的實(shí)例名是哪部分呢?很清楚上面數(shù)據(jù)庫(kù)登錄界面中,用紅色方框標(biāo)出來(lái)的部分就是。在C#程序中,用箭頭標(biāo)出的Server=后面的部分就是。那實(shí)例名到底對(duì)不對(duì)呢?
解決步驟1
首先,我們打開(kāi)計(jì)算機(jī)的系統(tǒng)信息,看看你當(dāng)前用的計(jì)算機(jī)的名稱(chēng)是什么不就知道了?如下圖:
經(jīng)過(guò)仔細(xì)對(duì)比發(fā)現(xiàn)原來(lái)上面的實(shí)例寫(xiě)錯(cuò)了,在“DESKTOP-LNU3H65”后面多寫(xiě)了一個(gè)“0”,這個(gè)就是問(wèn)題的原因。那我們就改過(guò)來(lái),再測(cè)試一下,登錄是OK的!如下圖:
C#程序中也修改成正確的,如下:
運(yùn)行也OK。
也就是你自己把自己電腦的名稱(chēng)復(fù)制過(guò)去就解決了。
那如果以上方法還不行,還是同樣的錯(cuò)誤!怎么辦?
解決步驟2
我們打開(kāi)計(jì)算機(jī)的服務(wù),找到數(shù)據(jù)庫(kù)的服務(wù),發(fā)現(xiàn)如下:
通過(guò)上面的查看,在我當(dāng)前的計(jì)算機(jī)服務(wù)中有兩個(gè)服務(wù),第一個(gè)是“默認(rèn)實(shí)例”,第二是“命名實(shí)例”,我們剛才直接用的計(jì)算機(jī)名稱(chēng),表示連接的“默認(rèn)實(shí)例”,但是現(xiàn)在這個(gè)默認(rèn)實(shí)例的狀態(tài)是禁用的,也就是服務(wù)沒(méi)有運(yùn)行,所以,還是登錄不了。解決方法就是雙擊這個(gè)服務(wù),彈出窗口,啟動(dòng)類(lèi)型選擇“自動(dòng)”,點(diǎn)擊右下角“應(yīng)用”,然后在點(diǎn)擊“啟動(dòng)”按鈕即可。
修改完成后,再次運(yùn)行肯定能夠連接上。但是,如果你的計(jì)算機(jī)上,并不是默認(rèn)實(shí)例,也沒(méi)有默認(rèn)實(shí)例,只有一個(gè)命名實(shí)例怎么辦?比如我們連接命名實(shí)例如下:
這就要求登錄數(shù)據(jù)庫(kù)時(shí),那個(gè)服務(wù)器名就要用“計(jì)算機(jī)名\\實(shí)例名”這樣來(lái)寫(xiě)才行,參考如下圖的修改:
點(diǎn)擊連接,完全OK!
當(dāng)然,前提條件是要保證這個(gè)服務(wù)同樣也要正常運(yùn)行才可以。特別注意的是看好你的數(shù)據(jù)庫(kù)服務(wù)命名實(shí)例的具體名稱(chēng),不要寫(xiě)錯(cuò),如果寫(xiě)錯(cuò),同樣還是前面的錯(cuò)誤。而且要注意這個(gè)“反斜杠\\”要寫(xiě)對(duì)。
C#程序中要按照如下要求去寫(xiě):
也就是C#中要使用兩個(gè)反斜杠來(lái)實(shí)現(xiàn)轉(zhuǎn)義,使用一個(gè)會(huì)出錯(cuò),這個(gè)是基礎(chǔ)語(yǔ)法知識(shí),大家應(yīng)該是知道的。如果你不想用兩個(gè)反斜杠,也可以這么解決,在字符串的前面使用@符號(hào)來(lái)實(shí)現(xiàn)轉(zhuǎn)義,如下:
解決步驟3
如果你的計(jì)算機(jī),并不是本地連接服務(wù)器,而是連接局域網(wǎng)其他的計(jì)算機(jī)中的數(shù)據(jù)庫(kù)服務(wù),或者是遠(yuǎn)程云服務(wù)器的數(shù)據(jù)庫(kù),那連接字符串如果是默認(rèn)實(shí)例就應(yīng)該寫(xiě)“Server=IP地址”,如果是命名實(shí)例就寫(xiě)“Server=IP地址/實(shí)例名稱(chēng)”。IP地址必須是局域網(wǎng)正確的IP地址或者是遠(yuǎn)程服務(wù)器的外網(wǎng)IP地址。特別的,以上修改后,如果問(wèn)題還是沒(méi)有解決,請(qǐng)按照如下方法去做:
【1】檢查網(wǎng)絡(luò)連接是否正常,確保物理連接暢通(可以使用ping IP地址的方法)
【2】檢查數(shù)據(jù)庫(kù)服務(wù)所在的計(jì)算機(jī),有沒(méi)有防火墻,如果有,查看防火墻有沒(méi)有攔截,如果攔截放行即可,或者直接關(guān)閉即可(如果允許)
【3】檢查局域網(wǎng)或遠(yuǎn)程服務(wù)器的TCP/IP協(xié)議是否打開(kāi),這里要求必須打開(kāi),方法如下:
通過(guò)“開(kāi)始菜單”的目錄,找到SQLServer的安裝菜單中的“配置管理器”,
然后點(diǎn)擊,打開(kāi)窗口:
雙擊“TCP/IP”,然后選擇“是”,接著點(diǎn)擊“確定”按鈕:
最后,別忘記,重新啟動(dòng)SQLServer的服務(wù)??梢栽谂渲霉芾砥髦兄苯诱业椒?wù)雙擊,然后點(diǎn)擊“重新啟動(dòng)”即可:
按照以上方法,即可解決所有網(wǎng)絡(luò)連接和實(shí)例問(wèn)題。
解決步驟4
但是在C#程序中還有一種特殊情況,也會(huì)報(bào)同樣的錯(cuò)誤,C#程序錯(cuò)誤提示如下:
其實(shí)這個(gè)并不是實(shí)例本身的錯(cuò)誤,是因?yàn)閷?xiě)字符串的時(shí)候,把關(guān)鍵字之間的分號(hào)“;”,寫(xiě)成了逗號(hào),這樣在解析字符串的時(shí)候,它認(rèn)為Server后面的全部都是實(shí)例名稱(chēng),那這樣相對(duì)來(lái)說(shuō)肯定是錯(cuò)誤的實(shí)例。
所以會(huì)出現(xiàn)同樣的錯(cuò)誤。解決方法就是當(dāng)你看到實(shí)例沒(méi)問(wèn)題的時(shí)候,看看是不是把分號(hào)寫(xiě)錯(cuò)了。而且,注意任何標(biāo)點(diǎn)符號(hào),必須要用“英文半角”。
好了以上就是關(guān)于這個(gè)錯(cuò)誤產(chǎn)生的各種原因和解決方法,已經(jīng)給大家講解完畢了,希望對(duì)大家有幫助。
-END-
-
數(shù)據(jù)庫(kù)
+關(guān)注
關(guān)注
7文章
3794瀏覽量
64360 -
登錄
+關(guān)注
關(guān)注
6文章
6瀏覽量
7806 -
代碼
+關(guān)注
關(guān)注
30文章
4779瀏覽量
68521
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論