如何使用 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 之后,现在它工作正常。
我用 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 之后,现在它工作正常。