﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-成长空间-随笔分类-.Net</title><link>http://www.blogjava.net/davidgw/category/24392.html</link><description>MiLife</description><language>zh-cn</language><lastBuildDate>Thu, 26 Jul 2007 09:06:03 GMT</lastBuildDate><pubDate>Thu, 26 Jul 2007 09:06:03 GMT</pubDate><ttl>60</ttl><item><title>ADO and ADO.net</title><link>http://www.blogjava.net/davidgw/archive/2007/07/25/132342.html</link><dc:creator>Picasso</dc:creator><author>Picasso</author><pubDate>Wed, 25 Jul 2007 08:46:00 GMT</pubDate><guid>http://www.blogjava.net/davidgw/archive/2007/07/25/132342.html</guid><wfw:comment>http://www.blogjava.net/davidgw/comments/132342.html</wfw:comment><comments>http://www.blogjava.net/davidgw/archive/2007/07/25/132342.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/davidgw/comments/commentRss/132342.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/davidgw/services/trackbacks/132342.html</trackback:ping><description><![CDATA[ADO是什么，它是如何操作数据库的？ <br><br>　　答：ADO的全名是ActiveX Data Object(ActiveX数据对象),是一组优化的访问数据库的专用对象集，它为ASP提供了完整的站点数据库解决方案，它作用在服务器端，提供含有数据库信息的主页内容，通过执行SQL命令，让用户在浏览器画面中输入，更新和删除站点数据库的信息。 <br><br>　　ADO主要包括Connection,Recordset和Command三个对象, 它们的主要功能如下： <br><br>　　&#183;Connection对象：负责打开或连接数据库文件； <br>　　&#183;Recordset对象：存取数据库的内容； <br>　　&#183;Command对象：对数据库下达行动查询指令，以及执行SQL Server的存储过程。 <br><br>使用Recordset对象和Command对象来访问数据库的区别在哪里？ <br><br>　　答：Recordset对象会要求数据库传送所有的数据，那么数据量很大的时候就会造成网络的阻塞和数据库服务器的负荷过重，因此整体的执行效率会降低。 <br>利用Command对象直接调用SQL语句，所执行的操作是在数据库服务器中进行的，显然会有很高的执行效率。特别是在服务器端执行创建完成的存储过程，可以降低网络流量，另外，由于事先进行了语法分析，可以提高整体的执行效率。 <br><br><br>
<h4 class=TextColor1 id=subjcns!9FF69A7079F8D17B!188 style="MARGIN-BOTTOM: 0px">什么是ADO.NET架构</h4>
<div class=bvMsg id=msgcns!9FF69A7079F8D17B!188>
<div>
<p><font size=3><span style="FONT-FAMILY: 宋体">如今大部分的应用程序都需要后台的数据库来为其提供大量的数据来源，而应用程序与数据库之间的交流称为数据访问。而</span><span lang=EN-US><font face="Times New Roman">ASP.NET</font></span><span style="FONT-FAMILY: 宋体">则使用</span><span lang=EN-US><font face="Times New Roman">ADO.NET</font></span><span style="FONT-FAMILY: 宋体">（</span><span lang=EN-US><font face="Times New Roman">Active X Data Object</font></span><span style="FONT-FAMILY: 宋体">）作为数据的访问与操作的协议，从而使得我们可以在</span><span lang=EN-US><font face="Times New Roman">Internet</font></span><span style="FONT-FAMILY: 宋体">上操作这些数据。</span></font>
<p><font size=3><span lang=EN-US><font face="Times New Roman">ADO.NET</font></span><span style="FONT-FAMILY: 宋体">的数据访问分为两大部分：数据集</span><span lang=EN-US><font face="Times New Roman">(DataSet)</font></span><span style="FONT-FAMILY: 宋体">与数据提供源</span><span lang=EN-US><font face="Times New Roman">(Data Provider</font></span><span style="FONT-FAMILY: 宋体">，我并不清楚中文该怎么翻译，就叫它数据提供源好了，不要和&#8220;数据源&#8221;</span><span lang=EN-US><font face="Times New Roman">—Data Source</font></span><span style="FONT-FAMILY: 宋体">搞混</span><span lang=EN-US><font face="Times New Roman">)</font></span><span style="FONT-FAMILY: 宋体">。</span></font>
<p><span lang=EN-US><font face="Times New Roman" size=3>&nbsp;</font></span>
<p><span style="FONT-FAMILY: 宋体"><font size=3>数据集：</font></span>
<p><font size=3><span style="FONT-FAMILY: 宋体">数据集是一个非在线，完全由内存表示的一系列数据，可以被看作一份本地磁盘数据库中部分数据的拷贝。数据集完全驻留内存，可以被独立于数据库地访问或者修改。当数据集的修改完成后，更改可以被再次写入数据库，从而保留我们所做过的更改。数据集中的数据可以由任何数据源</span><span lang=EN-US><font face="Times New Roman">(Data Source)</font></span><span style="FONT-FAMILY: 宋体">提供，比如</span><span lang=EN-US><font face="Times New Roman">SQL Server</font></span><span style="FONT-FAMILY: 宋体">或者</span><span lang=EN-US><font face="Times New Roman">Oracle</font></span><span style="FONT-FAMILY: 宋体">。</span></font>
<p><span lang=EN-US><font face="Times New Roman" size=3>&nbsp;</font></span>
<p><span style="FONT-FAMILY: 宋体"><font size=3>数据提供源：</font></span>
<p><span style="FONT-FAMILY: 宋体"><font size=3>数据提供源用于提供并维护应用程序与数据库之间的连接。</font></span>
<p><font size=3><span style="FONT-FAMILY: 宋体">数据提供源是一系列为了提供更有效率的访问而协同工作的组件。如今微软在</span><span lang=EN-US><font face="Times New Roman">ADO.NET</font></span><span style="FONT-FAMILY: 宋体">中提供了两组数据提供源，一组叫做</span><span lang=EN-US><font face="Times New Roman">SQL Data Provider</font></span><span style="FONT-FAMILY: 宋体">（</span><span lang=EN-US><font face="Times New Roman">SQL</font></span><span style="FONT-FAMILY: 宋体">数据提供源），用于提供应用程序与</span><span lang=EN-US><font face="Times New Roman">SQL Server 7.0</font></span><span style="FONT-FAMILY: 宋体">或者更高版本的访问。另一组叫做</span><span lang=EN-US><font face="Times New Roman">OleDb DataProvider</font></span><span style="FONT-FAMILY: 宋体">（</span><span lang=EN-US><font face="Times New Roman">Object Linking and Embedding DataBase DataProvider</font></span><span style="FONT-FAMILY: 宋体">），可以允许我们访问例如</span><span lang=EN-US><font face="Times New Roman">Oracle </font></span><span style="FONT-FAMILY: 宋体">之类的第三方数据源。</span></font>
<p><span style="FONT-FAMILY: 宋体"><font size=3>每组数据提供源中都包含了如下四个对象：</font></span>
<p><font size=3><span lang=EN-US><font face="Times New Roman">Connect</font></span><span style="FONT-FAMILY: 宋体">对象提供了对数据库的连接。</span></font>
<p><font size=3><span lang=EN-US><font face="Times New Roman">Command</font></span><span style="FONT-FAMILY: 宋体">对象可以用来执行命令。</span></font>
<p><font size=3><span lang=EN-US><font face="Times New Roman">DataReader</font></span><span style="FONT-FAMILY: 宋体">对象提供了只读的数据记录集。</span></font>
<p><font size=3><span lang=EN-US><font face="Times New Roman">DataAdapter</font></span><span style="FONT-FAMILY: 宋体">对象提供了对数据集更新或者修改的操作。</span></font>
<p><span lang=EN-US><font face="Times New Roman" size=3>&nbsp;</font></span>
<p><font size=3><span style="FONT-FAMILY: 宋体">总体来说，使用</span><span lang=EN-US><font face="Times New Roman">ADO.NET</font></span><span style="FONT-FAMILY: 宋体">访问数据可以被概括为以下步骤：</span></font>
<p><font size=3><span style="FONT-FAMILY: 宋体">首先应用程序创建一个</span><span lang=EN-US><font face="Times New Roman">Connect</font></span><span style="FONT-FAMILY: 宋体">对象用来建立与数据库之间的连接。然后</span><span lang=EN-US><font face="Times New Roman">Command</font></span><span style="FONT-FAMILY: 宋体">对象提供了执行命令的接口，可以对数据库执行相应的命令。当命令执行后数据库返回了大于零个数据时，</span><span lang=EN-US><font face="Times New Roman">DataReader</font></span><span style="FONT-FAMILY: 宋体">会被返回从而提供对返回的结果集的数据访问。或者，</span><span lang=EN-US><font face="Times New Roman">DataAdapter</font></span><span style="FONT-FAMILY: 宋体">可以被用来填充数据集，然后数据库可以由</span><span lang=EN-US><font face="Times New Roman">Command</font></span><span style="FONT-FAMILY: 宋体">对象或者</span><span lang=EN-US><font face="Times New Roman">DataAdapter</font></span><span style="FONT-FAMILY: 宋体">对象进行相应的更改。</span></font>
<p><span lang=EN-US><font size=3></font></span>
<p><span style="FONT-FAMILY: 宋体"><font size=3>具体来看数据提供源的四种对象</font></span>
<p><span lang=EN-US><font face="Times New Roman" size=3>&nbsp;</font></span>
<p><font size=3><span lang=EN-US><font face="Times New Roman">Connect </font></span><span style="FONT-FAMILY: 宋体">对象</span></font>
<p><font size=3><span lang=EN-US><font face="Times New Roman">Connect</font></span><span style="FONT-FAMILY: 宋体">对象用来提供对数据库的连接，</span><span lang=EN-US><font face="Times New Roman">Microsoft Visual Studio .Net</font></span><span style="FONT-FAMILY: 宋体">中微软提供了两种</span><span lang=EN-US><font face="Times New Roman">Connect</font></span><span style="FONT-FAMILY: 宋体">对象，分别为</span><span lang=EN-US><font face="Times New Roman">SqlConnection</font></span><span style="FONT-FAMILY: 宋体">对象，用来提供对</span><span lang=EN-US><font face="Times New Roman">SQL Server 7.0</font></span><span style="FONT-FAMILY: 宋体">或更高版本的连接，同时还有</span><span lang=EN-US><font face="Times New Roman">OleDbConnection</font></span><span style="FONT-FAMILY: 宋体">对象，用来提供对</span><span lang=EN-US><font face="Times New Roman">Access</font></span><span style="FONT-FAMILY: 宋体">与其他第三方数据库的连接。</span></font>
<p><span lang=EN-US><font face="Times New Roman" size=3>&nbsp;</font></span>
<p><font size=3><span lang=EN-US><font face="Times New Roman">Command </font></span><span style="FONT-FAMILY: 宋体">对象</span></font>
<p><font size=3><span style="FONT-FAMILY: 宋体">同样，</span><span lang=EN-US><font face="Times New Roman">Command</font></span><span style="FONT-FAMILY: 宋体">对象分为两组，</span><span lang=EN-US><font face="Times New Roman">SqlCommand</font></span><span style="FONT-FAMILY: 宋体">与</span><span lang=EN-US><font face="Times New Roman">OleDbCommand</font></span><span style="FONT-FAMILY: 宋体">。</span><span lang=EN-US><font face="Times New Roman">Command</font></span><span style="FONT-FAMILY: 宋体">对象被用来执行针对数据库的命令，比如执行数据库的存储过程</span><span lang=EN-US><font face="Times New Roman">(Stored Procedure)</font></span><span style="FONT-FAMILY: 宋体">，</span><span lang=EN-US><font face="Times New Roman">SQL</font></span><span style="FONT-FAMILY: 宋体">命令，或者直接返回一个完整的表。</span><span lang=EN-US><font face="Times New Roman">Command</font></span><span style="FONT-FAMILY: 宋体">对象提供三种方法</span><span lang=EN-US><font face="Times New Roman">(Methods)</font></span><span style="FONT-FAMILY: 宋体">用来执行上述操作。</span></font>
<p><font size=3><span lang=EN-US><font face="Times New Roman">ExecuteNonQuery</font></span><span style="FONT-FAMILY: 宋体">用来执行一个不需返回数据的命令，比如表的插入，更新或者删除操作。</span></font>
<p><font size=3><span lang=EN-US><font face="Times New Roman">ExecuteScalar</font></span><span style="FONT-FAMILY: 宋体">返回从一个查询得到的单独的值。</span></font>
<p><font size=3><span lang=EN-US><font face="Times New Roman">ExecuteReader</font></span><span style="FONT-FAMILY: 宋体">用来返回一个从</span><span lang=EN-US><font face="Times New Roman">DataReader</font></span><span style="FONT-FAMILY: 宋体">来的结果集。</span></font>
<p><span lang=EN-US><font face="Times New Roman" size=3>&nbsp;</font></span>
<p><font size=3><span lang=EN-US><font face="Times New Roman">DataReader</font></span><span style="FONT-FAMILY: 宋体">对象</span></font>
<p><font size=3><span lang=EN-US><font face="Times New Roman">DataReader</font></span><span style="FONT-FAMILY: 宋体">提供了</span><span lang=EN-US><font face="Times New Roman">forward-only, read-only, connected stream</font></span><span style="FONT-FAMILY: 宋体">的结果集。</span></font>
<p><font size=3><span style="FONT-FAMILY: 宋体">这里的</span><span lang=EN-US><font face="Times New Roman">forward-only</font></span><span style="FONT-FAMILY: 宋体">表示数据只能够向前，如果我们访问了一条数据后想要再次访问这条数据就必须重新开始。</span></font>
<p><font size=3><span lang=EN-US><font face="Times New Roman">Read-only</font></span><span style="FONT-FAMILY: 宋体">表示只读，不能够对结果集进行操作。</span></font>
<p><font size=3><span lang=EN-US><font face="Times New Roman">Connected stream</font></span><span style="FONT-FAMILY: 宋体">表示</span><span lang=EN-US><font face="Times New Roman">DataReader</font></span><span style="FONT-FAMILY: 宋体">对象是面向流连接的。所谓的流可以把它看作是管道，这边放进去东西那边就可以得到，实际上</span><span lang=EN-US><font face="Times New Roman">TCP</font></span><span style="FONT-FAMILY: 宋体">协议就是面向连接的流协议。</span></font>
<p><font size=3><span style="FONT-FAMILY: 宋体">不同于其他的三种对象，</span><span lang=EN-US><font face="Times New Roman">DataReader</font></span><span style="FONT-FAMILY: 宋体">不能够被用户直接创建，必须也只能由</span><span lang=EN-US><font face="Times New Roman">ExecuteReader</font></span><span style="FONT-FAMILY: 宋体">返回。</span></font>
<p><font size=3><span lang=EN-US><font face="Times New Roman">SqlCommand.ExecuteReader</font></span><span style="FONT-FAMILY: 宋体">返回</span><span lang=EN-US><font face="Times New Roman">SqlDataReader</font></span><span style="FONT-FAMILY: 宋体">。</span></font>
<p><font size=3><span style="FONT-FAMILY: 宋体">同理，</span><span lang=EN-US><font face="Times New Roman">OleDbCommand.ExecuteReader</font></span><span style="FONT-FAMILY: 宋体">返回</span><span lang=EN-US><font face="Times New Roman">OleDbDataReader</font></span></font>
<p><font size=3><span style="FONT-FAMILY: 宋体">需要注意的是，</span><span lang=EN-US><font face="Times New Roman">DataReader</font></span><span style="FONT-FAMILY: 宋体">对应用程序提供行级访问（每次只能访问数据的一行），当你需要多行的时候就需要多次的访问这个对象。这样做的好处就是内存中永远只需要保留一行的数据，缺点就是每次访问都要开启</span><span lang=EN-US><font face="Times New Roman">Connect</font></span><span style="FONT-FAMILY: 宋体">的连接。</span></font>
<p><span lang=EN-US><font face="Times New Roman" size=3>&nbsp;</font></span>
<p><font size=3><span lang=EN-US><font face="Times New Roman">DataAdapter</font></span><span style="FONT-FAMILY: 宋体">对象</span></font>
<p><font size=3><span lang=EN-US><font face="Times New Roman">DataAdapter</font></span><span style="FONT-FAMILY: 宋体">对象是</span><span lang=EN-US><font face="Times New Roman">ADO.NET</font></span><span style="FONT-FAMILY: 宋体">数据访问的核心。实际上它是数据集与数据库的中间层。</span><span lang=EN-US><font face="Times New Roman">DataAdapter</font></span><span style="FONT-FAMILY: 宋体">可以使用</span><span lang=EN-US><font face="Times New Roman">Fill</font></span><span style="FONT-FAMILY: 宋体">方法来为</span><span lang=EN-US><font face="Times New Roman">DataTable</font></span><span style="FONT-FAMILY: 宋体">或者</span><span lang=EN-US><font face="Times New Roman">DataSet</font></span><span style="FONT-FAMILY: 宋体">填充数据。然后当内存操作完成后</span><span lang=EN-US><font face="Times New Roman">DataAdapter</font></span><span style="FONT-FAMILY: 宋体">可以确认之前的操作从而对真正存于数据库上的数据进行修改。</span></font>
<p><font size=3><span lang=EN-US><font face="Times New Roman">DataAdapter</font></span><span style="FONT-FAMILY: 宋体">包含四种属性用来代表不同的数据库命令：</span></font>
<p><font size=3><span lang=EN-US><font face="Times New Roman">SelectCommand</font></span><span style="FONT-FAMILY: 宋体">用来查询数据</span></font>
<p><font size=3><span lang=EN-US><font face="Times New Roman">InsertCommand</font></span><span style="FONT-FAMILY: 宋体">用来插入数据</span></font>
<p><font size=3><span lang=EN-US><font face="Times New Roman">DeleteCommand</font></span><span style="FONT-FAMILY: 宋体">用来删除数据</span></font>
<p><font size=3><span lang=EN-US><font face="Times New Roman">UpdateCommand</font></span><span style="FONT-FAMILY: 宋体">用来更新数据</span></font><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">当</span><span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'">Update</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">方法被调用后，数据集中的数据被更改然后拷贝回数据库，紧接着使用</span><span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: 'Times New Roman'">InsertCommand, DeleteCommand, UpdateCommand</span><span style="FONT-SIZE: 10.5pt; FONT-FAMILY: 宋体">中合适一个来进行数据更新。</span></p>
</div>
</div>
<img src ="http://www.blogjava.net/davidgw/aggbug/132342.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/davidgw/" target="_blank">Picasso</a> 2007-07-25 16:46 <a href="http://www.blogjava.net/davidgw/archive/2007/07/25/132342.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>