http://www.dotblogs.com.tw/mis2000lab/archive/2008/04/24/3446.aspx
很多时候,用手写的方式,以 DataReader来列出数据,又快又好用。
相信大家都用的到。
以下是我在微软SDK文件找到的模板,写得很标准~
这里提供两个版本,第一个版本是采用「 Try....Catch....Finally」等侦错过程(VB.NET语法解说),抄起来放在手边一定用的到。
不瞒您说,我衷心推荐微软这份官方文件(资料和ADO.NET),是介绍最好、最浅显的文章了!
'=========资料来源:微软SDK文件=========
ADO.NET:从 SQL Server 撷取资料
http://cht.gotdotnet.com/quickstart/howto/doc/adoplus/sqldtreader.aspx
范例 Northwind 数据库的 Employees 数据表
'=================================
'--完全手写程序,HTML画面上,不需要拉进任何组件
Dimdr as SqlDataReader
DimConn as SqlConnection = New SqlConnection("数据库的联机字符串,请自己修改")
Dimcmd as SqlCommand = New SqlCommand("SELECT* from 资料表", mySqlConnection)
try
Conn.Open()
dr = cmd.ExecuteReader()
do while (dr.Read())
'--把资料展现到画面上。这一区请您请自由发挥
'--------------------------------------------------------
loop
catch e as Exception
Response.Write(e.ToString())
finally
if Not (dr is Nothing) ' --关闭 DataReader
cmd.Cancel() '--我自己补上的,原因在下面有讲。
dr.Close()
end if
if (Conn.State = ConnectionState.Open) ' --关闭 DB的联机
Conn.Close()
end if
end try
注:上面的范例,我有改成C#语法,请看-- [C#]把「ASP.NET专题实务」一书的范例,从 VB语法转成C#
====================================================================
第二个版本是采用「Using....End Using」(VB.NET语法解说),抄起来放在手边一定用的到。根据微软文件的说法,End Using的用法,是结束 Using 区块的定义,并处置 (Dispose) 它控制的所有资源。
DimqueryString As String= "SELECT * From 资料表;"
Using Conn As New SqlConnection("数据库的联机字符串")
Dim my_command AsNew SqlCommand(queryString, Conn)
Conn.Open()
'-- 数据库联机!但后面「不」需要写关闭的动作(Conn.Close()),因为Using....EndUsing 会自己处理
Dim reader As SqlDataReader= my_command.ExecuteReader()
While reader.Read()
'-- 自己写程序,展现字段的值。这一区请您请自由发挥
'---------------------------------------------------------------
End While
'-- 关闭DataReader
my_Command.Cancel() '--我自己补上的,原因在下面有讲。
reader.Close()
End Using
使用Using来写程序的人,最好看看这篇文章的解释:http://forums.microsoft.com/MSDN-CHT/ShowPost.aspx?PostID=1417995&SiteID=14
不要以为微软的文件与范例,一定就毫无缺点了。看看下面的说明,我们还是可以进一步最佳化!
- 黑暗执行绪的BLOG----「当心SqlDataReader.Close时的额外数据传输量」
- 根据MSDN的说法:http://msdn.microsoft.com/zh-tw/library/system.data.common.dbdatareader.dispose.aspx
DbDataReader.Dispose() 方法 -- 释放 DbDataReader所使用的资源,并呼叫 .Close()方法。
务必先关闭 SqlCommand之后(执行 .Cancel()方法),再来关闭 DataReader,请看:http://msdn.microsoft.com/zh-tw/library/system.data.sqlclient.sqldatareader.close.aspx
资料来源:微软MSDN网站--IDataReader 接口 http://msdn2.microsoft.com/zh-tw/library/system.data.idatareader.aspx
=======================================================================================
如果上面的 DataReader,您要使用「参数」来作,以避免初步的SQL Injection(资料隐码)攻击
请稍作修改如下:
'**** 重 点!*************************************************
'****改用 SqlCommand的 @参数来作
Dim cmdAs New SqlCommand("select * from test where id = @id", Conn)
cmd.Parameters.Add("@id", SqlDbType.Int)
cmd.Parameters("@id").Value = CType(Request("id"), Integer)
'== 参考网址 http://msdn.microsoft.com/zh-tw/library/system.data.sqlclient.sqlcommand.parameters.aspx
'************************************************************
=======================================================================================
2010/5/19补充: [ADO.NET] DataReader的「Inline Code」范例 for ASP.NET
2010/6/18补充: [转贴]ADO.NET -- DataReader性能优化 (作者:WizardWu)
用本文的范例,稍加修改,就能做出底下三个功能:
- [习题]ADO.NET #7,避免相同数据 重复输入(重复新增)
- [习题]ADO.NET #8,文章(产品)的浏览次数 / 点阅数 / 点击次数,怎么作?
- Master-Detail的范例,是网页最常使用的必备功能!
举例来说:我架设一个购物网站,「首页」展现所有物品。
当我 点选任何一个物品,就能看到这东西的明细内容&照片&价格.....等等。这就是 Master-Detail的功能。
我提供最简单的作法,不套用任何Web控件,请看看这个范例(共有两支程序,第一个Master(首页),第二个Detail(物品明细))。均是以Visual Studio 2005/2008/2010开发的后置程序代码(Code Behind)。
master版,http://www.dotblogs.com.tw/mis2000lab/archive/2008/04/24/3444.aspx
detail版,http://www.dotblogs.com.tw/mis2000lab/archive/2008/04/24/3445.aspx
本系列共有下面文章:
- 初探ADO.NET #1,程序与数据库互动的四大步骤
- 初探ADO.NET #2,DataReader 与 DataSet(资料集)
- ADO.NET #3 (GridView + SqlDataSource)完全手写、后置程序代码! (难度很高,初学者请略过)
- ADO.NET #4(改),自己设定输入画面,让SqlDataSource帮我们完成「新增」一笔数据
- ADO.NET #5,自己设定画面,让SqlDataSource帮我们捞(呈现)数据
- [习题]ADO.NET #6, DataSet如何新增一笔数据?
- [习题]ADO.NET #7,避免相同数据 重复输入(重复新增)
- [习题]ADO.NET #8,文章(产品)的浏览次数 / 点阅数 / 点击次数,怎么作?
- ......文章 仍在增加中......
范例:
此范例已经收录在书籍里面出版了。请看: ASP.NET案例精编 / 清华大学出版社
....................................................................................................寄信给我 mis2000lab (at)雅虎.com.台湾 ........
ASP.NET案例精编(清华大学出版社 / 作者MIS2000Lab)
http://www.china-pub.com/46063
2009/5/15上市
市场价 :¥59.80 RMB(人民幣)