1、1,V数据库编程,2,.net中一般使用来和数据库进行连接,3,与数据库连接 数据库查询 使用DataAdapter获取数据 处理DataSet对象,4,与数据库连接,如果是和微软的ACCESS或SQL SERVER连接,使用的CONNECTION是OleDbConnection,这也是最常使用的连接对象 需要在VB.NET中引用System.Data, System.Data.OleDb以及System.Data.SqlClientImports System.Data Imports System.Data.Oledb Imports System.Data.sqlclient,5,创建C
2、ONNECTION对象 Dim cn as oledbconnection Cn =new oledbconnection() 连接字符串(告诉connection对象使用什么用户名和密码,连接哪一台计算机上的哪个数据库) 连接字符串形式如: “provider=sqloledb;datasource=127.0.0.1;initial catalog=pubs;user id=sa;“,6,开放连接 Cn.open() 关闭连接 Cn.close(),7,.net中默认使用连接池来和数据库连接;而且连接池默认是打开的,所以在调用CLOSE方法时,与数据库的实际连接并没有真正被关闭,而是被传递
3、到池中,以后它就在池中重用 如果不想使用连接池 Oledbconnection ole db services=-4; Sqlconnection pooling=false;,8,动态的数据库连接 通过给Oledbconnection的connectionstring属性赋不同的值来动态连接数据库 在OLEDBCONNECTION提供的属性中 database 数据库名称 Datasource 数据库位置 State 当前状态是打开或关闭,9,Changedatabase方法 Cn.changedatabase(“northwind”)Statechange 事件:连接状态改变时需要做的事情
4、,10,数据库查询,使用command对象 执行SQL语句创建command: Dim cmd as new oledbcommand cmd.connection=cn mandtext=“select * from authors”,11,执行无返回行的查询 Cmd.executenonquery() 对于update语句来说,有时会修改某些行的值,有时却不会修改任何行,但是不会发生任何异常 Command对象将所影响的行数作为Cmd.executenonquery()的返回值,12,执行一个有返回集的查询 Cmd.executereader 返回一个数据集(对象) Dim rdr as
5、oledbdatareader=cmd.executereader(),13,使用此数据集 Rdr.read() 第一次使用此方法会移动游标到结果集的第一行,以后每次使用时会自动下移一行. 如果数据集已经结束则此方法会返回FALS While rdr.read()rdr.read(“customerid”) End while,14,缺点 必须随时用完随时关闭,否则在试图打开第二个datareader,就会出现异常. Datareader会把connection对象锁定 数据是只读的 游标只能向前,不能后退.如果需要在各个查询结果之间前后移动,则应该使用DATASET 优点:速度快,15,执行
6、返回单值的查询 Select count(*) from customers 使用datareader 或着dataset来获取单值是可以的,但是有些大材小用. Command有一专门为此类设计的方法:executescalar,获取第一行第一列的数据,16,参数化查询 Select orderid,customerid from orders where customerid=? ?是参数标记 给参数赋值 Cmd.parameters.add(“customerid”,oledbtype.wchar,5) Cmd.parameters(0).value=“jcc”,17,使用DataAdap
7、ter获取数据,dataadapter是专门用来处理脱机数据的 Dataadapter将查询到的数据放入DATASET中,然后就不需要连接数据库了 实际上DATASET就相当于一个小数据库,不过是放在内存中的. Da.fill(dataset),18,Mapping Datatablemapping和datacolumnmappingDim da as oledbdataadapter Dim tblmap as datatablemapping Dim colmap as datacolumnmapping Tblmap=da.tablemappings.add(“table”,”e”) C
8、olmap=da.columnmappings.add(“lname”,”xing”),19,根据dataadapter对象的FILL方法分页 Da.fill(dataset,0,20,”student”) Da 将选中的数据中前20行放在DATASET的student表中,其他的数据丢弃(并不表示从数据库中只找到20行),20,打开和关闭连接方面是Dataadapter和command之间的区别最大的区别 Dim cn as oledbconnection Dim da as dataadapter Dim cmd as olecommand 如果cn没有打开连接,那么当da 要查询数据库时
9、,它会自动打开连接使用完毕后自动关闭;cmd则会返回一个异常.,21,多次调用FILL方法 如果要刷新DATASET中的数据,最简单方法是清空DATASET,然后在调用fill方法.否则数据表中的记录会又一次被放入dataset中了.(原来的数据还在),22,处理DataSet对象,向dataset中已有的数据表添加数据 Dim row as datarow =ds.tables(“student”).newrow Row(“name”)=“jichengchao” Row(“telphon”)=“3511045”,23,修改dataset中已有的数据表 Row=ds.tables(“stud
10、ent”).rows.find(“jichengchao”) If row is nothing then else Row(“name”)=“chenghui” endif,24,Row.beginedit Row(“name”)=“chenghui” Row.endedit可以调用canceledit取消修改,25,删除数据行 Row.delete即可 但是只是相VFP一样,在DATASET中做了一个删除标记,并没有删除数据,更美有删除数据库中的数据 DATASET相当与一个真正数据库中表的副本,所有的修改,删除,增加,都只是暂时表存,只有当提交给数据库后才能在数据库中生效 Da.update(ds),