-Begin-
前言
大家好,初學者遇到數據庫連接不上,是很常見的情況,可能會以各種形式呈現出來,今天跟大家分享一下,如何解決C#連接不上數據庫的問題。
本文主要針對的是數據庫,采用sa賬戶登錄,配置文件采用,本地數據庫的情況,如果情形不一樣,可能無法涵蓋。
常見錯誤
以下這幾種情況,都可能是連接字符串導致的問題,可能還會有其他情況,后續再完善補充。
(1)代碼報錯,提示sa登錄失敗。
(2)提示連接出錯,未找到或無法訪問服務器。
(3)代碼報錯,提示類型初始值設定項引發異常。
(4)直接彈窗,提示類型初始值設定項引發異常。
(5)代碼報錯,不支持關鍵字。
(6)代碼報錯,提示未將對象引用到對象的實例
(7)代碼報錯,提示初始值設定引發異常項
解決方案
第一步:首先一定要保證SMMS可以連接上數據庫,這是一個大的前提,如果SSMS都不能連接數據庫,就先解決這個問題之后,再往后面看。
第二步:如果SSMS可以連接數據庫,那么我們觀察一下這個登錄界面分析一下,連接字符串主要由四個部分組成,分別是服務器名稱、數據庫名稱、用戶ID即Uid、密碼即Pwd,除了數據庫名稱之外,其他三個參數都應該與這上面的保持一致,否則就會出錯。
第三步:簡而言之,就是把SSMS這個登錄界面的參數數據復制到連接字符串里,進行替換即可。
第四步:復制完成之后,如果采用的是字符串方式,對于命名實例是可能會出現語法錯誤的,這個是因為轉義的問題,解決方案有兩種,第一種方式是在連接字符串前面加個@進行轉義,第二種方式是將連接字符串中的單斜杠改成雙斜杠。
=@"=-\Wincc;=;Uid=sa;Pwd=123";
= "=-\\Wincc;=;Uid=sa;Pwd=123";
排查步驟
如果問題仍然沒有解決,按照下面的步驟進行檢查:
(1) 檢查數據庫名稱是否正確
(2) 檢查的名稱有沒有錯誤
(3) 檢查下面這行代碼有沒有錯誤
(4) 對照檢查里的代碼有沒有錯誤
概念問題
以下幾個概念問題,需要大家注意:
(1)怎么判斷是命名實例還是默認實例?
如圖,服務器名稱為-數據庫連接名是什么,這種就是默認實例。
當名稱中帶有 ’ \ ’ 時,例如-\WINCC,這種就是命名實例,其中WINCC就是實例名稱,默認實例和命名實例可以共存,也可以有多個實例名稱。
(2)使用和不用有什么區別?
使用方式是通過xml配置文件來獲取連接字符串。配置文件可以通過記事本等其他軟件打開并修改。這樣就可以使用不更改代碼的方式改變數據庫的連接字符串。不使用,只能在代碼中定義固定的連接字符串。
有一點要注意,對于命名實例,如果直接用字符串的方式數據庫連接名是什么,是需要雙斜杠或@轉義,如果是的方式,則是單斜杠,不能寫成雙斜杠。
寫在最后
本文只是從常見的錯誤角度來說明了解決方案和排查步驟,實際情況錯綜復雜,只有掌握好方法和思路,才能盡快解決問題。