我使用ODBC连接实现了水晶报告。但根据我的要求,我对SQL连接进行了更改。
private void generateReport(string path)
{
string ServerName = ConfigurationManager.AppSettings["Server"].ToString();
string DatabaseName = ConfigurationManager.AppSettings["DBName"].ToString();
string UserName = ConfigurationManager.AppSettings["UserName"].ToString();
string Password = ConfigurationManager.AppSettings["Password"].ToString();
CrystalReportViewer1.ParameterFieldInfo.Clear();
ReportDocument crystalReport = new ReportDocument();
crystalReport.Load(path);
var connectionInfo = new ConnectionInfo();
connectionInfo.ServerName = ServerName;
connectionInfo.DatabaseName = DatabaseName;
connectionInfo.UserID = UserName;
connectionInfo.Password = Password;
connectionInfo.IntegratedSecurity = false;
crystalReport.SetDatabaseLogon(UserName, Password, ServerName, DatabaseName);
Tables CrTables = crystalReport.Database.Tables;
TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();
foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
{
crtableLogoninfo = CrTable.LogOnInfo;
crtableLogoninfo.ConnectionInfo = connectionInfo;
CrTable.ApplyLogOnInfo(crtableLogoninfo);
CrystalReportViewer1.LogOnInfo.Add(crtableLogoninfo);
}
foreach (ReportDocument report in crystalReport.Subreports)
{
report.SetDatabaseLogon(UserName, Password, ServerName, DatabaseName);
foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in report.Database.Tables)
{
crtableLogoninfo = CrTable.LogOnInfo;
crtableLogoninfo.ConnectionInfo = connectionInfo;
CrTable.ApplyLogOnInfo(crtableLogoninfo);
CrystalReportViewer1.LogOnInfo.Add(crtableLogoninfo);
}
}
DataTable DTpram = dbAccess.getDataTableBtQry("select ParamID,ControllerType,ParamName from MI_CrystalReport_Parameters where ReportID=" + ddlReport.SelectedValue);
for (int i = 0; i < DTpram.Rows.Count; i++)
{
try
{
string parm = DTpram.Rows[i]["ParamName"].ToString().ToLower();
string value = getControllerValue(DTpram.Rows[i]["ParamID"].ToString().ToLower(), DTpram.Rows[i]["ControllerType"].ToString().ToLower());
ParameterField parameter = new ParameterField();
ParameterDiscreteValue parameterValue = new ParameterDiscreteValue();
parameterValue.Value = value;
parameter.Name = parm;
parameter.CurrentValues.Add(parameterValue);
CrystalReportViewer1.ParameterFieldInfo.Add(parameter);
}
catch
{
}
}
CrystalReportViewer1.ReportSource = crystalReport;
CrystalReportViewer1.RefreshReport();
}
但是当我检查它时会出现这样的错误。Print Screen
答案 0 :(得分:0)
我不是关于水晶报告的专家,但作为部分系统管理员我知道MS更新KB3102429,这导致我们的软件和水晶reporst的一些问题。也许这也是你软件的问题?