c# - 如何在 C# (visual studio 2013) 中使用 Crystal Report 8.5 将参数传递给存储过程?
问题描述
我用 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);
}
此代码不起作用。它给出错误参数不正确。我真的不明白我做错了这个问题
解决方案
我解决了我的问题。首先我将我的应用程序编译平台目标更改为 x86(32 位)。在我使用 CrystalDecisions.CrystalReports.Engine lib 版本 13.0.2000.0 之后,现在它工作正常。
推荐阅读
- java - AndroidStudio 上的多线程多客户端
- android - 无法使用 Ionic CLI 构建 Anroid Apk
- amazon-web-services - AWS ALB 运行状况检查失败
- javascript - scrollreveal ReferenceError: 要求 const ScrollReveal = require("scrollreveal"); 后未定义文档
- python - 如何获取用python导入的csv文件的行和列?
- javascript - VueJs 使用 Vuelidator 验证输入值并获取错误
- c - 我试图将表达式中缀转换为后缀,为什么我得到输出 null insted ab-?
- python - Tox:针对 flake8 和 pylint 等工具的每个平台配置
- django - 为什么在发出跨域请求时会出现 403 被禁止 - 即使我的代码正在设置 CRSF cookie
- ios - 如何向我的项目添加第二个 Localizable.strings?