4

根据 SQLDriverConnect 的文档

由于连接字符串和初始化文件语法的原因,应避免包含未用大括号括起来的字符 []{}(),;?*=!@ 的关键字和属性值。

包含任何字符 []{}(),;?*=!@ 的大括号 ({}) 括起来的 DSN 或连接字符串值被原封不动地传递给驱动程序。

使用连接字符串DSN=%s;UID=%s;PWD={%s}在 SQLServer 中有效 - 事实上,如果有某些特殊字符,则不在 {} 中包含密码会失败。但是,对 MS Access 使用相同的字符串会因“密码无效”而失败,并且在{}被删除时可以工作。它也不适用于 Oracle。

如果 {} 中包含的字符串原封不动地传递给服务器,那么它不应该工作吗?还是我错过了什么?

4

1 回答 1

1

SQLDriverConnect 的访问特定页面指出:

PWD 关键字不应包含任何特殊字符(请参阅 SQLGetInfo Returned Values 中的 SQL_SPECIAL_CHARACTERS)。

在连接到 Access 时调用SQLGetInfo 函数并将 SQL_SPECIAL_CHARACTERS 作为 InfoType 参数传递应该返回@Andrew Gibson提到的禁止字符。

知识库文章的“更多信息”部分包含不建议在 Access 应用程序中使用的特殊字符列表。

IBM 的 DB2 有一个同名的SQLGetInfo 函数,具有相同的参数列表,并采用相同的 InfoType 常量来返回特殊字符,如下所示:

除 a...z、A...Z、0...9 和下划线以外的所有字符

于 2013-06-29T06:16:27.017 回答