Search code examples
c#stored-procedurescrystal-reportscrystal-reports-8.5

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


I prepare a report with Crystal Reports 8.5.I want to call this report from C#.

This is my stored procedure in the report:

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

My C# code, firstly I taken error parameter is not correct also The Table 'GetCari' could not be found. But I don't use table I'm using a stored procedure:

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

This code not working. It is giving error the parameter is incorrect. I really don't understand this problem where I m doing wrong


Solution

  • I solved my problem.Firstly I changed my application compile platform target to x86(32 bit).After I used CrystalDecisions.CrystalReports.Engine lib version 13.0.2000.0 and now it is working fine.