SQL账号通过SSMS、终端可登录 外部应用ADODB连接报18456错误如何解决
问题解决方案
错误18456状态8的官方定义为登录时提交的密码与SQL Server存储的用户密码不匹配,你通过SSMS、终端、ODBC都能正常登录,说明用户密码本身有效,问题出在OLEDB连接的配置或驱动兼容性上,可按以下顺序排查修复:
- 测试硬编码凭证验证变量取值问题
先将代码中的账号、密码、数据源都改为你登录SSMS时用的明文固定值,排除PointGet函数取值异常、变量拼接错误导致的凭证提交错误。 - 处理密码特殊字符转义
如果密码包含分号、单引号、双引号、空格、@等OLEDB参数保留字符,旧版SQLOLEDB驱动会将特殊字符后的内容识别为连接参数,导致提交的密码被截断。可以将密码值用单引号包裹,或者转义特殊字符后再赋值。 - 替换兼容SQL 2017的OLEDB驱动
你当前使用的SQLOLEDB是已停止维护的老旧驱动,对SQL 2012之后版本的认证逻辑支持存在兼容性缺陷,替换为微软官方推出的新版OLEDB驱动即可解决多数适配问题,仅需修改一行配置:' 旧配置 ' SQLCon.Provider = "SQLOLEDB" ' 新配置 SQLCon.Provider = "MSOLEDBSQL" - 显式关闭集成身份验证
强制OLEDB驱动使用你指定的SQL账号密码登录,避免默认调用Windows身份验证覆盖你配置的凭证,增加以下配置行:SQLCon.Properties("Integrated Security").Value = False - 验证实例名拼接正确性
打印PointGet(P & "$PROJECT.COMPUTER") & "\" & "cimplicity"的实际输出值,确认与你SSMS登录时使用的实例名完全一致,避免实例名拼写错误触发异常报错。
内容的提问来源于stack exchange,提问作者Ser
相关产品推荐
相关产品推荐

