VBA 连接字符串中的错误

Error in VBA Connection String

我在从 Excel VBA 连接到 SQL 服务器数据库时遇到问题。我主要怀疑是由于对包含双引号的密码处理不当导致的。

场景:

我使用的连接字符串是:

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

当上面的代码执行时,我收到一个错误-

Run-time error'-2147217843 (80040e4d)':

Login failed for user 'Test_User'.

我对连接字符串中指定的相同凭据进行了 UDL 测试,连接正常。

关于 VBA 中出现错误的原因有什么建议吗?我需要修改连接字符串吗?

编辑 - 刚刚更改了密码字符串,在双引号前包含一个感叹号,使其看起来与我使用的真实密码完全一样。

转义双引号在 vb 中不太适用。您必须使用 chr 函数将引号插入字符串。
试试这个。 ..

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

嗯,这真的很奇怪!在 Geoff 在评论中建议使用双引号对他有效后,我仔细研究了我的案例。

原来数据库的密码是tejg3kl!” 我在代码中使用的是 tejg3kl!"

你注意到双引号的区别了吗?

显然,这个问题中解释了不同类型的双引号 - Are there different types of double quotes in utf-8 (PHP, str_replace)? and also here - http://unicode.org/cldr/utility/confusables.jsp?a=%22&r=None

所以,最后我所做的就是在连接字符串中使用”而不是“,代码运行得非常好。(此外,不需要包含任何转义序列)

有人可以解释一下不同类型双引号的必要性吗?