首页 > 解决方案 > 如何在 C# (visual studio 2013) 中使用 Crystal Report 8.5 将参数传递给存储过程?

问题描述

我用 Crystal Reports 8.5 准备了一份报告。我想从 C# 调用这个报告。

这是我在报告中的存储过程:

create procedure GetCari
    @cariid int 
as
    select 
        CariIdent, CariKod, CariNam, CariTip, CariTipEx, CariStatu 
    from 
        Cariler 
    where 
        CariIdent = @cariid

我的 C# 代码,首先我采用的错误参数不正确,也找不到表“GetCari”。但我不使用表我使用的是存储过程:

try
        {

            CrystalReportViewer cw = new CrystalReportViewer();
            cw.Dock = DockStyle.Fill;

            panel1.Controls.Add(cw);

            ReportDocument cryRpt = new ReportDocument();
            TableLogOnInfos crtableLogoninfos = new TableLogOnInfos();
            TableLogOnInfo crtableLogoninfo = new TableLogOnInfo();
            ConnectionInfo crConnectionInfo = new ConnectionInfo();
            Tables CrTables;





            ParameterField paramField = new ParameterField();
            ParameterFields paramFields = new ParameterFields();
            ParameterDiscreteValue paramDiscreteValue = new ParameterDiscreteValue();

            paramField.Name = "@cariid";
            paramDiscreteValue.Value = 1;
            paramField.CurrentValues.Add(paramDiscreteValue);
            paramFields.Add(paramField);

            cw.ParameterFieldInfo = paramFields;



            string path = @"C:\..\Reports\Report2.rpt";



            cryRpt.Load(path);


            ParameterFieldDefinitions crParameterFieldDefinitions;
            ParameterFieldDefinition crParameterFieldDefinition;
            ParameterValues crParameterValues = new ParameterValues();
            ParameterDiscreteValue crParameterDiscreteValue = new ParameterDiscreteValue();

            crParameterDiscreteValue.Value = Convert.ToInt32(1);
            crParameterFieldDefinitions = cryRpt.DataDefinition.ParameterFields;
            crParameterFieldDefinition = crParameterFieldDefinitions["@cariid"];
            crParameterValues = crParameterFieldDefinition.CurrentValues;

            crParameterValues.Clear();
            crParameterValues.Add(crParameterDiscreteValue);
            crParameterFieldDefinition.ApplyCurrentValues(crParameterValues);



            crConnectionInfo.ServerName = "server";
            crConnectionInfo.DatabaseName = "db";
            crConnectionInfo.UserID = "sa";
            crConnectionInfo.Password = "1234";

            CrTables = cryRpt.Database.Tables;


            foreach (CrystalDecisions.CrystalReports.Engine.Table CrTable in CrTables)
            {
                crtableLogoninfo = CrTable.LogOnInfo;
                crtableLogoninfo.ConnectionInfo = crConnectionInfo;

                CrTable.ApplyLogOnInfo(crtableLogoninfo);


            }
            cryRpt.SetParameterValue("@cariid", 1);

            cryRpt.VerifyDatabase();

            cryRpt.Refresh();

            cw.ReportSource = cryRpt;


            cw.Refresh();


        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

此代码不起作用。它给出错误参数不正确。我真的不明白我做错了这个问题

标签: c#stored-procedurescrystal-reportscrystal-reports-8.5

解决方案


我解决了我的问题。首先我将我的应用程序编译平台目标更改为 x86(32 位)。在我使用 CrystalDecisions.CrystalReports.Engine lib 版本 13.0.2000.0 之后,现在它工作正常。


推荐阅读