Q:

Passing parameters to crystal reports in C#

I've been trying to get this to work for a while, and all the example code I've seen aren't quite doing what I'm doing. 
I have a program that returns a pdf of a report that I pass a data table to.  This works fine, except I would like to pass it a couple of other parameters (the date range of the table, stats etc) and I just can't get it to work.  My code basically looks like this. 
ReportDocument myDataReport = new CrystalDecisions. CrystalReports. Engine. ReportDocument();
myDataReport. Load(@"C:\Layouts\Report.rpt");
ParameterField myParam = new ParameterField();
ParameterDiscreteValue myDiscreteValue = new ParameterDiscreteValue();
myParam. ParameterFieldName = "MyParameter";
myDiscreteValue. Value = "Hello";
myParam. CurrentValues. Add(myDiscreteValue);
myDataReport. ParameterFields. Add(myParam);
myDataReport. SetDataSource(myDataTable);
Stream returnData = myDataReport. ExportToStream(PortableDocFormat);
myDataReport. Close();
return returnData;

I have added the parameter field in the rpt document in crystal, do I have to change anything in the xsd file in c#, or am I missing something completely different? 
Many thanks, Andy. 

A:

All that parameter code can be replaced with...
// Set datasource first
myDataReport. SetDataSource(...)
// Assign Paramters after set datasource
myDataReport. SetParameterValue("MyParameter", "Hello");

I can't remember if the order matters when setting the datasource and parameters.  Maybe try setting the datasource first.  The xsd/datasource has no relation to crystal parameters. 
UPDATE1
SetParameterValue AFTER the datasource asignation
or you will recieve error "Missing parameter values." 

A:

ReportDocument cryRpt = new ReportDocument();

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

string path = "C:/reportpath/report.rpt";
cryRpt. Load(path);

cryRpt. SetParameterValue("MyDate2", str2);
cryRpt. SetParameterValue("MyDate", str1);

crConnectionInfo. ServerName = "server";
crConnectionInfo. DatabaseName = "DataBase";
crConnectionInfo. UserID = "user";
crConnectionInfo. Password = "password";

CrTables = cryRpt. Database. Tables;
foreach (CrystalDecisions. CrystalReports. Engine. Table CrTable in CrTables)
{
    crtableLogoninfo = CrTable. LogOnInfo;
    crtableLogoninfo. ConnectionInfo = crConnectionInfo;
    CrTable. ApplyLogOnInfo(crtableLogoninfo);
}

crystalReportViewer1.ReportSource = cryRpt;
crystalReportViewer1.Refresh(); 

