Provide value to SQL SP parameter from VB.NET via CrystalReportDocument
(I'm having a tough time using this editor -- why can't I paste into it?)
I'm developing a CrystalReportDocument from within Visual Studio for the first time, and cannot get the report to work. My environment is VB.NET in Visual Studio 2013, Crystal Reports for Visual Studio 2013 SP9, and SQL Server Express 2014.
The report Invoice.rpt appears in the Solution Explorer window of my VB.NET project. It uses a SQL Server SP containing one parameter, @RepairOrderNumber, that needs to be supplied at run time. Here's my code that attempts to invoke the report:
Private Sub frmReportViewer_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim rptInvoice As New SD.Invoice ' this is supposed to reference Invoice.rpt
Dim crParameterField As New ParameterField
Dim crParameterFields As New ParameterFields
Dim crParameterDiscreteValue As New ParameterDiscreteValue
crParameterField.Name = "@RepairOrderNumber"
crParameterDiscreteValue.Value = 2 ' hard-coded for now to print invoice number 2
crViewer.ParameterField.Info = crParameterFields
crViewer.ReportSource = rptInvoice
Catch ex As Exception
' error logging code omitted, but no errors were logged.
When I run the above code, the Invoice report is displayed in the viewer, however it's empty -- apparently no result set is being returned. When I preview the report in the designer and supply a parameter value when prompted, the report displays perfectly.
What's wrong with the above code?
Thanks in advance...
Ludek Uher replied
You've got some pretty weird behaviors going on there;
Report appears, then disappears(?).
Report prompts for parameter even though you provide the param in code?
Two load report fails?
I really would go to square one as I described in my initial post;
One liner app load report via the viewer - get that to work.
Next add code to load report via the engine - get that to work.
Add parameter code to the load report via engine.
All in a new app. The behavior of the old app does not make sense. If this is a web app, you will have to put the report into a session: