根据SQLDriverConnect的documentation,
由于连接字符串和初始化文件语法,应避免使用不包含大括号的字符[] {}(),;?* =!@的关键字和属性值。
和
用大括号({})括起来的DSN或连接字符串值包含任何字符[] {}(),;?* =!@完整地传递给驱动程序。
使用连接字符串DSN=%s;UID=%s;PWD={%s}
在SQLServer中工作 - 事实上,如果存在某些特殊字符,则不在{}中包含密码失败。但是,对MS Access使用相同的字符串会因“密码无效”而失败,并且在删除{}
时有效。它也不适用于Oracle。
如果{}中包含的字符串完整地传递给服务器,那么它不应该工作吗?或者我错过了什么?
答案 0 :(得分:1)
SQLDriverConnect's Access-specific page声明:
PWD关键字不应包含任何特殊字符(请参阅SQLGetInfo返回值中的SQL_SPECIAL_CHARACTERS)。
连接到Access时调用SQLGetInfo function并将SQL_SPECIAL_CHARACTERS作为InfoType参数传递,应返回@Andrew Gibson提到的禁用字符。
knowledge base article的“更多信息”部分包含不建议在Access应用中使用的特殊字符列表。
IBM的DB2具有相同名称的SQLGetInfo function,具有相同的参数列表,并采用相同的InfoType常量返回特殊字符,其中列出:
除了...... z,A ... Z,0 ... 9和下划线
之外的所有字符