Crystal Reports使用System DSN连接MySQL时数据库登录失败求助
解决Crystal Reports + MySQL + VB.Net运行时登录失败及凭据弹窗问题
1. 确保项目位数与DSN/ODBC驱动匹配
- 打开项目属性 → 编译 → 高级编译选项
- 若使用64位System DSN:取消勾选“首选32位”,确保项目运行在64位模式,同时安装对应版本的64位MySQL ODBC驱动
- 若使用32位System DSN:勾选“首选32位”,安装32位MySQL ODBC驱动
- 注意:Any CPU模式下VS默认优先以32位运行,这会导致64位DSN无法被识别,必须手动调整该选项。
2. 替换全局登录代码为逐表(含子报表)登录配置
SetDatabaseLogon方法有时无法覆盖所有报表表和子报表的连接信息,需要逐个配置:
Dim rep As New crRepAllBooks Dim connInfo As New ConnectionInfo() ' 配置连接核心参数 connInfo.ServerName = "localhost" connInfo.DatabaseName = "lms" connInfo.UserID = "root" connInfo.Password = "xxxxxxxxx" ' 可选:指定ODBC驱动名增强兼容性 connInfo.DriverName = "MySQL ODBC 8.0 Unicode Driver" ' 处理主报表所有数据表 For Each table As Table In rep.Database.Tables Dim tableLogonInfo As TableLogOnInfo = table.LogOnInfo tableLogonInfo.ConnectionInfo = connInfo table.ApplyLogOnInfo(tableLogonInfo) ' 强制匹配数据表名,解决MySQL大小写敏感问题 table.Location = table.Location Next ' 处理子报表(若报表包含子报表) For Each subreportObj As SubreportObject In rep.ReportDefinition.ReportObjects.OfType(Of SubreportObject)() Dim subRep As ReportDocument = subreportObj.OpenSubreport(subreportObj.SubreportName) For Each subTable As Table In subRep.Database.Tables Dim subTableLogonInfo As TableLogOnInfo = subTable.LogOnInfo subTableLogonInfo.ConnectionInfo = connInfo subTable.ApplyLogOnInfo(subTableLogonInfo) subTable.Location = subTable.Location Next Next CrystalReportViewer1.ReportSource = rep ' 先设置数据源再刷新,避免重复触发登录请求 CrystalReportViewer1.RefreshReport()
3. 检查MySQL ODBC驱动版本与兼容性
- 卸载旧版本ODBC驱动,安装MySQL Connector/ODBC 8.0.x稳定版(需匹配项目运行位数)
- Crystal Reports对ODBC驱动版本敏感,尽量使用官方推荐的兼容版本,避免使用过于老旧的驱动。
4. 避免DSN依赖(推荐方案)
直接使用非DSN连接字符串,绕开DSN配置的潜在问题:
' 构建非DSN连接字符串 Dim connString As String = "Driver={MySQL ODBC 8.0 Unicode Driver};Server=localhost;Database=lms;Uid=root;Pwd=xxxxxxxxx;" connInfo.ConnectionString = connString ' 后续的逐表配置步骤同方案2
5. 其他排查点
- 确认MySQL服务正在运行,
localhost可正常访问,用户名密码对数据库lms具备读写权限 - 检查Crystal Reports设计视图中的表连接配置,确保运行时的数据库名、表名与实际完全一致(MySQL在Linux环境下区分大小写)
- 确保项目引用的Crystal Reports组件与安装的SAP Crystal Reports for Visual Studio 2022运行时版本一致,避免版本不兼容。
内容的提问来源于stack exchange,提问作者lakshitha dilhan
相关产品推荐
相关产品推荐

