What is a Data Reader?
Properties of OLEDBDataReader class
Methods of OLEDBDataReader class
Properties of OLEDBCommand class
Methods of OLEDBCommand class
Executing NonQuery commands using OLEDBCommand
Invoking Oracle stored procedure using OLEDBCommand
Field | DataType | Meaning |
---|---|---|
citycode | Text(5) | A unique code to identify city |
cityname | Text(50) | Name of the city |
stdcode | Text(5) | STD code of the city |
The program created an object of OLEDBCommand class. OLEDBCommand class is used to execute a command. The following code is used to open connection and create command object.
dim constr as string = "provider=Microsoft.jet.oledb.4.0;Data source=c:\srikanth\phones.mdb" dim con as New OLEDBConnection(constr) Dim cmd As New OLEDBCommand("select * from cities", con) Dim dr As OLEDBDataReader con.Open()The constructor of OLEDBCommand class takes command to be executed and connection object.
ExecuteReader method of OLEDBCommand class is used to execute the query and return and object of OLEDBDataReader.
' execute query and put data into data reader dr = cmd.ExecuteReader()The following code is used to read data from data reader and display the data on the screen. Read method is used to read one record at a time. If it can read a record successfully then it returns true otherwise false.
Do While dr.Read() console.Writeline(dr.getstring(0) & ":" & dr.getstring(1) & ":" & dr.getstring(2)) LoopGetString method is used to read a string form the given index position. Index position is the position of the column and it starts from zero. When Read method returns false then the loop is terminated. Data reader and connection are closed.
' close data reader first dr.Close() ' close connection con.Close()Now let us understand more about the other properties and methods of OLEDBDataReader.
Property | Meaning |
---|---|
FieldCount | The number of fields in the record. This is a read-only property. |
IsClosed | Returns true if data reader is closed otherwise false. Read-only property. |
Item | Returns the value of the column as object. It takes the column position as the parameter. Read-only property. |
The following sample program is used to display the data in the data reader. It first checks whether the data reader is opened and then reads all rows and sends the data to console.
' import required namespaces Imports system Imports System.data Imports system.data.oledb Module DataReader1 Public Sub Main() dim constr as string = "provider=Microsoft.jet.oledb.4.0;Data source=c:\srikanth\phones.mdb" dim con as New OLEDBConnection(constr) Dim cmd As New OLEDBCommand("select * from cities", con) Dim dr As OLEDBDataReader con.Open() ' execute query and put data into data reader dr = cmd.ExecuteReader() If dr.IsClosed Then console.WriteLine("Sorry. Data reader is closed") Exit Sub End If Dim i As Integer Do While dr.read() For i = 0 To dr.FieldCount - 1 console.Writeline(dr.item(i).ToString()) Next ' print one extra line console.WriteLine(" ") Loop ' close data reader first dr.Close() ' close connection con.Close() End Sub End ModuleThe above sample code uses IsClosed property to check whether data reader is currently open or closed. If it is closed then it displays an error message and exits main procedure.
While loop is repeated as long as Read method returns true. Read method is used to read one row at a time. For loop is set to repeat for each column in the record using FieldCount property. It displays the value of each column. As Item() property returns the value of the specified column as an Object, we converted that to a string using ToString() method.
However, note the above example is only to show you how to make use of some of the properties. It
is better to write the code as shown in first example instead of second example.
The following are the methods of OLEDBDataReader class.
Methods of OLEDBDataReader class
Method | Meaning |
---|---|
Close | Closes the data reader. |
Get<type> | Returns the value of the specified column of the current record.
<type>is one of the following - Byte,Char,DateTime,Decimal,Double, Float, Int16,Int32,Int64, String , TimeSpan,UInt16, UInt32, Uint64 |
GetName | Returns the name of the specified column |
IsDBNull | Returns true if the specified column is containing NULL value. |
Read | Reads the next available record. The default positioning is before the first record. So, we must call Read before accessing any data. Return true if it can advance to next record successfully otherwise false. |
It has the same properties and methods as OLEDBDataReader. The only difference is it is used
to access SQL Server database directly.
This class is used to execute an SQL command on the data source. It needs a connection to the data source and the command to be executed.
The following are the various constructors of this class.
New()
Creates a new instance of the class. Takes no parameters.
New(CommandText as String)
Creates a new instance and sets the command to be executed to the given command.
New(CommandText as String, Connection as OLEDBConnection)
Creates a new instance and sets the command to be executed to the given command. Uses the
connection given as the second parameter to execute the command.
The following are the important properties of OLEDBCommand class.
OLEDBCommand Class
Constructors of OLEDBCommand
Properties of OLEDBCommand class
Property | Meaning |
---|---|
Connection | Represents the connection to be used to execute the command. |
CommandText | Contains the command to be executed. |
CommandType | Specifies how to interpret the command given using CommandText property.
The valid values are : CommandType.Text, CommandType.StoredProcedure and CommandType.TableDirect |
CommandTimeOut | The amount of time in seconds to wait before returning an error. |
Parameters | Contains information about parameters to be used while executing the command. This property is of OLEDBParameters type. |
Transaction | Returns the transaction object of type OLEDBTransaction that refers to the transaction in which the command is executed. |
The following are the methods of OLEDBCommand class.
Method | Meaning |
---|---|
ExecuteReader() | Executes the query given in CommandText property and returns a data reader object with the data that is retrieved. |
ExecuteNonQuery | Executes a non query and returns the number of rows affected by the command. |
ExecuteScalar() | Executes the query given in CommandText and returns the first column of first row. This is very useful with queries that return a single aggregate value. |
Prepare | Prepares or compiles the given command. Subsequent executions of the command will be faster. |
In the next few sections we will see how to use OLEDBCommand class to execute commands.
The following command is used to change the email address of the person P.Srikanth to the new
email address. It updates PHONES table that has the following structure.
Executing nonquery commands using OLEDBCommand
Field | DataType | Meaning |
---|---|---|
citycode | Text(5) | City code to which person belongs |
person | Text(50) | Name of the person |
phoneno | Text(50) | One or more phone numbers of the person. Multiple numbers are separated by comma. |
Text(20) | Email address of the person |
The following sample program demonstrates how we can use OLEDBCommand object to execute a non-query.
' import required namespaces Imports system Imports system.data.OLEDB Module OLEDBCOMExample1 Public Sub Main() Dim con As New OLEDBConnection("provider=Microsoft.jet.oledb.4.0;data source=c:\srikanth\phones.mdb") Dim cmd As New OLEDBCommand("",con) ' create an object that uses con connection con.Open() cmd.CommandText = "update phones set email = 'srikanthpragada@rediffmail.com' where person = 'P.Srikanth' " ' execute the command given in CommandText property cmd.ExecuteNonQuery() console.WriteLine("Updation Successful") con.Close() End Sub End Module
The following sample program will show you how to execute a stored procedure of Oracle. It uses Parameters collection of OLEDBCommand object to send parameters to Oracle stored procedure. It also uses OLE DB Provider of Oracle .
Before we look at the code to invoke the procedure, let us look at the procedure itself. It is a very simple procedure to change the salary of the employee. It takes two parameters - employee number and salary.
create or replace procedure ChangeSalary(p_empno number, p_sal number) is begin update emp set sal = p_sal where empno = p_empno; commit; end;
Now let us see how we can call this procedure from OLEDB.NET.
' import required namespaces Imports system Imports system.data Imports system.data.oledb Module CallProcedure Public Sub Main() Dim con As New OLEDBConnection("Provider=MSDAORA.1;Password=tiger;User ID=scott") Dim cmd As New OLEDBCommand() con.Open() cmd.Connection = con cmd.CommandType = CommandType.StoredProcedure cmd.CommandText = "changesalary" ' create paramters Dim p1 As New OLEDBParameter("p_empno", OLEDBType.Numeric) Dim p2 As New OLEDBParameter("p_salary", OLEDBType.Numeric) ' add parameters to paramters collection cmd.Parameters.Add(p1) cmd.Parameters.Add(p2) 'set values to paramters p1.Value = "7369" p2.Value = "6000" ' execute the procedure cmd.ExecuteNonQuery() con.Close() End Sub End Module
We first connected to Oracle database using OLE DB provider for Oracle. Then we set the required properties of OLEDBCommand object.
cmd.connection = con cmd.CommandType = Commandtype.StoredProcedure cmd.CommandText = "changesalary"
CommandText is set to the name of the stored procedure to be executed and CommandType is set to CommandType.StoredProcedure to indicate that the command is not an SQL command but instead a stored procedure.
As the procedure expects two parameters, we created two parameters and add them to Parameters collection of OLEDBCommand. The type of both the parameters is set to OLEDBType.Numeric.
' create paramters Dim p1 As New OLEDBParameter("p_empno", OLEDBDBType.Numeric) Dim p2 As New OLEDBParameter("p_salary", OLEDBDBType.Numeric) ' add parameters to parameters collection cmd.Parameters.Add(p1) cmd.Parameters.Add(p2)
Then finally we called the procedure by invoking ExecuteNonQuery method. At this point the stored procedure is called and the updation is done.
NoteSQLCommand is similar to OLEDBCommand. The only difference is; it uses SQL Server .NET Data Provider. Whatever is accomplished using OLEDBCommand that can be accomplished using SQLCommand also.
Note Please see online documentation of OLEDBParamter to get complete list of its properties and methods.
In the next article, we will discuss about DataSet. DataSet is a new addition and provides much of the power of OLEDB.NET.
P.Srikanth.
I request you to tell me how you found this article. Please click here to send your feedback. Your feedback is very valuable and enables me to serve you better.