When I started working on a .Net application which uses Oracle database, I had a very simple requirement. I need to execute SELECT statement, get the resultset into the .Net and show the data in a grid view. Having a SQL Server background, I thought a quick search in google would provide me an example where I can imitate the logic and jump start the application development. When I searched online, all the examples required me to create a stored procedure and get the resultset. Having a read only access on the database and not wanting to add a stored procedure in the database, I had to pull my hair for couple of days to find what I see as a very simple example. Here is a pretty simple example which requires Oracle managed drivers to be installed on machine or a solution using Nuget package for Oracle.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Oracle.ManagedDataAccess.Client;
using System.Data;
using Oracle.ManagedDataAccess.Types;
namespace OracleConnectivity {
public partial class _Default: System.Web.UI.Page {
protected void Page_Load(object sender, EventArgs e) {
OracleCommand cmd = new OracleCommand();
DataSet ds = null;
using(OracleConnection con = new OracleConnection("DATA SOURCE=ORACLE_CONNECTION;USER ID=USERNAME;PASSWORD=PASSWORD;PERSIST SECURITY INFO=True;")) {
cmd.Connection = con;
cmd.CommandText = @ "
BEGIN
OPEN: cur1 FOR SELECT 'SUCCESS'
AS Status, 'its good'
as Message
FROM DUAL;
OPEN: cur2 FOR SELECT * from all_tables where rownum < 10;
END;
";
cmd.CommandType = System.Data.CommandType.Text;
OracleParameter param1 = new OracleParameter("cur1", OracleDbType.RefCursor, ParameterDirection.Output);
cmd.Parameters.Add(param1);
OracleParameter param2 = new OracleParameter("cur2", OracleDbType.RefCursor, ParameterDirection.Output);
cmd.Parameters.Add(param2);
using(OracleDataAdapter da = new OracleDataAdapter(cmd)) {
ds = new DataSet();
da.Fill(ds);
}
cmd.Dispose();
con.Close();
}
gvDetails.DataSource = ds.Tables[0];
gvDetails.DataBind();
gvDetails0.DataSource = ds.Tables[1];
gvDetails0.DataBind();
}
}
}
Explanation
sql statement contains two output cursors “cur1” and “cur2” which are defined as two oracle output parameters. Tables[0] in dataset refers to the output from “cur1” and Tables[1] in dataset refers to the output from “cur2” cursor. I am assigning these table data to the two separate gridviews. Both the grid views has “AutoGenerateColumns” = True.
Leave a Reply