![]() |
Database »
Database »
ADO.NET
Beginner
License: The Code Project Open License (CPOL)
The ADO.NET OleDbDataReader classBy Chris MaunderAccessing database information using the DataReader class from ADO.NET in C# |
C#, Windows, .NET 1.0, .NET 1.1VS.NET2003, Dev
|
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||

ADO.NET is the .NET enhanced version of ADO that we all know and love. ADO.NET aims to address some of the deficiencies of traditional ADO and present a model that provides type safety, OOP, and efficiency.
This article will demonstrate the most common task when accessing a database: querying for data and traversing that data from start to finish in order to display the contents (or subset thereof) of a table.
ADO.NET replaces the concept of data rows with the DataSet
object. This essentially provides us with full access to a given
database, including all rows, tables and relationships in an object oriented and
type-safe manner. It is, however, total overkill for the simple query and
traversals that are most often performed on databases.
For this simple case .NET provides us with the DataReader class
(OleDbDataReader, OdbcDataReader and
SqlDataReader) that is essentially a type safe read only, forward
only rowset. The differences between the various flavours of
DataReaders is in which data access library they use.
SqlDataReader works best with SQL Server, while the others work
best with ODBC and OleDB data srouces.
All we need to do is open a connection to a database, send an SQL command,
then traverse through the resultant DataReader using the
Read command and process the results.
The easiest way to illustrate this is to show you some code. This snippet opens an Access database, reads all the information from a table, then populates a List View control with the data inside.
A few notes on the code:
StatusText and fileName are
RichTextBox controls declared as private System.Windows.Forms.RichTextBox fileName; private System.Windows.Forms.RichTextBox StatusText;
listView is a list view control declared as System.WinForms.ListView listView;
listView = new System.Windows.Forms.ListView ();
The list view has been placed in details mode using
listView.View = System.Windows.Forms.View.Details;
OleDbConnection Connection = new OleDbConnection ();
try
{
// Open a connection to the database
Connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + fileName.Text + ";" +
"Persist Security Info=False;";
Connection.Open();
// Create an OleDb command,
OleDbCommand command = new OleDbCommand();
command.Connection = Connection;
command.CommandText = "SELECT * FROM Authors";
// Execute and return the rows in the data reader object
OleDbDataReader dataReader;
dataReader = command.ExecuteReader(CommandBehavior.CloseConnection);
int nFields = dataReader.FieldCount;
// Setup the columns in the listview using the fields in the table
listView.Clear();
for (int i = 0; i < nFields; i++)
{
listView.Columns.Add(dataReader.GetName(i), 100,
HorizontalAlignment.Left);
}
// Fill the rows in the listview using the data in the rows
int nRow = 0;
while (dataReader.Read())
{
// Create an array of subitems for quick insertion
// The subitems will be all fields in the row except for
// the first field
String [] subitems = new String[nFields];
for (int i = 0; i < nFields; i++)
{
subitems[i] = dataReader[i].ToString();
}
// Insert a new item into the listview, and add the subitems at
// the same time. The item will be the first field in the row
ListViewItem item = new ListViewItem(subitems, -1);
listView.Items.Add(item);
++nRow;
}
dataReader.Close();
// Set the status text
StatusText.Text = nFields.ToString() + " columns, " +
nRow.ToString() + " rows read";
}
catch (Exception ex)
{
// If an error occured alert the user
StatusText.Text = "Error: " + ex.Message;
}
finally
{
// Close the connection if necessary
if (Connection.State == System.Data.ConnectionState.Open)
Connection.Close();
}
That's all there is to it. We have closed the database connection but since we are using managed code there is no need (or way) to delete the objects and memory we allocated.
23 Aug 2003 - Updated to .NET 1.0/1.1. Previous version was for .NET beta 1.
General
News
Question
Answer
Joke
Rant
Admin
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 22 Aug 2003 Editor: Chris Maunder |
Copyright 2000 by Chris Maunder Everything else Copyright © CodeProject, 1999-2009 Web22 | Advertise on the Code Project |