You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#通过ODBC DSN连接SQL Server报无效属性及登录失败

问题排查方向与解决方案

报错1:仅指定DSN时返回Login failed for user ''

核心原因是程序没有读取到DSN中存储的认证信息,按以下顺序排查:

  • 核对ODBC数据源位数与运行程序位数是否匹配
    系统中存在两套完全隔离的ODBC配置存储:
    • 64位进程仅能读取C:\Windows\System32\odbcad32.exe(即控制面板默认入口打开的ODBC管理器)中配置的DSN
    • 32位进程仅能读取C:\Windows\SysWOW64\odbcad32.exe中配置的DSN
      到WPF项目属性的生成页,确认当前编译的目标平台:如果是x86、或Any CPU勾选了「首选32位」,程序运行是32位,必须打开32位对应的ODBC管理器确认目标DSN存在,且在管理器内直接点击「测试连接」可以正常连通。
  • 检查DSN的认证模式配置
    配置SQL Server类型DSN时,如果向导中选择了「Windows NT集成认证」,DSN不会存储SQL账号密码信息,连接时会默认取当前Windows进程的账号做认证,和预期的SQL账号登录逻辑冲突。需要将认证模式改为「使用用户输入登录ID和密码的SQL Server验证」,填入账号密码后保存配置。
  • 检查组策略限制
    部分Windows系统默认组策略会禁止ODBC数据源存储明文密码,这种场景下即使你在DSN配置中填了密码,也不会被持久化保存,必须在连接字符串中显式传入账号密码参数。

报错2:显式传参时返回Invalid connection string attribute

这个报错是连接字符串参数名错误导致:SQL Server ODBC驱动识别的密码参数为PWD,不是代码中写的PW,缺少末尾的D字符,驱动无法识别该属性就会抛出参数无效错误。
修正后的连接字符串代码如下:

string connString = $"DSN={dsn};UID={username};PWD={password};";
OdbcConnection cnn = new OdbcConnection(connString);
cnn.Open();

额外兼容注意事项

  • 如果使用ODBC Driver 18及以上版本连接SQL Server,驱动默认强制加密连接,测试环境下如果SQL Server没有配置合法可信证书,需要在连接字符串中追加TrustServerCertificate=Yes;,否则会抛出证书链不受信任的连接错误。
  • 连接字符串的参数值不要额外包裹单引号、双引号,否则会被识别为参数值的一部分,导致账号密码匹配失败。
  • 参数名不区分大小写,但UID/PWD和值之间的等号前后不要加全角空格,否则会被识别为无效格式。

内容的提问来源于stack exchange,提问作者Jason S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 09:45:29