UFT One(VB Script)中Oracle ODBC含分号密码无法正确封装的问题
解决UFT One(VBScript)中Oracle ODBC连接密码含分号的问题
问题背景
使用UFT One的VBScript代码连接Oracle数据库,密码修改为含分号的内容后,原连接字符串会因分号截断密码导致认证失败,尝试多种封装方式(双引号、单引号、大括号、%x3B转义)均出现数据源错误或密码错误。
可行解决方案
方案1:双引号包裹密码(VBScript转义格式)
VBScript中用两个双引号表示一个双引号,以此包裹含分号的密码,ODBC驱动会识别双引号内的完整内容作为密码:
getConnectionString = "DRIVER={Oracle in OraClient19Home1_32bit};DBQ=<IP_ADDRESS>:<PORT>/<SID>;Trusted_Connection=Yes;UID=<USERNAME>;Password=""XXxxxXXXX;XXX"";Connection Timeout=600"
解析后实际传递给驱动的密码是"XXxxxXXXX;XXX",驱动会忽略双引号并完整读取分号后的内容。
方案2:URL编码转义分号
将密码中的分号替换为URL标准编码%3B(注意不是%x3B),驱动会自动解码为分号:
getConnectionString = "DRIVER={Oracle in OraClient19Home1_32bit};DBQ=<IP_ADDRESS>:<PORT>/<SID>;Trusted_Connection=Yes;UID=<USERNAME>;Password=XXxxxXXXX%3BXXX;Connection Timeout=600"
之前尝试方案的问题分析
- 单引号封装:ODBC连接字符串不支持用单引号包裹参数值,单引号会被当作密码的一部分,同时分号仍会截断连接字符串,导致后续参数解析错误,触发数据源找不到的提示。
- 大括号封装:Oracle ODBC驱动不兼容大括号包裹密码的格式,会破坏连接字符串结构,引发数据源错误。
- %x3B转义:该格式是HTML/XML的十六进制转义,ODBC驱动无法识别,会直接将
%x3B作为密码的一部分传递,导致密码不匹配。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

