VBA连接字符串中的错误

时间:2015-01-09 17:39:45

标签: sql-server excel vba excel-vba connection-string

我遇到从Excel VBA连接到SQL Server数据库的问题。我主要怀疑是由于错误处理包含双引号的密码而发生错误。

场景:

  • SQL Server名称 - FOO \ BAR
  • 初始目录 - ScrollBar
  • 用户 - 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

执行上述代码时,收到错误 -

  

运行时错误' -2147217843(80040e4d)':

     

用户' Test_User'

的登录失败

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

有关VBA中出现错误原因的任何建议吗?我是否需要修改连接字符串?

编辑 - 只需更改密码字符串,在双引号前加上感叹号,使其与我正在使用的真实密码完全相同。

2 个答案:

答案 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) & ";"