为什么我无法在 Crystal 报告方法 ExportToDisk 中打开连接
Why am I getting failed to open connection in Crystal Reports method 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
我知道这意味着使用单引号来设置字符串,但我查看了代码并没有找到位置参数的直接设置或任何单引号。同时我将手表设置到位置并得到了这个
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 验证 \appdev02\mssql2017dev EZIS 数据库的 EZIS 登录是否存在且密码相同且有权查看。
好吧,我在帮助下找到了答案。错误消息是无法连接,所以我花时间研究了原因。真正的问题是数据的来源是视图,而视图被破坏了。在旧数据库中,视图使用 openquery() 链接到单独的服务器。在新服务器中,两个数据库位于同一台服务器上,因此 "link" 不可用。对完全限定名称的简单更改使其有效。
尽管我很尴尬,但我还是发布了这个,因为我没有在更早的时间诊断问题时尝试 运行 视图。
Prime learning(再学习)从不相信错误信息能准确指出问题所在。
我有一份用户说有效的报告。这个应用程序对我来说是新的,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
我知道这意味着使用单引号来设置字符串,但我查看了代码并没有找到位置参数的直接设置或任何单引号。同时我将手表设置到位置并得到了这个
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 验证 \appdev02\mssql2017dev EZIS 数据库的 EZIS 登录是否存在且密码相同且有权查看。
好吧,我在帮助下找到了答案。错误消息是无法连接,所以我花时间研究了原因。真正的问题是数据的来源是视图,而视图被破坏了。在旧数据库中,视图使用 openquery() 链接到单独的服务器。在新服务器中,两个数据库位于同一台服务器上,因此 "link" 不可用。对完全限定名称的简单更改使其有效。
尽管我很尴尬,但我还是发布了这个,因为我没有在更早的时间诊断问题时尝试 运行 视图。
Prime learning(再学习)从不相信错误信息能准确指出问题所在。