2014-10-29 98 views
1

我似乎無法找到一種方法來轉義這個連字符的數據庫名稱,以便我可以打開它的連接。該數據庫名是EDMS-Lok和我的代碼看起來像這樣(ADOcon是一個ADO連接對象):用連字符名連接到Sql Server數據庫

strConBase="DRIVER=SQL Server;SERVER=LOKDB;UID=secret;PWD=secret;APP=LokENG_TESTS;WSID=LOKSPEC1;DATABASE=[EDMS-Lok];Network=DBMSSOCN;Trusted_Connection=NO; 
ADOcon.ConnectionString = strConBase 
ADOcon.Open" 

我已經試過數據庫名稱不封閉支架。我試着將它放在方括號,大括號,括號,備註,單引號,雙引號等內。我嘗試了反斜槓和感嘆號。我無法找到一種方法來轉義數據庫名稱,以便我可以連接到它。

該錯誤消息我得到的是:
Run-time error '-2147467259 (80004005)': [Microsoft][ODBS SQL Server Driver][SQL Server]Cannot open database "[EDMS-Lok]" requested by the login. The login failed.

數據庫名稱和憑據是正確的。我可以訪問它,如果我從連接字符串中省略數據庫名稱參數,然後在我的SQL語句中使用完全限定名稱(即SELECT * FROM [EDMS-Lok].dbo.tablename

但是,我真的不想這樣做, m試圖使用在多個數據庫上執行相同操作的模塊化代碼。我想要的是打開到一個數據庫的連接,運行一些SQL過程,關閉連接,然後打開到另一個數據庫的連接並運行相同的SQL過程。泡沫,沖洗,重複。

此外,有人問之前,我沒有選擇更改數據庫名稱。

作爲一個測試,我使用完全相同的連接字符串連接到服務器上的另一個數據庫沒有一個連字符的名稱,它的工作沒有錯誤,所以我很確定這是愚蠢的連字符名稱是問題。

+1

你爲什麼使用'Driver = SQL Server'?請嘗試將其保留或使用SQLNCLI。 (或者更好的辦法是停止命名帶有麻煩字符的數據庫。) – 2014-10-29 15:20:14

+0

嗨,Aaron,我正在使用'SQL Server'驅動程序,因爲那就是我在connectionstrings.com上列出的服務器列表。我一回到辦公室就會嘗試你的建議。不幸的是,我正在使用現有的數據庫,並沒有選擇更改名稱,必須與其他人開始工作。 – CBRF23 2014-10-29 16:52:12

+0

亞倫,我試着省略驅動程序語句並使用您建議的SQL本地客戶端驅動程序。當我這樣做時,我得到一個「未找到數據源並且沒有指定默認驅動程序」的錯誤。 – CBRF23 2014-10-29 17:12:26

回答

1

我無法通過使用MSDASQL提供程序的ODBC連接來按照我想要的方式工作。

我跑了一些測試,我似乎可以通過使用SQLOLEDB提供程序通過OLE DB連接。所以,我想我會回頭修改現有代碼以使用OLE DB連接。

使用OLE DB,我發現我可以離開數據庫名非轉義,即INITIAL CATALOG=EDMS-Lok;或者我可以逃避使用雙引號,即INITIAL CATALOG="EDMS-Lok";。然而,方括號在我嘗試它們時拋出了一個錯誤,所以現在我會堅持使用雙引號或未經轉義的數據庫名稱。

謝謝!