欢迎光临
我们一直在努力

ADO.NET存取数据库-ASP教程,数据库相关

建站超值云服务器,限时71元/月

以下是本csdn社区的michael_jackson(麦克尔★杰克逊)的贴子(删除了c#部分),放这里我想对大家更有用!

可以使用 ado.net datareader 从数据库中检索只读、只进的数据流。因为每次在内存中始终只有一行,所以使用 datareader 可提高应用程序的性能并减少系统开销。

当创建 command 对象的实例后,可调用 command.executereader 从数据源中检索行,从而创建一个 datareader,如以下示例所示。

[visual basic]

dim myreader as sqldatareader = mycommand.executereader()

使用 datareader 对象的 read 方法可从查询结果中获取行。通过向 datareader 传递列的名称或序号引用,可以访问返回行的每一列。不过,为了实现最佳性能,datareader 提供了一系列方法,它们将使您能够访问其本机数据类型(getdatetime、getdouble、getguid、getint32 等)形式的列值。有关类型化访问器方法的列表,请参阅 oledbdatareader 类和 sqldatareader 类。如果在基础数据类型未知时使用类型化访问器方法,将减少在检索列值时所需的类型转换量。

以下代码示例循环访问一个 datareader 对象,并从每个行中返回两个列。

[visual basic]

do while myreader.read()

console.writeline(vbtab & "{0}" & vbtab & "{1}", myreader.getint32(0), myreader.getstring(1))

loop

myreader.close()

datareader 提供未缓冲的数据流,该数据流使过程逻辑可以有效地按顺序处理从数据源中返回的结果。由于数据不在内存中缓存,所以在检索大量数据时,datareader 是一种适合的选择。

关闭 datareader

每次使用完 datareader 对象后都应调用 close 方法。

如果 command 包含输出参数或返回值,那么在 datareader 关闭之前,将无法访问这些输出参数或返回值。

请注意,当 datareader 打开时,该 datareader 将以独占方式使用 connection。在初始 datareader 关闭之前,将无法对 connection 执行任何命令(包括创建另一个 datareader)。

多个结果集

如果返回的是多个结果集,datareader 会提供 nextresult 方法来按顺序循环访问这些结果集,如以下代码示例所示。

[visual basic]

dim mycmd as sqlcommand = new sqlcommand("select categoryid, categoryname from categories;" & _

"select employeeid, lastname from employees", nwindconn)

nwindconn.open()

dim myreader as sqldatareader = mycmd.executereader()

dim fnextresult as boolean = true

do until not fnextresult

console.writeline(vbtab & myreader.getname(0) & vbtab & myreader.getname(1))

do while myreader.read()

console.writeline(vbtab & myreader.getint32(0) & vbtab & myreader.getstring(1))

loop

fnextresult = myreader.nextresult()

loop

myreader.close()

nwindconn.close()

从 datareader 中获取架构信息

当 datareader 打开时,可以使用 getschematable 方法检索有关当前结果集的架构信息。getschematable 将返回一个填充了行和列的 datatable 对象,这些行和列包含当前结果集的架构信息。对于结果集的每一列,datatable 都将包含一行。架构表行的每一列都映射到在结果集中返回的列的属性,其中 columnname 是属性的名称,而列的值为属性的值。以下代码示例为 datareader 写出架构信息。

[visual basic]

dim schematable as datatable = myreader.getschematable()

dim myrow as datarow

dim mycol as datacolumn

for each myrow in schematable.rows

for each mycol in schematable.columns

console.writeline(mycol.columnname & " = " & myrow(mycol).tostring())

next

console.writeline()

next

ole db 章节

分层行集或章节(ole db 类型 dbtype_hchapter、ado 类型 adchapter)可以使用 oledbdatareader 来检索。当以 datareader 的形式返回包含某章节的查询时,该章节将以此 datareader 中列的形式返回,并公开为 datareader 对象。

ado.net dataset 也可用于通过表间的父子关系来表示分层行集。有关的更多信息,请参阅创建和使用 dataset。

以下代码示例使用 msdatashape 提供程序来为客户列表中的每个客户生成订单的章节列。

[visual basic]

dim nwindconn as oledbconnection = new oledbconnection("provider=msdatashape;data provider=sqloledb;" & _

"data source=localhost;integrated security=sspi;initial catalog=northwind")

dim custcmd as oledbcommand = new oledbcommand("shape {select customerid, companyname from customers} " & _

" append ({select customerid, orderid from orders} as customerorders " & _

" relate customerid to customerid)", nwindconn)

nwindconn.open()

dim custreader as oledbdatareader = custcmd.executereader()

dim orderreader as oledbdatareader

do while custreader.read()

console.writeline("orders for " & custreader.getstring(1)) custreader.getstring(1) = companyname

orderreader = custreader.getvalue(2) custreader.getvalue(2) = orders chapter as datareader

do while orderreader.read()

console.writeline(vbtab & orderreader.getint32(1)) orderreader.getint32(1) = orderid

loop

orderreader.close()

loop

custreader.close()

nwindconn.close()

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » ADO.NET存取数据库-ASP教程,数据库相关
分享到: 更多 (0)

相关推荐

  • 暂无文章