首页 > 解决方案 > 为什么我无法在 Crystal Reports 方法 ExportToDisk 中打开连接

问题描述

我有一份用户说有效的报告。这个应用程序对我来说是新的,Crystal Reports 对我来说是新的。数据库已备份并恢复到新的 SqlServer。孤立用户重新链接,报告代码(如下所示)更改为指向新服务器。现在它得到连接失败的错误。该报告是从 c# 代码运行的。这是调用报告的代码,后面是代码引发异常时的值。

        private void laborRptByJobBtn_Click(object sender, EventArgs e)
    {
        if (rptFolderDialog.ShowDialog() == DialogResult.OK)
        {
            try
            {
                CrystalDecisions.CrystalReports.Engine.ReportDocument rptObj = new LaborRptByJob();
                CrystalDecisions.Shared.TableLogOnInfo tliEZIS = new TableLogOnInfo();


                tliEZIS.TableName = rptObj.Database.Tables[0].Name;
                tliEZIS.ConnectionInfo.ServerName = ConfigurationManager.AppSettings["DatabaseServerName"];
                tliEZIS.ConnectionInfo.DatabaseName = "EZIS";
                tliEZIS.ConnectionInfo.UserID = "EZIS";
                tliEZIS.ConnectionInfo.Password = "EZIS";
                rptObj.Database.Tables[0].ApplyLogOnInfo(tliEZIS);
                rptObj.SetParameterValue("JobNumber", division.Text.Trim());
                string testPath = rptFolderDialog.SelectedPath + "\\Job " + division.Text.Trim() + " - Labor Report.pdf";
                rptObj.ExportToDisk(ExportFormatType.PortableDocFormat, testPath);
                //rptObj.ExportToDisk(ExportFormatType.PortableDocFormat, rptFolderDialog.SelectedPath + "\\Job#: " + division.Text.Trim() + " - Labor Report.pdf");
            }
            catch (NotSupportedException ex)
            {
                MessageBox.Show(ex.Message, ex.Source);
            }
        }
    }

}

出现异常时,我在监视列表中收到了这个看似有趣的错误消息:

        'rptObj.Database.Tables[0].Location' threw an exception of type 'System.InvalidCastException'   error CS1012: Too many characters in character literal  

我知道这意味着使用单引号来设置字符串,但我查看了代码并没有找到 location 参数的直接设置或任何单引号。同时我将手表设置为位置并得到了这个

        rptObj.Database.Tables[0].Location  "LaborReportView"   string

其他值是:

ServerName = "\\\\appdev02\\mssql2017dev"
DatabaseName = "EZIS"
UserId = "EZIS"
Testpath = "\\\\Mac\\Home\\Desktop\\Job 2849 - Labor Report.pdf"

在监视列表中有几行 invalidcastexceptions,例如一个在 Location 上,一个在 Name 上。我已使用 SSMS 验证 EZIS 登录到 \appdev02\mssql2017dev EZIS 数据库是否存在使用相同的密码并有权查看视图。

标签: c#crystal-reports

解决方案


好吧,我在帮助下找到了答案。错误消息无法连接,所以我花时间看看为什么会这样。真正的问题是数据的来源是一个视图并且视图被破坏了。在旧数据库中,视图使用 openquery() 链接到单独的服务器。在新服务器中,两个数据库位于同一台服务器上,因此“链接”不可用。对完全限定名称的简单更改使其工作。

尽管我很尴尬,但我还是发布了这个,因为我没有在诊断问题的早期尝试运行视图。

Prime 学习(再学习)从不相信错误消息可以准确地指出问题所在。


推荐阅读