如何使用 Crystal Report 8.5 at C# (visual studio 2013) 将参数传递给存储过程?

How to pass parameter to a stored procedure in using Crystal Report 8.5 at C# (visual studio 2013)?

我用 Crystal 报告 8 准备了一份报告。5.I 想从 C# 调用此报告。

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

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

我的C#代码,首先我取的错误参数也不正确 Table 'GetCari'找不到。但是我不使用 table 我使用的是存储过程:

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);
        }

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

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