无论我如何处理,Crystal 都要求在客户端上提供登录凭据。它在开发机器上按预期工作。不确定是什么导致了这个问题。 Dev Machines 是 Win 10,而客户端是 Server 2019。我在 2019 年安装了 x64 Crystal Runtimes 和 .Net 4.8。该应用程序在其他方面运行良好。当我预览 Crystal Reports 时,只是提示输入登录凭据。这是我的代码:
private void generateReport()
{
string studyNum = txtStudyNum.Text.Trim().ToString();
ReportDocument cryRpt = new ReportDocument();
TableLogOnInfos crtableLogoninfos = new TableLogOnInfos();
TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();
ConnectionInfo crConnectionInfo = new ConnectionInfo();
Tables CrTables;
var appPath = AppDomain.CurrentDomain.BaseDirectory;
string reportName = "SponserSearch.rpt";
var relativePath = System.IO.Path.Combine("StudyManagement", "Reports", reportName);
appPath = System.IO.Path.Combine(appPath, relativePath);
// System.Windows.Forms.MessageBox.Show(appPath.ToString());
cryRpt.Load(appPath); //path to report
crConnectionInfo.ServerName = Properties.Settings.Default.strDBServer;
crConnectionInfo.DatabaseName = Properties.Settings.Default.strDBName;
crConnectionInfo.UserID = Properties.Settings.Default.strDBUser;
crConnectionInfo.Password = Properties.Settings.Default.strDBPass;
crConnectionInfo.IntegratedSecurity = false;
CrTables = cryRpt.Database.Tables;
foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
{
crtableLogoninfo = CrTable.LogOnInfo;
crtableLogoninfo.ConnectionInfo = crConnectionInfo;
CrTable.ApplyLogOnInfo(crtableLogoninfo);
}
cryRpt.SetDatabaseLogon(Properties.Settings.Default.strDBUser, Properties.Settings.Default.strDBPass);
cryRpt.SetParameterValue("@SponsorInfo", studyNum);
crystalViewer.ViewerCore.ReportSource = cryRpt;
}
我注意到的一些事情。
不工作的报告正在使用 SQLNCI11 本机 sql 客户端 11。报告很好,但提示登录。
MS 建议用 MSOLEDBSQL 替换提供程序,但它的工作方式与 SQLNCI11 提供程序一样。
SQLOLEDB Provider 不提示输入Credentials,但是从SQL 进来的Crystal Date 字段都是字符串。这真的让人很头疼,并打破了 100 多份报告。
我也曾尝试删除登录方面并移至集成安全性。它仍然提示输入登录凭据。