2015-01-09 136 views
0

我遇到了從Excel VBA連接到SQL Server數據庫的問題。我主要懷疑由於包含雙引號的密碼處理不正確而導致發生錯誤。VBA連接字符串中的錯誤

情景:

  • SQL服務器名稱 - FOO \ BAR
  • 初始目錄 - 滾動條
  • 用戶 - Test_User
  • 密碼 - tejg3kl」

連接字符串我正在使用的是:

Public Const ConnectionStringONLINE = "Provider=SQLOLEDB.1;Data Source=FOO\BAR;Initial Catalog=ScrollBar;User Id=Test_User;Password=tejg3kl!"";" 

密碼值中包含一個額外的雙引號作爲轉義序列字符。

代碼以連接到數據庫 -

Dim DbConn As ADODB.Connection 
Set DbConn = New ADODB.Connection 
DbConn.Open ConnectionStringONLINE 

當執行上面的代碼,收到錯誤 -

運行時error'-2147217843(80040E4D)':

用戶'Test_User'登錄失敗。

我對連接字符串中指定的相同憑據做了UDL測試,並且連接正常工作。

有關爲什麼在VBA中發生錯誤的任何建議?我是否需要修改連接字符串?

編輯 - 只需更改密碼字符串以在雙引號之前包含感嘆號,使其看起來與我正在使用的真實密碼完全相同。

+0

密碼是否包含'「」'?您的連接字符串,因爲它會導致語法錯誤... –

+0

亞歷克斯 - 密碼正是這個tejg3kl「 – StarDotStar

+0

檢查此:http://www.connectionstrings.com/sql-server-native-client-11-0- oledb-provider/ –

回答

1

嗯,這真的是一個奇怪的!在傑夫在評論中提出用雙引號爲他工作之後,我仔細看了一下我的案子。

原來,密碼數據庫是tejg3kl!」 而且,我用的代碼是tejg3kl的人!」

你是否注意到在雙引號區別?

顯然有不同類型的雙引號解釋在這個問題 - Are there different types of double quotes in utf-8 (PHP, str_replace)?也在這裏 - http://unicode.org/cldr/utility/confusables.jsp?a=%22&r=None

所以,最後我所做的是,在連接字符串中使用「而不是」,代碼工作得很好。 (另外,不需要包含任何轉義序列)

有人可以請解釋不同類型的雙引號的需要嗎?

+1

它們被稱爲捲曲/智能/漂亮的引號,不同於普通的'''有不同的字形開放和關閉(所以基本看起來更好),請參閱http://en.wikipedia.org/wiki/Quotation_mark#Curved_quotes_and_Unicode –

0

轉義雙引號在vb中並不完全適用。您必須使用chr函數將引號插入到字符串中。
試試這個。 ..

ConnectionStringONLINE = "Provider=SQLOLEDB.1;Data Source=FOO\BAR;Initial Catalog=ScrollBar;User Id=Test_User;Password=tejg3kl" & Chr(34) & ";" 
+0

聽起來很合理;) –

+1

事實上,它的確是這樣工作的,你可以在一個字符串中加雙引號來實現它的轉義。例如:'Const myString =「嘗試」「this」的大小爲「' – Geoff

+0

@StarDotStar - 對 - 你的代碼沒問題,檢查你的用戶憑證 – Geoff