我遇到从Excel VBA连接到SQL Server数据库的问题。我主要怀疑是由于错误处理包含双引号的密码而发生错误。
场景:
我使用的连接字符串是:
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
执行上述代码时,收到错误 -
运行时错误' -2147217843(80040e4d)':
用户' Test_User'
的登录失败
我对连接字符串中指定的相同凭据进行了UDL测试,连接工作正常。
有关VBA中出现错误原因的任何建议吗?我是否需要修改连接字符串?
编辑 - 只需更改密码字符串,在双引号前加上感叹号,使其与我正在使用的真实密码完全相同。
答案 0 :(得分: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 :(得分:0)
逃避双引号在vb中并没有那么好用。您必须使用chr函数将引号插入字符串中 试试这个。 ..
ConnectionStringONLINE = "Provider=SQLOLEDB.1;Data Source=FOO\BAR;Initial Catalog=ScrollBar;User Id=Test_User;Password=tejg3kl" & Chr(34) & ";"