您的位置:首页技术开发ASP技巧 → ADO.NET:ADODataReader类

ADO.NET:ADODataReader类

时间:2004/11/7 4:11:00来源:本站整理作者:蓝点我要评论(0)

原码下载地址:

http://www.codeproject.com/dotnet/ADONET_datareader/ADONET_datareader.zip



Introduction

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 such as lack of type safety, lack of an object oriented model, and inefficiencies in returning rows of data.



This first 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.



The ADODataReader class

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 ADODataReader class that is essentially a type safe read only, forward only rowset. All we need to do is open a connection to a database, send an SQL command, then traverse through the resultant ADODataReader using the Read command and process the results.



The easiest way to illustrate this is to show you some C# code. This code 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 is a RichTextBox control declared as System.WinForms.RichTextBox StatusText;

StatusText = new System.WinForms.RichTextBox ();

listView is a list view control declared as System.WinForms.ListView listView;

listView = new System.WinForms.ListView ();

The list view has been placed in report mode with grid lines using



listView.View = System.WinForms.View.Report;

listView.GridLines = true;





The Code

ADOConnection adoConnection = new ADOConnection();



// TODO: Change the location of this file

// The '@' means that the string will be treated as-is, and the

// '\'s will not be interpreted as the escape character.

// This saves typing "D:\\ADONETdemo..."

String strDatabaseFile = @"D:\ADONETdemo\Authors.mdb";



try

{

// Open a connection to the database

adoConnection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +

"Data Source=" + strDatabaseFile + ";" +

"Persist Security Info=False;";

adoConnection.Open();



// Create an SQL command, set its connection and its command text

ADOCommand command = new ADOCommand();

command.ActiveConnection = adoConnection;

command.CommandText = "SELECT * FROM Author";



// Execute the command, and return the rows in the data reader object

ADODataReader dataReader;

command.Execute(out dataReader);



// Get the number of fields (columns) in the table

int nFields = dataReader.FieldCount;



// Setup the columns in the listview using the fields in the table

listView.Clear();

for (int i = 0; i
{

listView.InsertColumn(i, 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-1];

for (int i = 1; i
{

subitems[i-1] = dataReader.GetValue(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

listView.InsertItem(nRow, dataReader.GetValue(0).ToString(),

-1, subitems);

// next row.

nRow++;

}

dataReader.Close();



// Set the status text

StatusText.Text = nFields.ToString() + " columns, " +

nRow.ToString() + " rows read";

}

catch

{

// If an error occured alert the user

StatusText.Text = "Error occurred";

}

finally

{

// Close the connection if necessary

if (adoConnection.State == DBObjectState.Open)

adoConnection.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.



About Chris Maunder

Chris is the founder and site administrator for CodeProject.com. He's been programming in C/C++ for 10 years and Visual C++/MFC for 4 years. His background includes pure and applied mathematics, engineering and physics, and he is currently based in Canberra, Australia.








相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 没有查询到任何记录。

最新文章 VB.NET 2005编写定时关 Jquery get/post下乱码解决方法 前台gbk gb如何使用数据绑定控件显示数据ASP脚本循环语句ASP怎么提速

人气排行 轻松解决"Server Application Error"和iis"一起学习DataGridView调整列宽用ASP随机生成文件名的函数Jquery get/post下乱码解决方法 前台gbk gbODBC Drivers错误80004005的解决办法返回UPDATE SQL语句所影响的行数的方法用Javascript隐藏超级链接的真实地址两个不同数据库表的分页显示解决方案