您的位置:首页 > 职场人生

ADO.NET DataReader对象简介

2006-03-30 08:43 405 查看
ADO.NET DataReader对象简介
作者: zyf0808 发表日期: 2006-03-30 08:43 文章属性: 原创 复制链接
[align=left]DataReader 对象[/align]
[align=left]如果我们利用Command 对象所执行的命令是有传回数据的Select 叙述,此时Command 对象[/align]
[align=left]会自动产生一个DataReader 对象。DataReader 是我们写ASP.NET 网页的好朋友,因为我们[/align]
[align=left]常常会将数据源的数据取出后显示给使用者,这时候我们就可以使用DataReader 对象。我们就[/align]
[align=left]可以在执行Execute 方法时传入一个DataReader 型态的变量来接收。DataReader 对象很单纯[/align]
[align=left]的一次只读取一笔纪录,而且只能只读,所以效率很好而且可以降低网络负载。由于Command[/align]
[align=left]对象自动会产生DataReader 对象,所以我们只要宣告一个指到DataReader 对象的变量来接收[/align]
[align=left]即可,并不需要使用New 运算子来产生;另外要注意的是 DataReader 对象只能配合Command对象使用 ,而且DataReader 对象在操作的时候Connection 对象是保持联机的状态。[/align]
[align=left] [/align]
[align=left]下列程序代码片段传回可以读取Members 数据表中所有的纪录的DataReader 对象:[/align]
[align=left]Dim cmA As ADOCommand= New [/align]
[align=left]ADOCommand("命令字符串","Provider=Microsoft.Jet.OLEDB.4.0;"[/align]
[align=left]& "Data Source=C:\Inetpub\wwwroot\cr\ch05\MyWeb.mdb")[/align]
[align=left]Dim drA as ADODataReader[/align]
[align=left]cmA.ActiveConnection.Open()[/align]
[align=left]cmA.CommandText="Select * From Members"[/align]
[align=left]cmA.Execute(drA)[/align]
[align=left]当我们将DataReader 对象传入Execute 方法后,就可以使用DataReader 对象来读取数据了。[/align]
[align=left]以下为DataReader 常用的属性:[/align]
[align=left] [/align]
[align=left]属性 说明[/align]
[align=left]FieldCount 只读,表示纪录中有多少字段[/align]
[align=left]HasMoreResults 表示是否有多个结果,本属性和SQL Script 搭配使用。[/align]
[align=left]HasMoreRows 只读,表示是否还有资料未读取[/align]
[align=left]IsClosed 只读,表示DataReader 是否关闭[/align]
[align=left]Item 只读,本对象是集合对象,以键值(Key)或索引值(Index)的方式取得纪录中某个字段的数据[/align]
[align=left]RowFetchCount 用来设定一次取回多少笔记录,预设为值为1 笔[/align]
[align=left] [/align]
[align=left]了解DataReader 对象有什么属性后,我们就可以利用DataReader 所提供的方法来取回资料了。[/align]
[align=left]下表为DataReader 常用的方法:[/align]
[align=left]方法 说明[/align]
[align=left]Close 将DataReader 对象关闭[/align]
[align=left]GetDataTypeName 取得指定字段的数据型态[/align]
[align=left]GetName 取得指定字段的字段名称[/align]
[align=left]GetOrdinal 取得指定字段名称在纪录中的顺序[/align]
[align=left]GetValue 取得指定字段的数据[/align]
[align=left]GetValues 取得全部字段的数据[/align]
[align=left]IsNull 用来判断字段内是否为Null 值[/align]
[align=left]NextResult 用来和SQL Script 搭配使用,表示取得下一个结果[/align]
[align=left]Read 让DataReader 读取下一笔记录,如果有读到数据则传回True,若没有纪录则传回False[/align]
[align=left]Read 方法[/align]
[align=left]在取得Command 对象执行Execute 方法所产生的DataReader 对象后,我们就可以将纪录中[/align]
[align=left]的数据取出使用。DataReader 一开始并没有取回任何数据,所以我们要先使用Read 方法让[/align]
[align=left]DataReader 先读取一笔数据回来。如果DataReader 对象成功取得数据则传回True,若没有取[/align]
[align=left]得资料则传回False。这样一来我们就可以利用Do While...Loop 循环来取得所有的数据,如下[/align]
[align=left]程序所示:[/align]
[align=left]Do While drA.Read()[/align]
[align=left]Response.Write("User Id: " & drA.Item("UserId") & ", Password: ")[/align]
[align=left]Response.Write(drA.Item(1) & "<br>")[/align]
[align=left]Loop[/align]
[align=left]上述程序代码片段利用Read 方法将数据取回后,再利用Item 集合以键值(Key)的方式取出[/align]
[align=left]UserId 字段的数据,以及利用索引值(Index)取得使用者UserPwd 字段的数据;索引值是由0[/align]
[align=left]开始计数,故第一个字段的索引值为0,依此类推。当数据读取完毕后Read 方法会传回False,[/align]
[align=left]所以就跳出循环。[/align]
[align=left]GetValue 方法[/align]
[align=left]我们也可以使用GetValue 方法取得指定字段内的记录,这个方法和Item 属性很像;不过[/align]
[align=left]GetValue 方法的参数只接收索引值,并不接收键值为参数。我们改用GetValue 取得所有字段[/align]
[align=left]内的数据,如下程序所示:[/align]
[align=left]Do While drA.Read()[/align]
[align=left]Response.Write("User Id: " & drA.GetValue(0) & ", Password: ")[/align]
[align=left]Response.Write(drA.GetValue(1) & "<br>")[/align]
[align=left]Loop[/align]
[align=left]GetValues 方法[/align]
[align=left]GetValues 方法是取得字段内所有的记录。这个方法接收一个数组,并且将所有字段填入数组中,如下程序所示:[/align]
[align=left]Dim arValue(drA.FieldCount)[/align]
[align=left]drA.Read() '先抓取一笔记录[/align]
[align=left]drA.GetValues(arValue) '将记录填入数组中[/align]
[align=left]For shtI=0 To drA.FieldCount - 1[/align]
[align=left]Response.Write(drA.GetValue(shtI) & "<br>")[/align]
[align=left]Next[/align]
[align=left]因为索引值是由零开始算,所以我们在使用For...Next 循环的时候记得将结束值减一。[/align]
[align=left] [/align]
[align=left]GetDataTypeName 以及GetName 方法[/align]
[align=left]GetDataTypeName 方法可以传回指定字段的数据型态,而GetName 方法则是传回指定字段的[/align]
[align=left]字段名称(就是键值)。这两个方法一样以键值或是索引的方式来指定字段。下列程序代码片段[/align]
[align=left]显示每个字段的名称以及数据型态:[/align]
[align=left]Dim shtI As Short[/align]
[align=left]For shtI = 0 To drA.FieldCount - 1[/align]
[align=left]Response.Write("索引值为 " & shtI.ToString & " 的字段, 名称为: " & _[/align]
[align=left]DrA.GetName(shtI) & ", 数据型态: " & DrA.GetDataTypeName(shtI) &[/align]
[align=left]"<br>")[/align]
[align=left]Next[/align]
[align=left]Close 方法[/align]
[align=left]Close 方法可以关闭DataReader 对象和数据源之间的联机。除非把DataReader 对象关闭,否[/align]
[align=left]则当DataReader 对象尚未关闭时,DataReader 所使用的Connection 对象就无法执行其它的[/align]
[align=left]动作。[/align]
[align=left] [/align]
[align=left] [/align]
[align=left]综合范例[/align]
[align=left]下列范例在文字输入盒内输入数据表名称,按下确定后程序会将数据表的索引、字段名称、字段[/align]
[align=left]型态以及字段内容全部显示出来:[/align]
[align=left]<%@Import Namespace=System.Data.ADO%>[/align]
[align=left]<%@Import Namespace=System.Data%>[/align]
[align=left]<Html>[/align]
[align=left]<Form Id="F1" Runat="Server">[/align]
[align=left]<Input Id="Text1" Runat="Server" Value="Members"/>[/align]
[align=left]<Button Id="Button1" OnServerClick="Button1_Click"[/align]
[align=left]Runat="Server">执行[/align]
[align=left]</Button>[/align]
[align=left]</Form>[/align]
[align=left]<Script Language="VB" Runat="Server">[/align]
[align=left]Sub Button1_Click(sender As Object, E As EventArgs)[/align]
[align=left]Dim cmA As ADOCommand=New _[/align]
[align=left]ADOCommand("","Provider=Microsoft.Jet.OLEDB.4.0;" & _[/align]
[align=left]"Data Source=C:\Inetpub\wwwroot\cr\ch05\MyWeb.mdb")[/align]
[align=left]Dim drA As ADODataReader[/align]
[align=left]Dim shtI As Short[/align]
[align=left]cmA.ActiveConnection.Open()[/align]
[align=left]cmA.CommandType=CommandType.TableDirect[/align]
[align=left]cmA.CommandText=Text1.Value[/align]
[align=left]cmA.Execute(drA)[/align]
[align=left]For shtI=0 To drA.FieldCount - 1[/align]
[align=left]Response.Write("字段索引值: " & shtI.ToString & _[/align]
[align=left]" 字段名称: " & drA.GetName(shtI) & _[/align]
[align=left]" 数据型态: " & drA.GetDataTypeName(shtI) & "<br>")[/align]
[align=left]Next[/align]
[align=left]Do While drA.Read()[/align]
[align=left]For shtI=0 To drA.FieldCount-1[/align]
[align=left]Response.Write(drA.GetValue(shtI) & " / ")[/align]
[align=left]Next[/align]
[align=left]Response.Write("<br>")[/align]
[align=left]Loop[/align]
[align=left]End Sub[/align]
[align=left]</SCRIPT>[/align]
[align=left]</Html>[/align]
[align=left] [/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  .net 职场 休闲 ADO