VBA:连接Oracle db,密码有特殊符号

VBA: connect to Oracle db, password has a special symbol

我正在使用它连接到 Oracle:

Set mDBConnection = New ADODB.connection    
Dim Rett As String
Rett = "CONNECTSTRING=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)"
Rett = Rett & "(HOST=myhost)(PORT=1521))(CONNECT_DATA =(SERVICE_NAME = myservice)));"
Rett = Rett & "uid=" & mDBUser & ";"
Rett = Rett & "pwd=" & mDBPassword & ";"
MsgBox Rett
mDBConnection.Open "DRIVER={Microsoft ODBC for Oracle};" & Rett 

如果密码不包含符号@,这可以正常工作。 如果是 - 我收到此错误:

[Microsoft][Oracle 的 ODBC 驱动程序][Oracle]ORA-12154:TNS:could 无法解析指定的连接标识符

如何转义这个符号?也许我应该以不同的方式连接?

在 11g 之前,您甚至不能使用 @ 登录密码,因为它是标准 Oracle 连接字符串的一部分(即,sql*plus> connect scott/tiger@test 连接到 test 实例)。在第一个字符后最多 10g,您只能使用 _、$ 和 #(以下称为特殊字符)。显然,如果您使用这样的字符,您使用的驱动程序无法处理所需的双引号,因此我建议您更改驱动程序或密码。

You must enclose the following passwords in double-quotation marks:

Passwords containing multibyte characters.

Passwords starting with numbers or special characters and containing alphabetical characters. For example:

"123abc"

"#abc"

"123dc$"

Passwords containing any character other than alphabetical characters, numbers, and special characters. For example:

"abc>"

"abc@",

" "

有关完整信息,请参阅 Guidelines for Securing Passwords

ODBC 驱动程序 "Microsoft ODBC for Oracle" 是 deprecated for many year, you should not use it. Documentation says "Oracle 7.3x is supported fully; Oracle8 has limited support". Install ODBC driver from Oracle,这应该可以更好地工作。

您的连接命令如下所示:

mDBConnection.Open "DRIVER={Oracle in OraClient11g_home1};dbq=" & mDBServer & ";" & _
                   "uid=" & mDBUser & ";pwd=""" & mDBPassword & """;"

如果您不知道 ODBC 驱动程序的确切名称,您可以在 HKLM\Software\ODBC\ODBCINST.INI\*\Drivers 的注册表中搜索字符串 SQORA32.dll。父键告诉 ODBC 驱动程序的确切名称。

您也可以像这样使用 OLE DB 提供程序:

mDBConnection.Open "Provider=OraOLEDB.Oracle;Data Source=" & mDBServer & ";" & _
                   "User ID=" & mDBUser & ";Password=""" & mDBPassword & """;"

与 ODBC 一样,您根本不知道 driver/provider 是否安装在其他机器上。