电信主站 网通分站
购买流程 付款方式 常见问题 在线提问 续租服务 购物车
用户名: 密 码: 忘记密码?
首 页
域名注册
虚拟主机
双线主机
服务器租用
VPS主机
企业邮局
代理专区
客服中心
虚拟主机行业资讯 虚拟主机评测对比 互联网最新动态 技术学院 站长资讯 在线教程 网站运营
搜索优化 服务器 网络编程 图形图象 站长之家 网页制作 操作系统
冲浪宝典 软件教学 视频通信 办公软件 邮件系统 网络安全 认证考试
您当前位置:西部数码->资讯中心-> 在线教程-> 数据库
ADO.NET数据库实例教程(一)-.NET教程,数据库应用
作者:网友供稿 点击:40
  西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!虚拟主机可在线rar解压,自动数据恢复设置虚拟目录等.虚拟主机免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金!
文章页数:[1] 
ado.net数据库编程比较复杂,名目繁多的类、对象、属性、方法让每一个编程者都感觉恼火。本文旨在介绍asp.net beta2数据库编程的主要内容,帮助编程者最快的了解ado.net数据库编程的精髓。

  一、 managed providers

  如果你是初学者,可能你会问,什么是"managed providers"?

  managed providers提供简单的方法连接和访问数据库,有点类似于数据库连接,当然又比它强的多。managed providers提供oledb和sql server两种编程接口。因为sql server是微软自己的产品,因此,专门提供了一个针对sql server的接口,使用这个接口访问sql server的效率应该比使用oledb强。

  namespaces

  本文所有的例子程序都需要使用以下namespaces:

<%@ import namespace="system.data" %>
<%@ import namespace="system.data.oledb" %>

  connection

  为了连接数据库,必须使用oledbconnection:

dim objconn as new oledbconnection
("provider=microsoft.jet.oledb.4.0; data source=e:\sff\site\db\users.mdb")

  当然,你也可以将具体的连接方法作为变量使用,在连接数据库以后,必须打开数据库:

objconn.open()

  这样,就可以使用数据库了,一般在最后,我们都要求关闭数据库连接:

objconn.close()
objconn=nothing

  command

  连接数据库以后,就可以发送命令对数据库进行操作了,oledbcommand允许发送命令对数据库进行操作。根据发送的sql语句,我们可以对数据库进行几乎所有操作。

dim objcmd as new oledbcommand("select * from users", objconn)

  以上语句建立command,根据习惯不同,也可以使用以下方法:

dim objcmd as new oledbcommand()
objcmd.connection = objconn
objcmd.commandtext = "select * from users" 

  还可以这样:

dim objcmd as new oledbcommand(sql string, connection string)

  仔细观察上面的语句,我们发现在定义oledbcommand时,可以同时使用数据库连接oledbconnection和数据库连接语句。以上代码并没有执行sql语句,现在我们来看到底怎样执行:

  executenonquery

  当执行没有返回数据的操作的时候,我们可以使用以上方法,比如插入数据、更新数据等操作,具体这样执行:

objcmd.executenoquery

  executereader

  在需要一个data reader的时候,我们可以使用以上方法,具体这样执行:

dim objrd as oledbdatareader
objrd = objcmd.exeutereader

  executescalar

  使用executescalar方法来取得一个单个地返回数据,比如对数据的统计。

  data reader

  oledbreader是专门用来读取数据的对象,这个对象除了读数据以外,不能做其他任何数据库操作。尽管比较简单,但是在用来浏览数据的时候效率是非常高的。

dim objreader as oledbdatareader
objreader = objcmd.executereader
while objreader.read
response.write(objreader.getstring(0) & "<br>")
end while

  以上语句读取command的返回结果的第一个字段,这个字段是字符型数据。我们可以使用其他方法取得各种类型的数据:

    getboolean(x)

    getbyte(x)

    getbytes(x)

    getchar(x)

    getchars(x)

    getdatatypename(x) -取得数据类型

    getdatetime(x)

    getdecimal(x)

    getdefaultstream(x)

    getdouble(x)

    getfieldtype(x)

    getfloat(x)

    getguid(x)

    getint16(x)

    getint32(x)

    getint64(x)

    getname(x) - 取得字段名

    getordinal(name) -根据字段名取得字段序号

    getstring(x)

    gettimespan(x)

    getvalue(x)

    getvalues(values())

  以上方法都是command返回数据。

  data adapter

  oledbdataadapter取得数据并且数据与dataset之间建一座桥梁,可以这样使用:

dim objadapter as new oledbdataadapter("select * from users", objconn)

  实现方法有点类似于oledbcommand。oledbadapter可以填充dataset,也可以修改数据然后提交以实现对具体数据的修改:

dim ds as dataset = new dataset()
objadapter.fill(ds, "users")

  以上语句实现将sql语句取得的users表的数据填充到dataset。

  mappings

  mappings可以实现对dataset的列取别名:

objadapter.tablemappings.add("adbtable", "users")
with objadapter.tablemappings(0).columnmappings
.add("pid", "id")
.add("lastname", "lname")
.add("streetaddress", "addy")
end with
objadapter.fill(ds)

  当使用了以上代码以后,就可以用ds.tables("users")来代替ds.tables("adbtable")了。

  command builder

  在下一章我们可以看到command builder的具体使用和强大功能。

  练习:

  如果你能理解以下代码,你就可以看下一章的内容了:

<%@ import namespace="system.data" %>
<%@ import namespace="system.data.oledb" %>
<script language="vb" runat="server">
sub page_load(sender as object, e as eventargs)

dim objconn as new oledbconnection("provider=microsoft.jet.oledb.4.0; data source=e:\sff\site\db\users.mdb")
objconn.open()

dim ds as dataset = new dataset()
dim objadapter as new oledbdataadapter("select * from users", objconn)
dim objcmdbld as new oledbcommandbuilder(objadapter)

objadapter.fill(ds, "users")

end sub
</script>

  二、 data set

  本章将介绍dataset对象,dataset对象包含内容很多,我们基本上都将涉及,包括datatables、datarows等。

  什么是dataset

  回头看看asp,我们知道当查询数据的时候,返回的数据是放在recordset中的,recordset只能保存返回的一个表的数据,而且它很不灵活。

  dataset在recordset上增加了很多功能,并且,它可以保存多个返回的数据表结果。

  dataset被分解为很多部分比如datatables和datarows,可以使用它们创建一个dataset而不一定要连接到一个具体的数据库。当然,dataset本身就是离线数据,所有的数据都可以离线使用而不必一直连接到数据库,只有需要对数据库进行编辑的时候才需要连接到数据库。

  实践

dim ds1 as new dataset()
dim dtable as new datatable("people")
with dtable.columns
.add("fname", system.type.gettype("system.string"))
.add("lname", system.type.gettype("system.string"))
.add("uid", system.type.gettype("system.int32"))
end with
dtable.columns("uid").autoincrement = true
ds1.tables.add(dtable)

dim pkey() as datacolumn = {ds1.tables("people").columns("uid")}
ds1.tables("people").primarykey = pkey

  以上语句稍微有点复杂,我们来看看:

  前半部分我们建立了一个dataset和一个叫people的datatable,然后,我们为这个datatable加入了三个列并将"uid"列设为自动递增。最后,将这个datatable加入到了dataset。

  第二部分我们现在不需要理解,只要知道定义了主键就可以了。

  datatables

  datatable就是一个数据表,我们可以对这个表进行如:增加数据、修改数据等操作。我们也可以通过dataset建立一个datatable:

dim dtable as datatable = ds1.tables("people")

  这样,将dataset的表people的结构和数据拷贝到了datatable中,尽管它是无连接的,但是仍然可以通过修改这个dataset来更新dataset表,因此,如果我们在dtable中增加一列并且接受改变就以实现对dataset的修改:

dim row as datarow = dtable.newrow()
row(0) = "philip"
row(1) = "quinn"
dtable.rows.add(row)
dtable.acceptchanges

  这样我们就建立了一个新的datarow,这和用dtable.newrow()建立一个新的数据列一样,我们还可以给这个列取名了fname。

  因为以上的datatable来自dataset,如果我们使用dtable.acceptchanges方法更新datatable,dataset也会被更新:

<%@ import namespace="system.data" %>
<script language="vb" runat="server">
sub page_load(sender as object, e as eventargs)
dim ds1 as new dataset()
dim dtable as new datatable("people")
with dtable.columns
.add("fname", system.type.gettype("system.string"))
.add("lname", system.type.gettype("system.string"))
.add("uid", system.type.gettype("system.int32"))
end with

dtable.columns("uid").autoincrement = true
ds1.tables.add(dtable)

dim dtable2 as datatable = ds1.tables("people")

dim row as datarow = dtable2.newrow()
row(0) = "philip"
row(1) = "quinn"
dtable2.rows.add(row)
dtable2.acceptchanges

response.write(ds1.tables("people").rows(0)("fname").tostring)
end sub
</script>

  以上代码将显示"philip",现在我们来看看具体过程:

  1、 建立一个dataset和一个叫"people"的datatable;

  2、 增加三个数据列并且设置它们的数据属性;

  3、 将它们加入到dataset;

  4、 建立另外一个datatable,这个datatable是刚才建立的那个的拷贝;

  5、 用datatable建立新的datarow并加入数据;

  6、 接受数据改变同时更新了dataset;

  7、 显示第一个数据列;

  datarows

  datarow是datatable的数据列,刚才我们已经看到,我们可以使用datatable的以下方法建立一个新的datarow:

ds1.tables("people").rows(0)("fname") = "phil"

  以上语句中,ds1.tables("people")选择表"people",.rows(0)选择表的第一行,("fname")选择表的字段为"fname"。

  datarows是数据列的集合,通过以下语句取得:

dim drow as datarowcollection = ds1.tables("people").rows

  对于datarows,我们基本上不能做太多。如果针对一个具体的数据列,我们可以这样:

dim drow2 as datarow = drow.item(0)

  需要修改这个列的数据,可以这样:

drow2(0) = "philip"
drow2.acceptchanges

  可能说了那么多,我们都觉得比较复杂,我们来看看这个图示:

 

  通过这个图示我们很容易就理清了dataset、datatable、datarowcollection、datarows、datacolumn和datacolumncollection之间的相互关系。


  三、 dataset的使用

  在第一章我们介绍了数据连接、执行查询等内容,第二章我们介绍了dataset的方方面面,这一章我们将具体使用dataset。

dataset <-> data source

  dataset和data source通过dataadapter进行联系,当dataset取得数据库数据以后,就和数据库断开连接,针对数据作的所有数据修改在没有提交以前都在dataset里面保存。

  数据修改

  我们将通过一个小的举例来说明数据怎样被修改和提交。

  这是数据结构(access设计)

field name type fname lname id
fname text philip quinn 1
lname text joesph payne 2
id autonumber douglas adams 3
    michael okuda 4

   举例一:

  我们将一段一段的看程序代码:

<%@ page language="vb" %>

<%@ import namespace="system.data" %>
<%@ import namespace="system.data.oledb" %>
<script language="vb" runat="server">
sub page_load(sender as object, e as eventargs)

  以上代码导入namespace同时说明编程语言为vb;

dim objconn as new oledbconnection("provider=microsoft.jet.oledb.4.0; data source=e:\sff\site\db\test.mdb")
objconn.open()

dim ds as dataset = new dataset()
dim objadapter as new oledbdataadapter("select * from users", objconn)
dim objcmdbld as new oledbcommandbuilder(objadapter)

objadapter.fill(ds, "users")

  以上代码建立了connection、dataadapter和commandbuilder,并且填充了dataset。我们必须注意以下几点:

  一、 dataadapter是数据和dataset之间的桥梁;

  二、 commandbuilder建sql语句来执行;

dim drow as datarow

  以上语句声明一个datarow;

drow = ds.tables("users").newrow()

drow(0) = "gene"
drow(1) = "rodenberry"
ds.tables("users").rows.add(drow)

drow = ds.tables("users").newrow()

drow(0) = "maxwell"
drow(1) = "stewart"
ds.tables("users").rows.add(drow)

  以上代码为dataset增加一个新的列;

objadapter.update(ds, "users")

  以上代码将更新提交到数据库;

end sub
</script>

  现在看看数据库,会发现已经多了两列。

  另外一个举例

  我们可以看一个完整的举例:

<%@ page language="vb" debug="true" %>

<%@ import namespace="system.data" %>
<%@ import namespace="system.data.oledb" %>
<script language="vb" runat="server">
sub page_load(sender as object, e as eventargs)

dim objconn as new oledbconnection("provider=microsoft.jet.oledb.4.0; data source=e:\sff\site\db\test.mdb")
objconn.open()

dim ds as dataset = new dataset()
dim objadapter as new oledbdataadapter("select * from users", objconn)
dim objcmdbld as new oledbcommandbuilder(objadapter)

objadapter.fill(ds, "users")

dim drow as datarow

drow = ds.tables("users").rows(1)

drow(0) = "joseph"

ds.tables("users").rows(0).acceptchanges

objadapter.update(ds, "users")

end sub
</script>

  总结:

  以上我们知道了怎样更新dataset的数据,可能那些并不是特别实用,下一章我们将涉及到用较好的方式显示数据和通过textbox修改数据。


文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!
相关主题
文章页数:[1] 
Google
热门文章
·数据库开发个人总结(ADO.NET小结)-.NET教程,数据库应用
·怎么由DataSet将数据导入Excel?-.NET教程,数据库应用
·动态创建SQL Server数据库、表、存储过程-ASP教程,数据库相关
·Win32环境下动态链接库(DLL)编程原理-.NET教程,数据库应用
·封装的ADO.NET对数据库操作经典类-.NET教程,数据库应用
·在DataGridView中获得DataGridViewCheckBoxColumn的状态-ASP教程,数据库相关
·DataGrid使用心得(附大量代码)-ASP教程,数据库相关
·用代码创建DataGrid的多链接及checkbox事件响应-.NET教程,数据库应用
·ADO.NET 的最佳实践技巧-.NET教程,数据库应用
·转载: 用纯ASP代码实现图片上传并存入数据库中

最新文章
·根据数据表中数据,生成Powerpoint幻灯片-ASP教程,数据库相关
·DataGrid中的按钮反选事件与NamingContainer(命名容器)-downmoon-ASP教程,数据库相关
·使用用VB处理MYSQL数据库中二进制数据问题-.NET教程,VB.Net语言
·关于DataGridView中如何接收处于编辑状态下的当前信息-ASP教程,数据库相关
·在DataGridView中获得DataGridViewCheckBoxColumn的状态-ASP教程,数据库相关
·.net下访问Access数据库需要注意的问题-.NET教程,Asp.Net开发
·ActiveMQ4.1+Spring2.0的POJO JMS方案(上)-.NET教程,数据库应用
·ASP.NET 2.0中直接将Access数据库导入到Excel文件中-.NET教程,Asp.Net开发
·NET(C#)连接各类数据库-集锦-.NET教程,C#语言
·ASP.NET2.0连接SQL Server数据库详解-.NET教程,Asp.Net开发


 
 


版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
  打印  刷新  关闭
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 虚拟主机 | 资讯中心 | 友情链接 | 网站地图

版权所有 西部数码(www.west263.com)
CopyRight (c) 2002~2006 west263.com all right reserved.
公司地址:四川成都市万和路90号天象大厦4楼 邮编:610031
电话总机:028-86262244 86263048 86263408 86263960 86264018 86267838
售前咨询:总机转201 202 203 204 206 208
售后服务:总机转211 212 213 214
财务咨询:总机转224 223 传真:028-86264041 财务QQ:点击发送消息给对方635483282
售前咨询QQ:点击发送消息给对方2182518 点击发送消息给对方241975952 点击发送消息给对方275026793 点击发送消息给对方408235859
售后服务QQ:点击发送消息给对方17708515 点击发送消息给对方307742704 点击发送消息给对方287976517 点击发送消息给对方363783715
《中华人民共和国增值电信业务经营许可证》编号:川B2-20030065号