【问题标题】:How to connect to Oracle with a password that includes semicolon如何使用包含分号的密码连接到 Oracle
【发布时间】:2019-11-13 14:41:41
【问题描述】:

我正在使用 VBA 连接到 Oracle 数据库。除非密码包含分号,否则一切正常。

这是我连接数据库的方式:

Dim cn As ADODB.Connection
Dim strCon As String

Set cn = New ADODB.Connection

strCon = "Driver={Oracle in OracleClient32_home1};Dbq=" & tnsName & ";" & _
          "Uid=" & user & "; Pwd=" & password & ";"

'Open the connection
cn.Open strCon

如果密码类似于“pass;word”,则登录失败,说明密码错误。

我试过了:

  • 用大括号将密码括起来:

    Pwd={" & password & "};"
    

    这将返回无效字符串或缓冲区长度作为错误。

  • 用双引号括起来:

    Pwd=" & Chr(34) & password & Chr(34) & ";"
    

    这也将无效字符串或缓冲区长度作为错误返回。

【问题讨论】:

  • 尝试用单引号填充它Pwd='" & password & "';"
  • 感谢您的回答 - 不幸的是,我还收到错误“无效的字符串或缓冲区长度”错误...
  • 作为一个侧节点,我认为无效字符串或缓冲区长度的错误有点奇怪 - 可能是 32 位 - 64 位问题?

标签: excel vba oracle odbc database-connection


【解决方案1】:

试试这个:

strCon = "Driver={Oracle in OracleClient32_home1};Dbq=" & tnsName
cn.Open strCon, user, password 

或者使用OdbcConnectionStringBuilder(语法可能有误)

Dim strCon As New OdbcConnectionStringBuilder
strCon.Driver = "Oracle in OracleClient32_home1"

strCon.Add("Dbq", tnsName)
strCon.Add("Uid", user)
strCon.Add("Pwd", password)

cn.Open strCon.ToString()

DbConnectionStringBuilder 可能是另一种选择

【讨论】:

  • 感谢您的帮助!不幸的是,第一个建议没有奏效,因为我收到了密码错误的回复。对于第二个建议:VBA 不需要知道对象 - 你知道需要包含的引用的名称吗?
  • OdbcConnectionStringBuilder 是一个 .NET 类,因此很难在 VBA 中使用它。但是,当您收到“密码错误”的响应时,连接字符串应该可以正常工作。
  • 一般来说是的,但不幸的是这种方法在密码中似乎也有分号的问题:/
猜你喜欢
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
  • 2012-10-11
  • 2014-10-14
  • 1970-01-01
  • 2017-02-22
  • 1970-01-01
  • 2012-10-31
相关资源
最近更新 更多