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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 02:07:34