【发布时间】:2019-01-14 15:17:14
【问题描述】:
我使用 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);
}
此代码不起作用。它给出错误参数不正确。我真的不明白我做错了这个问题
【问题讨论】:
-
这取决于您如何设计报告。您将在设计器中连接您的 proc 调用并传递报告参数。
-
是的,但这不是我的搜索答案。我可以在水晶设计师上调用这个 sp,但我必须以编程方式进行
-
对,但是您在生成报告时设置的是报告参数值而不是 proc 值。你把你的报告参数叫做什么?我看到你有@cariid 但我猜报告参数不是 proc 参数所以很可能不以 @ 开头,但话又说回来,没有看到你的报告定义,我不知道
-
我的报告参数是@cariid
-
如果我没有@它会给出无效索引错误
标签: c# stored-procedures crystal-reports crystal-reports-8.5