Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 22

Top of Form

Introduction

This article gives an idea as how to use Crystal report in .Net Windows Application with parametrized
queries and Oracle as Database using dataset.I had searched on internet for articles related to Crystal
Report with parametrized query with Oracle,but I was unable to find any good article on this topic.So I
am posting my article on this topic.
There are three main points in this article.
1. Crystal Report with parametrized query.
2. Using Oracle Views because here stored procedure will not be able to do this job because of the fact
that Oracle Stored Procedure does not return Multiple Rows(Record Set) as Sql Server Stored
Procedures do.
3. Using DataSet.
Hence I have used Oracle views in this project to bind the Crystal Report and Dataset.Then I wrote my
parametrized query on the view as we do generally on database tables. So this Project will give a good
idea on how to Use Crystal Report with Oracle. There are many methods to do this job, even we can
create Oracle packeges which will return mutiple records as SQl Server Stored Procedures. But I found
this way simple and fast to do.

Background

No special background knowledge is needed for this article. Any beginner or Intermediate will be able to
understand this code.It will be good if you have a basic knowledge of database views.
Using the code

I have created 2 sample tables and a view for this project. Scripts of tables and view are as follows, with
some sample insert query to have sample data

Collapse | Copy Code

create table tbl_project

PROJECT_ID NUMBER(4),

PROJECT_NAME VARCHAR2(150),

GROUP_CODE NUMBER(2)

create table tbl_project_group

GROUP_CODE NUMBER(2),

GROUP_NAME VARCHAR2(100)

);

create view view_project as

select a.PROJECT_NAME "PROJECT_NAME",b.GROUP_NAME "GROUP_NAME",

a.GROUP_CODE "GROUP_CODE"

from tbl_project a,tbl_project_group b where

a.GROUP_CODE=b.GROUP_CODE;

insert into tbl_project values(1,'CrystalReportWithOracle',1);

insert into tbl_project values(2,'Ajax Application',2);


insert into tbl_project_group values(1,'windows application');

insert into tbl_project_group values(2,'Web application');

Step 1:
First off all create a project in Microsoft Visual Studio 2005 and name it CrystalReportWithOracle. Then
add a crystal report to it as shown below.

Step 2:
Then from the available data sources choose OLEDB(ADO) as below
Then Select the Provider as Oracle Provider for OLEDB as in the image
Then Provide the necessary information for databse login as per your oracle Configurations
Step 3:
Then from the available data source add your view which you have created before to the selected table
Container and add your fields which will be displayed in the report as shown below.
Step 4:
Now add a Empty DataSet to your project.
Then You add a Crystal Report Viewer Control from the tool box to your form.
There is a class file DLApplication.cs for the sake of database connectivity. Here you can change your
connection string as per your Oracle configuration. If You are creating your Own connectivity in the form
itself you can ignore this file.

There is a Combo Box in which the user can select his choice of project type so that the application
generates a dynamic report on the user selection. Code to fill the combo box is as follows.

Collapse | Copy Code

String Query = "Select GROUP_CODE,GROUP_NAME from tbl_project_group order by


GROUP_CODE ASC";

DLApplication oDl = new DLApplication();

OracleConnection Conn = oDl.GetCon();

DataView dv = oDl.getDataView(Query, Conn);

cmb_type.DataSource = dv;
cmb_type.ValueMember = "GROUP_CODE";

cmb_type.DisplayMember = "GROUP_NAME";

cmb_type.SelectedIndex = -1;

In the above code getDataView() function is called with required parameters. This function resides in the
DLApplication class.

The main function which is binding the crystal report is given below, when ever the user changes his
choice from the combo box a new report is generated for the selected combo value.

Collapse | Copy Code

//

private void cmb_type_SelectedIndexChanged(object sender, EventArgs e)

if (Convert.ToInt32(cmb_type.SelectedIndex) == -1 ||

(Convert.ToString(cmb_type.SelectedValue) == "System.Data.DataRowView"))

return;

CrystalReport1 objRpt;

objRpt = new CrystalReport1();

String ConnStr = "SERVER=newsdb;USER ID=ppms;PWD=ppms";

OracleConnection myConnection = new OracleConnection(ConnStr);


// Here I am writing my query over the view

// we cannot write query directly over the tables because it will be a

// join query and we will not be able to fill our adapter easily.

string Query1 = "select PROJECT_NAME,GROUP_NAME from view_project

where GROUP_CODE=" + cmb_type.SelectedValue;

OracleDataAdapter adapter = new OracleDataAdapter(Query1, ConnStr);

DataSet1 Ds = new DataSet1();

adapter.Fill(Ds, "view_project");

if (Ds.Tables[0].Rows.Count == 0)

MessageBox.Show("No data Found", "Project Tracker Suite");

return;

objRpt.SetDataSource(Ds);
CrystalDecisions.CrystalReports.Engine.TextObject root;

root = (CrystalDecisions.CrystalReports.Engine.TextObject)

objRpt.ReportDefinition.ReportObjects["txtHeader"];

root.Text = "Sample Report With Parameter!!";

crystalReportViewer1.ReportSource = objRpt;

//

The DLApplication.cs file contains function which returns Oracle Data View, Oracle Data Reader etc. You
can have a look at the class file.

Collapse | Copy Code

using System;

using System.Collections.Generic;

using System.Text;

using System.Data;

using System.Data.OracleClient;

namespace CrystalReportWithOracle

public class DLApplication

private const String My_name = " DLApplication : ";

private static String m_sConStr = "SERVER=yourdB;USER ID=user1;PWD=pass";


private int userId;

public int propertyUserId

get

return userId;

set

userId = value;

public OracleConnection GetCon()

try

OracleConnection sqlcon = new OracleConnection(m_sConStr);

return sqlcon;

catch (Exception ex)

throw new System.ApplicationException(My_name + " GetCon: " + ex.Message);


}

public OracleDataReader GetSqlReader(String Sql, ref OracleConnection con)

try

OracleCommand objOraCmd = new OracleCommand();

OracleDataReader objOraDrRead;

objOraCmd.Connection = con;

objOraCmd.CommandType = CommandType.Text;

objOraCmd.CommandText = Sql;

if (con.State != ConnectionState.Open) con.Open();

objOraDrRead = objOraCmd.ExecuteReader(CommandBehavior.CloseConnection);

return objOraDrRead;

catch (Exception ex)

throw new System.ApplicationException(My_name + " GetSqlReader: " + ex.Message);

public void CloseCon(ref OracleConnection thisCon)


{

try

if (thisCon.State != ConnectionState.Closed)

thisCon.Close();

catch (Exception ex)

throw new System.ApplicationException(My_name + " CloseCon: " + ex.Message);

public void ExecNonQuery(String sQuery)

OracleConnection objCon = new OracleConnection(m_sConStr);

OracleCommand objCmd;

try

objCon.Open();

objCmd = objCon.CreateCommand();

objCmd.CommandText = sQuery;

objCmd.ExecuteNonQuery();

}
catch (Exception ex)

throw new System.ApplicationException(My_name + " ExecNonQuery : " + ex.Message);

finally

if (objCon.State == ConnectionState.Open)

objCon.Close();

public DataView getDataView(String Query, OracleConnection Conn)

try

OracleDataAdapter oDa;

DataSet ds;

oDa = new OracleDataAdapter(Query, Conn);

ds = new DataSet();

oDa.Fill(ds);

if (Conn.State != ConnectionState.Closed)

Conn.Close();
return (ds.Tables[0].DefaultView);

catch (Exception ex)

throw new System.ApplicationException(My_name + " getDataView : " + ex.Message);

finally

if (Conn.State != ConnectionState.Closed)

Conn.Close();

Points of Interest

Oracle Stored procedures do not return multiple records, we can use packege instead,but here I have
used Views which is much more easy and simple to understand.

Soon I will post my articles on other topics such as:-


1. Posting data To HTTPS (https i,e. Secure Connection) url from a windows application(.Net) by
attaching Digital Certificates and getting the response back.

2. Ajax Techniques.

History

I will update this article to give a more clear picture on this topic
License

This article, along with any associated source code and files, is licensed under The Code Project Open
License (CPOL)

About the Author

Rehan Ahmad Abbasi I am a Software Engineer having 4 + years of experience in various skill sets.
Proficiency in Asp.net, C#.net, Vb.net, Ado.net, VB 6.0, J2ME, Ajax, Xslt, Xml,
Smart Device (Pocket PC 2003), and Oracle.
 
Extensive experience with analyzing, designing, development, and maintenance
of Internet, Intranet, Client Server and Object Oriented applications built on .NET
Framework (windows and web app.) and VB 6.0.

Software Developer
(Senior)
Al-Jazirah Corporation
Riyadh KSA
United Arab Emirates

Member

Article Top

Sign Up to vote   Poor Excellent Vote

Add a reason or comment to your vote: x

Votes of 3 or less require a comment

Bottom of Form

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)

Top of Form

 FAQ  1524887 Search


 

Bottom of Form

Top of Form

1524887 ?floc=%2fKB%2f /KB/cs/Crystal_R Medium


Profile popups    Noise level  
Normal 25 Update
 Layout   Per page    

Bottom of Form

  Refresh First Prev Next

My vote of 4 easetolearndotnet 19:52 17 May '11  

Good Article For Beginners

Sign In·View Thread·Permalink

crystal report in c#.net+cracle khushnood.abbas 3:16 26 Mar '10  

hiii

my crystal report is working well but when ever i view the report i have to enter the oracle user
password on run time
i want to avoid it is there is any coading or connection string so that it wont ask on run time????

Sign In·View Thread·Permalink 1.00/5 (1 vote)

oracle backup pentium404 20:04 26 Jun '09  

can anybody tel me how to take backup of oracle database


Sign In·View Thread·Permalink 1.00/5 (1 vote)

How can the lines of the report becomecloser? joseccz 11:39 4 May '09  

Your article looks very interesting...


 
I have 2 questions:
 
a) How the lines in the report can become closer to each other? the space between lines seems to be
exaggerated..
 
b) If your view table were in a DB that requires ssl protocol... how can you connect to that DB
through the Chrystal Reports Database Expert?
 
thanks
Jose

Sign In·View Thread·Permalink 2.00/5 (1 vote)

Rehan Ahmad 4:22 26 Aug '08  


Please Vote for this article
Abbasi

Please Vote for this article


 

RAAbbasi

Sign In·View Thread·Permalink

Crystal Report Viewer Licensing/Royalties Member 4379166 21:26 5 Aug '08  

Can anyone tell me what issues there are regarding the subject? I've got a CR XI Developer License
which I use to create report files (rpt) and would like to be able to supply these report files to my 3rd
party customers. I was thinking of creating a tool with VS2008 using the Crystal Report Viewer
component. In order to do this, you need to distribute the CR Redistributable Package to enable the
customer to "run" or "refresh" the report.
 
My question is - do I still need to pay some license or royalties to someone if I want to distribute a
app using the CR Viewer component and the CR Redistributable package?

Sign In·View Thread·Permalink 2.00/5 (2 votes)

Rehan Ahmad 22:40 6 Aug '08  


Re: Crystal Report Viewer Licensing/Royalties
Abbasi

I am not sure on this. I think you can go to this site


http://www.businessobjects.com
as Crystal Report is a product of businessobjects
which comes as a bundle with .net
 

RAAbbasi

Sign In·View Thread·Permalink

/KB/cs/Crystal_R
Last Visit: 19:00 31 Dec '99     Last Update: 20:39 15 Oct '11
1

General    News    Suggestion    Question    Bug    Answer    Joke    Rant    Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch


pages.

Permalink | Advertise | Privacy | Mobile


| Web01 | 2.5.111012.1

Article Copyright 2008 by Rehan Ahmad Abbasi


Everything else Copyright © CodeProject, 1999-2011
Terms of Use

oraclequerywithparam.
How to connect oracle server, Pass one or more parameter and execute...
www.geocities.com
ComponentOne ReportViewer for ASP.NET AJAX
Turn any of your Web reports into powerful, printable, Web-ready...
www.componentone.com

See Also...

Crystal and Reporting Services FAQ Part 1

Generate a report using Crystal Reports in Visual Studio 2010

Develop Reports Using Crystal Reports in .NET 2005

Crystal and Reporting Services FAQ Part 2

Crystal Report with DataSet and DataTable using C#

Crystal Report in WPF

Decrypting Data in Crystal Reports

Working with Crystal Reports in C#

Step by Step Creation of Crystal Report using its Features Group, Graph, Cross-Tab and Sub Report

Crystal Reports User Group Selections

The Daily Insider

30 free programming books

Daily News: Signup now.

You might also like