2015-01-09 119 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