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编排导致的数据类型转换,从而提高了整体性能。
版权声明:本文为博主原创文章,未经博主允许不得转载。