Crystal reports not working after creating project

2019-09-01 14:02发布

I have created some Crystal Reports for my Windows Project. They function fine when I run them on Visual Studio. (I am using VS 2010). But they wont work after I created the setup project and install the software on the Client PC. I get the following errors:

http://tistus.srilanka-erickson.com/errors.html

Following displayed is the button click event code that I have used to Load the crystal Report: First try clause has been used to register custom inputs to the Report, meanwhile the second try clause has been used to manually create the database connection to the report. third try clause has been used just to load the report.

private void buttonGenerateSecExportRpt_Click(object sender, EventArgs e)
    {
        CrystalDecisions.CrystalReports.Engine.ReportDocument cryRpt = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
        if (comboBoxSecPlateType.Text != "" && comboBoxSecExPlateBrand.Text != "")
        {
            try
            {
                dtFrom.Format = DateTimePickerFormat.Custom;
                string periodfrom = dtFrom.Value.ToString("yyyy/MM/dd");
                dtTo.Format = DateTimePickerFormat.Custom;
                string periodto = dtTo.Value.ToString("yyyy/MM/dd");

                //cryRpt.VerifyDatabase();
                string fullPath = "..\\..\\SecondaryPlateExportReport.rpt";
                cryRpt.Load(fullPath);
                cryRpt.SetParameterValue("dateFromChecked", dtFrom.Checked);
                cryRpt.SetParameterValue("dateToChecked", dtTo.Checked);
                cryRpt.SetParameterValue("dtPeriodFrom", periodfrom);
                cryRpt.SetParameterValue("dtPeriodTo", periodto);
                cryRpt.SetParameterValue("PlateType", comboBoxSecPlateType.Text.Trim());
                cryRpt.SetParameterValue("PlateBrand", comboBoxSecExPlateBrand.Text.Trim());

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            try
            {
                DbConnectionInfo.SetConnectionString(ConfigurationManager.ConnectionStrings["con"].ToString());
                TableLogOnInfo logOnInfo;
                ConnectionInfo connectionInfo;
                foreach (Table table in cryRpt.Database.Tables)
                {
                    logOnInfo = table.LogOnInfo;
                    connectionInfo = logOnInfo.ConnectionInfo;
                    // Set the Connection parameters.
                    connectionInfo.DatabaseName = DbConnectionInfo.InitialCatalog;
                    connectionInfo.ServerName = DbConnectionInfo.ServerName;
                    if (!DbConnectionInfo.UseIntegratedSecurity)
                    {
                        connectionInfo.Password = DbConnectionInfo.Password;
                        connectionInfo.UserID = DbConnectionInfo.UserName;
                    }
                    else
                    {
                        connectionInfo.IntegratedSecurity = true;
                    }
                    table.ApplyLogOnInfo(logOnInfo);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            try
            {
                crystalReportViewerSecEx.ReportSource = cryRpt;
                crystalReportViewerSecEx.Refresh();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        else
        {
            MessageBox.Show("Please select both Plate Type and the Brand to Generate the Report!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

I want to make the crystal reports work after deploying the software on the client PCs. Any suggestions would be greatly appreciated!

2条回答
forever°为你锁心
2楼-- · 2019-09-01 14:47
crystalReport.Load(@"C:\WINDOWS\Temp\samridhi.rpt");

when u creating setup put ur crystal report path like this

and

go to "C:\WINDOWS\Temp"

and copy ur rpt and .cs file go to "C:\WINDOWS\Temp" by mycomputer not by run prompt


for not setup just to check crystal report path in project application here is

the path is

  crystalReport.Load(System.Windows.Forms.Application.StartupPath + "\\samridhi.rpt");
查看更多
别忘想泡老子
3楼-- · 2019-09-01 14:57

Shehan,

It is best not to use hard-codeed paths in any .NET project. It is best if you use the Server.MapPath variable and build your string dynamically.

As an example add the using System.IO to your project. You can then use the Path.Combine method to build your string.

    string mappath = HttpContext.Current.Server.MapPath("~/");
    Path.Combine(mappath, "Report Folder Path", "FileName.rpt");

You can even place "Report Folder Path" into static string so that it can be called multiple times without fear of change.

查看更多
登录 后发表回答