ADO.NET 技术

ADO.NET 技术

前言

作为.NET框架最重要的组件之一,ADO.NET扮演着应用程序与数据交互的重要的角

色。本文将从宏观的角度来探讨ADO.NET,和大家一起了解ADO.NET来龙去脉以及ADO.NET

的主要组成部分。

一、ADO.NET是什么?

简单的说,ADO.NET是一组允许.NET开发人员使用标准的,结构化的,甚至无连接的

方式与数据交互的技术。对于ADO.NET来说,可以处理数据源是多样的。可以是应用程序

唯一使用的创建在内存中数据,也可以是与应用程序分离,存储在存储区域的数据(如

文本文件、XML、关系数据库等)。

ADO.NET是ADO(ActiveX Data Objects)的升级版本,是一个类库,主要用于.NET

Framework平台对数据的操作。提供一致的对象模型,可以存取和编辑各种数据源的数

据,即对这些数据源,提供了一致的数据处理方式。

具体来说,ADO.NET 对 Microsoft SQL Server 和 XML 等数据源以及通过 OLE DB

和 XML 公开的数据源提供一致的访问。数据共享使用者应用程序可以使用 ADO.NET 来

连接到这些数据源,并检索、处理和更新所包含的数据。

作为.NET框架的重要组成部分,ADO.NET 类封装在 System.Data.dll 中,并且与

System.Xml.dll 中的 XML 类集成。当编译使用 System.Data 命名空间的代码时,需要

引用System.Data.dll 和 System.Xml.dll。

二、对比

1、ADO.NET 和asp.net

    
  ado.net是数据库的一种访问方式,不能与asp.net相提并论,asp.net是基
于.NetFramdwork 的网站开发技术。

 在数据库访问主要使用ADO.NET方式,主要表现对象为:DataSet 内存加载数据方式!

 ADO.NET方式与以前的ADO方式或者Oledb性能要强很多

2.ADO.NET和ADO关系

作为一个普通的缩略词,"ADO.NET”并只不是"ADO”的简单升级版本。严格的讲,

ADO.NET和ADO是两种截然不同的数据访问方式。

ADO的全称是Activex Data Objects,它是早期(.NET还未实施)开发人员用来访问数

据的组件。随着.NET的发展,ADO.NET顺其自然地以其显著的优越性逐步取代ADO。从技

术层面讲,ADO使用OLE DB接口并基于微软的COM技术,而ADO.NET拥有自己的ADO.NET接

口并且基于微软的.NET体系架构。

虽然大多数基于 .NET 的新应用程序将使用 ADO.NET 来编写,但 .NET 程序员仍然可

以通过 .NET COM 互操作性服务来使用 ADO。

三、具体流程:

1 我要把河那边的物品运过来,我先修桥(DataConnection),

2 然后就要制作命令计划,是运过去(insert)物品还是运过来(Select)物品或者是销毁物

品(delete)等等.(这个命令计划就是Command).

3 然后用车子去运(DataAdapter就是车子),

4 接着要将物品放入一个池子中(DataSet就是池子),

5 而DataReader就是桥那头的一个照相机,可以把物品的数据进行拍照,传过来.

6 至于DataGrid DataView DataList等等都是数据视图(控件),就是展现数据的,比如我

最后要看的是物品里的糖果,那么这就是一个DataGrid或者DataView .

  Connection 对象来连接数据库,使用Command 或DataAdapter对象来执行SQL语句,

并将执行的结果返回给DataReader 或 DataAdapter ,然后再使用取得的DataReader

Adapter 对象操作数据结果

Connection 对象

建立Connection 对象的代码:

OLEDB: OleDbConnection MyConnection=new OleDbConnection();

SQL: SqlConnection MyConnection=new SqlConnection();

◆他们的ConnectionString属性:获取或设置连接语句。

MyConnection.ConnectionString="server=(local);database=pubs;uid=sa;pwd=‘‘";

◆DataBase 属性:获取当前打开数据库

◆DataSource属性:获取打开数据库的连接实例

◆Open 方法:打开连接

◆Close 方法:关闭连接

  Command与DataReader 对象 

Command 对象中包含了提交数据库系统的访问信息。OleDbCommand 与SqlCommand 对

象,它们的基本对象和操作方法是相同的,在此介绍OleDbCommand的用法,SqlCommand的

用法类推即可.

如: OleDbCommand myComm = new OleDbCommand(strQuery,myConnection);

第一个参数是sql语句或存储过程名,第二个参数是前面的Connection 对象的实例

Command 对象的只要的属性和方法有:

◆Connection 属性:设置或获取 Command对象使用的Connection 对象实例

◆CommandText 属性:设置或获取需要执行的sql语句或存储过程名

◆CommandType 属性:设置或获取执行语句的类型。它有3个属性

值:StoredProceduce(存储过程) TableDirect Text(标准的SQL语句) 默认是Text

◆Parameters 属性:取得参数值集合

◆ExecuteReader 方法:执行CommandText指定的SQL语句或存储过程名,返回值类型为

      DataReader 

◆ExecuteNonQuery 方法:与ExecuteReader 功能相同,只是返回值为执行sql语句或存

储过程受影响的记录行数

DataReader 的主要属性和方法有:

◆FieldCount 属性:显示当前数据记录的字段总和

◆IsClosed 属性: 判断DataReader 对象是否已经关闭

◆Close 方法:关闭DataReader 对象

◆GetString方法:以String类型返回指定列中的值

◆Getvalue 方法:以自身的类型返回指定列中的值

◆Getvalues 方法:返回当前记录所有字段的集合

◆Read 方法:将“光标”指向DataReader对象的下一记录

Sql连接实例:

<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<script language="C#" runat="server">
void Page_Load(Object sender, EventArgs e) {
SqlConnection Conn=new SqlConnection();
Conn.ConnectionString="server=(local);database=pubs;uid=sa;pwd=''";
Conn.Open();
SqlCommand Comm=new SqlCommand("select * from Authors ",Conn);
SqlDataReader dr=Comm.ExecuteReader();
dg.DataSource=dr;
dg.DataBind();
Conn.Close();
}
</script>
<asp:DataGrid id="dg" runat="server" />
Aeccess 数据库连接实例 (OleDbCommand 和 OleDbDataReader 使用实例)
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Data"%>
<%@ Import Namespace="System.Data.OleDb"%>
<script Language="C#" Runat="Server">
OleDbDataReader dr;
public void Page_Load(Object src,EventArgs e)
{
string 

myConnstring="provider=Microsoft.Jet.OLEDB.4.0; Data 

Source="+Server.MapPath(".")+"..\\DataBase\\db2.mdb;";
string strSel="Select * from BookMark";
OleDbConnection myConn= new OleDbConnection 

(myConnstring);
OleDbCommand myComm=new OleDbCommand(strSel,myConn);
myComm.Connection.Open();
dr=myComm.ExecuteReader();
dg.DataSource=dr;
dg.DataBind();
myConn.Close();
}
</script>
<html>
<body>
<form Runat="Server">
<asp:DataGrid id="dg" runat="server" />
</form>
</body>
</html>

         DataSet 与DataAdapter 

DataReader 对象只能实现对数据的读取,不能完成其他的操作。ADO.NET提供一款更强

大的数据操作对象――DataSet 可以将DataSet看成一个非连接的数据库,因为DataSet

的内部存储结构与数据库很类似,拥有数据表(DataTable)数据表关联

(DataRelation)。DataSet中可以存储多张表等。DataSet拥有类似于数据库的结构,

但它并不等同于数据库。首先他可以存储来自数据库的数据,而且还可以存储其他格式

的数据,比如 XML格式文档;

1.查询数据

讲到DataSet的数据库应用,先要了解ADO.NET中的另一个对象DataAdapter .

它也分为SqlDataAdapter 和OleDbDataAdapter

建DataAdapte:

OleDbDataAdapter MyAdapter=new OleDbDataAdapter();

SqlDataAdapter MyAdapter=new SqlDataAdapter();

取得的DataAdapter 对象时必须赋予一个连接对象:

MyAdapter.SelectCommand.Connection = MyConn; 或

MyAdapter.UpdateCommand.Connection =Myconn; 或

MyAdapter.DeleteCommand.Connection = MyConn; 或

MyAdapter.InsertCommand.Connection =Myconn;

如果需要执行SQL语句,那么还必须给相应的CommandText 属性赋值。代码为:

MyAdapter.*Command.CommandText = SQL语句;

写这么多行代码似乎有些麻烦,如果你只是查询数据库,则可以在建立 DataAdapter实

例时就完成上述工作。

OleDbDataAdapter MyAdapter = new OleDbDataAdapter(strSelect,objConnection);
<%@ Page Language="C#" Runat="Server"%>
<%@ Import Namespace="System.Data"%>
<%@ Import Namespace="System.Data.OleDb"%>
<script Language="C#" Runat="Server">
public void Page_Load(Object src,EventArgs e)
{
string 

MyConnString="Provider=Microsoft.Jet.OLEDB.4.0;Data 

Source="+Server.MapPath(".")+"\\DataBase\\db3.mdb;";
string strSel="select * from Score";
//建立一个DataSet 实例
DataSet ds=new DataSet();
OleDbConnection MyConn= new OleDbConnection(MyConnString);
OleDbDataAdapter MyAdapter = new OleDbDataAdapter(strSel,MyConn);
MyAdapter.Fill(ds,"Score");
dg1.DataSource=ds.Tables["Score"].DefaultView;
dg1.DataBind();
}
</script>
<asp:DataGrid id="dg1" runat="Server"
Headerstyle-BackColor="#aaaadd"
AlternatingItemstyle-BackColor="#eeeeee"
/> 

将DataAdapter 于 DataSet 相联系的是 DataAdapter 对象的 Fill 方法。他有很多

中用法: MyDataAdapter.Fill(DataSet) MyDataAdapter.Fill(DataSet,TableName)

MyDataAdapter.Fill(DataSet, StartRow , RowsCount, TableName)

DataSet 绑定至 DataGrid 控件显示:

1.dg1.DataSource= ds.Tables[“Score”].DefaultView; dg1.DataBind();

2.dg1.DataSource=ds; dg1.DataMember=”Score”; dg1.DataBind();

提示: DataSet中的各种集合,访问子项有两种方法,一种是用子项的名,一种是用数字

索引.比如要访问表”Score”,可以用: DataSet.Tables[0] 访问 (多张表依次类推)

2. 插入数据: DataSet 的结构和数据库相似,所有插入数据实质上就是在DataSet 的数

据表里插入一行(DataRow)

<pre name="code" class="csharp">//新建一行
DataRow dr= ds.Tables[“Score”].NewRow();
dr. [“Name”] = “addme”;
dr. [“class”] =”201”;
ds.Tables[“Score”].Rows.Add(dr); //将新建的行加到DataTable 的DataRow集合中
这样对DataSet的操作仅仅是在DataSet中执行,并不影响数据库中的数据,要使用DataAdapter 的 Update 方法(有多种方法).
1. DataAdapter.Update(DataSet) ; 2. DataAdapter.Update(DataSet, TableName);
3.更新数据: 实际就是在DataSet 数据行上面直接修改数据
DataRow dr = ds .Tables[“Score”].Rows[0]; //取出第一行
dr. [“Name”] = “比尔”; //修改
dr. [“class”] =”201”; 

如果要更新数据库,则再调用 Update 方法

4.删除数据: 找到相应的数据行,然后删除

DataRow dr =ds.Tables[“Score”].Row[0]; dr.Delete();

注意: DataAdapter 对象在数据发生改变时,并不能自动产生数据库系统所需的交易sql

语句,所有要建立一个CommandBuilder 对象 它能自动产生交易的sql语句.

OleDbCommandBuilder custcb = new OleDbCommandBuilder(MyAdapter);

5.DataSet 的其他特征

DataSet 、DataTable 和DataRow 都有一个十分有用的方法----RejectChanges,

它时操作对象拒绝已经发生的改变,将数据复原.该方法于AcceptChanges HasErrors等属

性连用非常有用.

If (DataSet.HasErrors)
{
DataSet.RejectChanges();
}
else
{
DataSet.AcceptChanges();
}
小结:
 ADO.NET为.NET构架提供了优化的数据访问模型,和基于COM的ADO是完全两样的数据访
问方式。也正因为ADO.NET基于XML格式,数据类型更为丰富并且不需要再做COM编排导致
的数据类型转换,从而提高了整体性能。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-12 18:37:18

ADO.NET 技术的相关文章

ADO.Net技术

Connection对象 1.连接数据库 通过SqlConnection对象的State属性判断数据库的连接状态: public override ConnectionState State{ get;} 属性值:ConnectionState枚举 枚举值              说明 Broken               与数据源的连接中断 Closed               连接处于关闭状态 Connecting       连接对象正在与数据源连接 Executing     

[翻译]比较ADO.NET中的不同数据访问技术(Performance Comparison:Data Access Techniques)

Performance Comparison: Data Access Techniques Priya DhawanMicrosoft Developer Network January 2002 原文链接:https://msdn.microsoft.com/en-us/library/ms978388.aspx 概要:在典型的应用环境中,比较不同数据访问技术的表现性能.适用于Microsoft .NET Framework Beta2 和 Microsoft SQL Server 2000

《C#语言和数据库技术基础》单词必备

<C#语言和数据库技术基础> 第一章1..NET Framework   框架2.sharp            尖锐3.application      应用程序4.developer        开发者5.network          网络6.build            建造,建筑7.console          控制台8.debug            调试9.namespace        命名空间10.project         项目11.solution 

ADO.NET数据库

ASP.NET提供了ADO.NET技术,它是ASP.NET应用程序与数据库进行交互的一种技术. ADO.NET技术把对数据库的操作分为几个步骤,并为每个步骤提供对象来封装操作过程,从而使对数据库的操作变得简单易行. ADO.NET组件通过以下两个主要的组件将数据访问与数据处理分离: 1. ADO.NET体系结构的一个核心元素是.NET数据提供程序,它是专门为数据处理以及快速地只进.只读访问数据而设计的组件,包括Connection.Command.DataReader和DataAdapter对象

使用ADO.NET操作Oracle数据库

本文将示例使用C#的ADO.NET技术调用Oralce的存储过程和函数及操作Oracle数据库. 在oracle的hr数据库中建立存储过程 在oralce的hr数据库中建立函数 新建控制台项目,在主函数添加代码: 1 string strConn = "Data Source=jayjay;User ID=hr;Password=oracle;Unicode=True"; 2 3 //调用存储过程 4 using (OracleConnection conn = new OracleC

ADO.NET数据库之数据库连接---ShinePans

ADO.NET技术主要包括Connection,Command,DataReader,DataAdapter,DateSet,DataTable等六种对象 1).Connection 对象的主要功能是与数据库连接(事物处理也使用此对象) 2).Command  对象用于返回数据,修改数据,运行存储过程以及发送或检索参数信息的数据库命令 3).DataReader 对象主要功能是以只进流的方式从数据库中读取行 4).DataAdapter 对象的主要功能是将数据库中的内容填充到DataSet对象,

ADO.NET学习系列(一)

一.ADO.NET基础 程序和数据库交互,要通过ADO.NET进行:通过ADO.NET就能在数据库中执行SQL了.ADO.NET中提供了对不同数据库的统一操作接口(ODBC).另外还有一种操作数据库的接口是JDBC. ADO.NET中通过SqlConnection类创建到SQL Server的链接,Sqlconnection代表一个数据库的链接,ADO.NET中的链接等资源都实现了IDisposable接口. 实现了IDisposable接口的对象,在使用完了,要进行资源的释放.调用Dispos

微软数据开发技术

微软数据开发技术的前世今生 (Microsoft Data Development Technologies: Past, Present, and Future) 在过去的20多年时间里,微软开发了许多的数据访问方案,这里回顾下这些技术的发展历程. 在1990s,微软主要提供两个数据库产品:Access和SQL Server.Access作为一个桌面数据库,提供了数据的一个表格形式的开发界面,用户完全不用担心和数据库的交互机制,Acceess把这些都做好了,这为许多简单的应用提供了便利.但是,

连接访问数据库的技术方法

几种数据库连接方式优缺点比较 访问接口 易用性 运行能力 可扩展性 技术层次 突出特点 ODBC 差 较高 差 底层 可进行底层控制 MFC ODBC 好 一般 高层 同用标准,应用广泛 MFC DAO 好 较高 一般 高层 访问JET性能最好 OLE DB 很难 高 好 底层 可访问非关系型数据库 ADO 最好 高 好 高层 可访问非关系型数据库,有多种编程接口 ODBC 是一种底层的访问技术,因此,ODBC API 可以是客户应用程序能从底层设置和控制数据库,完成一些高级数据库技术无法完成的