.net中ADO的使用(vb.net)_第1页
.net中ADO的使用(vb.net)_第2页
.net中ADO的使用(vb.net)_第3页
.net中ADO的使用(vb.net)_第4页
.net中ADO的使用(vb.net)_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、ado.net数据操作1、 概念区分:直连方式(以下简称为a):操作数据时必须保持数据库的连接,以只读向前的方式读取数据无连接方式(以下简称为b):采用dataset方式在客户端中缓存数据,dataadapter 只在update和fill的时候才需要连接数据库,由dataadapter自动去连接以及断开数据库连接,在工具箱中集成了支持拖放的dataadapter等2、 数据查询(select):2、1 直连方式(以下简称为a)以下为示例代码dim conn as new sqlconnection(server=localhost;database=northwind;trusted_con

2、nection=yes) dim i as int16 dim cmd as new sqlcommand(select * from employees, conn) try conn.open() dim dr as sqldatareader = cmd.executereader() while dr.read() i += 1 end while msgbox(i.tostring()必须关闭当前读取器,只能有一个处于读取状态 dr.close() dim ds as sqldatareader = cmd.executereader() while ds.read() listbo

3、x1.items.add(ds.getstring(1) + + ds.getstring(2) end while ds.close() catch ex as exception msgbox(ex.message() finally conn.close() conn.dispose() cmd.dispose() end try要点:1、在同一个数据连接上一次只能有一个sqldatareader处于连接状态; 2、sqldatareader只能以只读向前的方式访问,当移动到最后一行时无法返回,作废; 3、ds.read()包含两个作用:判断是否还有下一行数据,有返回真值,如果有下一行会

4、自动移动到下一行2、2 无连接方式(以下简称为b)2、2、1手动编写代码以下为示例代码 dim conn as new sqlconnection conn.connectionstring = server=localhost;database=northwind;trusted_connection=yes dim da as new sqldataadapter(select * from employees, conn) dim ds as new dataset try da.fill(ds, employees) datagrid1.datasource = ds.tables(e

5、mployees) catch ex as exception messagebox.show(数据库., warnning, messageboxbuttons.ok, messageboxicon.warning) finally conn.dispose() da.dispose()end try 要点:1、利用sqldataadapter取数据,并将数据填充到dataset 2、sqldataadapter的fill方法自动去完成数据库连接,取数据并断开连接,以减少数据库连接的时间2、2、1利用拖放自动生成代码后置代码只需要一句话:da.fill(ds, employees)要点:1、

6、拖放sqldataadapter到窗体内,在向导中会自动生成sql语句,向导会自动生成该sql语句所对应的updatecommand,insertcommand,deletecommand; 2、在sqldataadapter右键中有菜单生成数据集,在生成数据集时会自动生成与所选表格的类型化dataset,该类型化dataset隐藏在xsd文件之下; 3、类型化dataset支持前期邦定,可与textbox,listbox,commbox,datagrid等邦定;3、 数据更新( updatae ,insert , delete)注意:直连方式通常情况下只能执行单条语句的更新3、1直连方式数据

7、更新3、1、1直接使用sql语句 dim conn as new sqlconnection(server=localhost;database=northwind;uid=sa;pwd=) dim cmd as new sqlcommand(insert into employees(lastname,firstname) values(lname,fname),conn) 创建参数对象,并加到参数的集合中来 cmd.parameters.add(new sqlparameter(lname, sqldbtype.varchar, 20) cmd.parameters.add(new sql

8、parameter(fname, sqldbtype.varchar, 10) 给参数对象赋值 cmd.parameters(lname).value = txtlname.text cmd.parameters(fname).value = txtfname.text dim count as integer try conn.open() count = cmd.executenonquery() if (count = 1) then messagebox.show(insert succeed) else messagebox.show(insert false) end if cat

9、ch ex as exception finally conn.close() conn.dispose() cmd.dispose() end try要点:1、不建议使用 ”insert into employees(lastname,firstname) values(” + textbox1.text + “,” + textbox2.text + “)”)方式,该种方式会引起sql的注入式攻击;2、追加参数对象时,参数的名称一定要与sql语句的参数名称一致,参数的长度最好与数据库中的长度保持一致;3、cmd.executenonquery()方法返回受影响的行数;3、1、2利用存储过程

10、更新(procedure)a、带input(输入)参数例如:如下procuse northwindcreate proc insertemployee(lname varchar(20), fname varchar(10)as insert into employees(lastname,firstname) values(lname,fname) 对应程序如下: dim conn as new sqlconnection(server=localhost;database=northwind;uid=sa;pwd=) dim cmd as new sqlcommand(insertempl

11、oyee, conn) cmd.commandtype = commandtype.storedprocedure 创建参数对象,并加到参数的集合中来 cmd.parameters.add(new sqlparameter(lname, sqldbtype.varchar, 20) cmd.parameters.add(new sqlparameter(fname, sqldbtype.varchar, 10) 给参数对象赋值 cmd.parameters(lname).value = txtlname.text cmd.parameters(fname).value = txtfname.t

12、ext dim count as integer try conn.open() count = cmd.executenonquery() if (count = 1) then messagebox.show(insert succeed); else messagebox.show(insert false); end if catch ex as exception finally conn.close() conn.dispose() cmd.dispose() end try 要点:1、写法与sql语句类似,只需要在dim cmd as new sqlcommand(inserte

13、mployee, conn)该语句中的第一个参数指名存储过程的名称b、带output(输出)参数例如:如下procuse northwindcreate proc insertemployee(lname varchar(20), fname varchar(10),empid int output)as insert into employees(lastname,firstname) values(lname,fname)select empid=identity程序如下:dim conn as new sqlconnection(server=localhost;database=nor

14、thwind;uid=sa;pwd=) dim cmd as new sqlcommand(insertemployee, conn) cmd.commandtype = commandtype.storedprocedure 创建参数对象,并加到参数的集合中来 cmd.parameters.add(new sqlparameter(lname, sqldbtype.varchar, 20) cmd.parameters.add(new sqlparameter(fname, sqldbtype.varchar, 10) cmd.parameters.add(new sqlparameter(

15、empid, sqldbtype.int) 指明该参数为输出参数,给参数对象赋值,输出参数不需要赋值 cmd.parameters(empid).direction = parameterdirection.output cmd.parameters(lname).value = txtlname.text cmd.parameters(fname).value = txtfname.text dim count as integer dim empid as integer try conn.open() count = cmd.executenonquery() empid = cmd.p

16、arameters(empid).value if (count = 1) then messagebox.show(succeed and your id is: + empid.tostring(), mes) else messagebox.show(false, mes) end if catch ex as exception finally conn.close() conn.dispose() cmd.dispose()end try要点:1、output参数一定要指名参数方向是parameterdirection.output,默认是输入参数,可不指定,output参数的数据类

17、型无限制; 2、output参数只有在sqlcommand提交后才能取值;c、带return(返回)参数例如:如下procuse northwindcreate proc insertemployee(lname varchar(20), fname varchar(10),as declare empid intinsert into employees(lastname,firstname) values(lname,fname)select empid=identityreturn empid程序如下:dim conn as new sqlconnection(server=localh

18、ost;database=northwind;uid=sa;pwd=) dim cmd as new sqlcommand(insertemployee, conn) cmd.commandtype = commandtype.storedprocedure 创建参数对象,并加到参数的集合中来 cmd.parameters.add(new sqlparameter(lname, sqldbtype.varchar, 20) cmd.parameters.add(new sqlparameter(fname, sqldbtype.varchar, 10) cmd.parameters.add(n

19、ew sqlparameter(empid, sqldbtype.int) 指明该参数为返回参数,返回参数不能赋值 cmd.parameters(empid).direction = parameterdirection.returnvalue cmd.parameters(lname).value = txtlname.text cmd.parameters(fname).value = txtfname.text dim count as integer dim empid as integer try conn.open() count = cmd.executenonquery() e

20、mpid = cmd.parameters(empid).value if (count = 1) then messagebox.show(succeed and your id is: + empid.tostring(), mes) else messagebox.show(false, mes) end if catch ex as exception finally conn.close() conn.dispose() cmd.dispose()end try要点:1、output参数一定要指名参数方向是parameterdirection.returnvalue,其写法与b一致,

21、但一定要注意return参数只能返回整型值,因此用的较少3、2无连接方式数据更新:注意:因为无连接方式是利用dataset缓存数据,根据界面的情况不同,在更新数据的时候有两种情况:1、界面上为datagrid控件,可同时做updata,insert,delete各种操作,一次提交所有的更新,该方法的弊端是容易引起数据的并发;2、界面上全部是textbox,都是单值控件,一次只能提交其中的一条语句,执行一个语句保存一次,例如课本的第七课;下面分两大类分别分析3、2、1、datagrid中多条语句同时更新3、2、1、1利用拖放后置代码在进行根新的时候只需要一行代码:sqldataadapter.u

22、pdate(ds,”employees”);要点:1、拖放的sqldataadapter会根据sql语句自动生成其它的command,在提交的过程中会根据用户所做的insert、update、delete操作自动执行各自得command2、用户在datagrid中所作的所有更改都是在客户端完成的,只有sqldataadapter.update可以完成到数据库的提交,在更新的时候要指名表的名称。3、2、1、2手动编写a、利用commandbuilder类型 代码如下:dim da as sqldataadapter dim ds as dataset dim smd as sqlcommandb

23、uilder private sub form1_load(byval sender as system.object, byval e as system.eventargs) handles mybase.load dim conn as new sqlconnection conn.connectionstring = server=localhost;database=northwind;uid=sa;pwd= da = new sqldataadapter(select employeeid,lastname,firstname from employees, conn) 命令构造器

24、,根据select语句自动生成其他的command dim smd as new sqlcommandbuilder(da) ds = new dataset try da.fill(ds, employees) datagrid2.datasource = ds.tables(employees) catch ex as exception messagebox.show(ex.message) end try end sub private sub button1_click(byval sender as system.object, byval e as system.eventarg

25、s) handles button1.click da.update(ds, employees)end sub要点:1、sqlcommandbuilder以sqldataadapter为参数,能够根据sqldataadapter所写的sql语句自动生成其它的command,其做法与上面的拖放实际是一样的;2、该方法的最大弊端是速度非常慢,一般只会在单机操作的程序中使用b、手动编写insertcommand,updatecommand,deletecommand 代码如下: dim da as sqldataadapter dim ds as dataset dim smd as sqlcom

26、mandbuilder 定义其他command dim insertcmd ,updatecmd ,deletecmd as sqlcommand private sub form1_load(byval sender as system.object, byval e as system.eventargs) handles mybase.load dim conn as new sqlconnection conn.connectionstring = server=localhost;database=northwind;uid=sa;pwd= da = new sqldataadapt

27、er(select employeeid,lastname,firstname from employees, conn) 创建insertcommand insertcmd = new sqlcommand(insert into employees(lastname,firstname) values (lname,fname), conn) insertcmd.parameters.add(new sqlparameter(lname, sqldbtype.varchar, 20) insertcmd.parameters(lname).sourcecolumn = lastname i

28、nsertcmd.parameters(lname).sourceversion = datarowversion.current insertcmd.parameters.add(new sqlparameter(fname, sqldbtype.varchar, 10) insertcmd.parameters(fname).sourcecolumn = firstname insertcmd.parameters(fname).sourceversion = datarowversion.current 为sqldataadapter指明insertcommandda.insertcom

29、mand = insertcmd ds = new dataset try da.fill(ds, employees) datagrid1.datasource = ds.tables(employees) catch ex as exception messagebox.show(ex.message) end try end sub private sub button1_click(byval sender as system.object, byval e as system.eventargs) handles button1.click da.update(ds, employees)end sub要点:1、该方式由用户自定义insert,update,delete对应的c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论