




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、ado.net數(shù)據(jù)操作1、 概念區(qū)分:直連方式(以下簡(jiǎn)稱為a):操作數(shù)據(jù)時(shí)必須保持?jǐn)?shù)據(jù)庫(kù)的連接,以只讀向前的方式讀取數(shù)據(jù)無(wú)連接方式(以下簡(jiǎn)稱為b):采用dataset方式在客戶端中緩存數(shù)據(jù),dataadapter 只在update和fill的時(shí)候才需要連接數(shù)據(jù)庫(kù),由dataadapter自動(dòng)去連接以及斷開數(shù)據(jù)庫(kù)連接,在工具箱中集成了支持拖放的dataadapter等2、 數(shù)據(jù)查詢(select):2、1 直連方式(以下簡(jiǎn)稱為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()必須關(guān)閉當(dāng)前讀取器,只能有一個(gè)處于讀取狀態(tài) 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要點(diǎn):1、在同一個(gè)數(shù)據(jù)連接上一次只能有一個(gè)sqldatareader處于連接狀態(tài); 2、sqldatareader只能以只讀向前的方式訪問(wèn),當(dāng)移動(dòng)到最后一行時(shí)無(wú)法返回,作廢; 3、ds.read()包含兩個(gè)作用:判斷是否還有下一行數(shù)據(jù),有返回真值,如果有下一行會(huì)
4、自動(dòng)移動(dòng)到下一行2、2 無(wú)連接方式(以下簡(jiǎn)稱為b)2、2、1手動(dòng)編寫代碼以下為示例代碼 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(數(shù)據(jù)庫(kù)., warnning, messageboxbuttons.ok, messageboxicon.warning) finally conn.dispose() da.dispose()end try 要點(diǎn):1、利用sqldataadapter取數(shù)據(jù),并將數(shù)據(jù)填充到dataset 2、sqldataadapter的fill方法自動(dòng)去完成數(shù)據(jù)庫(kù)連接,取數(shù)據(jù)并斷開連接,以減少數(shù)據(jù)庫(kù)連接的時(shí)間2、2、1利用拖放自動(dòng)生成代碼后置代碼只需要一句話:da.fill(ds, employees)要點(diǎn):1、
6、拖放sqldataadapter到窗體內(nèi),在向?qū)е袝?huì)自動(dòng)生成sql語(yǔ)句,向?qū)?huì)自動(dòng)生成該sql語(yǔ)句所對(duì)應(yīng)的updatecommand,insertcommand,deletecommand; 2、在sqldataadapter右鍵中有菜單生成數(shù)據(jù)集,在生成數(shù)據(jù)集時(shí)會(huì)自動(dòng)生成與所選表格的類型化dataset,該類型化dataset隱藏在xsd文件之下; 3、類型化dataset支持前期邦定,可與textbox,listbox,commbox,datagrid等邦定;3、 數(shù)據(jù)更新( updatae ,insert , delete)注意:直連方式通常情況下只能執(zhí)行單條語(yǔ)句的更新3、1直連方式數(shù)據(jù)
7、更新3、1、1直接使用sql語(yǔ)句 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) 創(chuàng)建參數(shù)對(duì)象,并加到參數(shù)的集合中來(lái) cmd.parameters.add(new sqlparameter(lname, sqldbtype.varchar, 20) cmd.parameters.add(new sql
8、parameter(fname, sqldbtype.varchar, 10) 給參數(shù)對(duì)象賦值 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要點(diǎn):1、不建議使用 ”insert into employees(lastname,firstname) values(” + textbox1.text + “,” + textbox2.text + “)”)方式,該種方式會(huì)引起sql的注入式攻擊;2、追加參數(shù)對(duì)象時(shí),參數(shù)的名稱一定要與sql語(yǔ)句的參數(shù)名稱一致,參數(shù)的長(zhǎng)度最好與數(shù)據(jù)庫(kù)中的長(zhǎng)度保持一致;3、cmd.executenonquery()方法返回受影響的行數(shù);3、1、2利用存儲(chǔ)過(guò)程
10、更新(procedure)a、帶input(輸入)參數(shù)例如:如下procuse northwindcreate proc insertemployee(lname varchar(20), fname varchar(10)as insert into employees(lastname,firstname) values(lname,fname) 對(duì)應(yīng)程序如下: 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 創(chuàng)建參數(shù)對(duì)象,并加到參數(shù)的集合中來(lái) cmd.parameters.add(new sqlparameter(lname, sqldbtype.varchar, 20) cmd.parameters.add(new sqlparameter(fname, sqldbtype.varchar, 10) 給參數(shù)對(duì)象賦值 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 要點(diǎn):1、寫法與sql語(yǔ)句類似,只需要在dim cmd as new sqlcommand(inserte
13、mployee, conn)該語(yǔ)句中的第一個(gè)參數(shù)指名存儲(chǔ)過(guò)程的名稱b、帶output(輸出)參數(shù)例如:如下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 創(chuàng)建參數(shù)對(duì)象,并加到參數(shù)的集合中來(lái) 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) 指明該參數(shù)為輸出參數(shù),給參數(shù)對(duì)象賦值,輸出參數(shù)不需要賦值 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要點(diǎn):1、output參數(shù)一定要指名參數(shù)方向是parameterdirection.output,默認(rèn)是輸入?yún)?shù),可不指定,output參數(shù)的數(shù)據(jù)類
17、型無(wú)限制; 2、output參數(shù)只有在sqlcommand提交后才能取值;c、帶return(返回)參數(shù)例如:如下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 創(chuàng)建參數(shù)對(duì)象,并加到參數(shù)的集合中來(lái) 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) 指明該參數(shù)為返回參數(shù),返回參數(shù)不能賦值 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要點(diǎn):1、output參數(shù)一定要指名參數(shù)方向是parameterdirection.returnvalue,其寫法與b一致,
21、但一定要注意return參數(shù)只能返回整型值,因此用的較少3、2無(wú)連接方式數(shù)據(jù)更新:注意:因?yàn)闊o(wú)連接方式是利用dataset緩存數(shù)據(jù),根據(jù)界面的情況不同,在更新數(shù)據(jù)的時(shí)候有兩種情況:1、界面上為datagrid控件,可同時(shí)做updata,insert,delete各種操作,一次提交所有的更新,該方法的弊端是容易引起數(shù)據(jù)的并發(fā);2、界面上全部是textbox,都是單值控件,一次只能提交其中的一條語(yǔ)句,執(zhí)行一個(gè)語(yǔ)句保存一次,例如課本的第七課;下面分兩大類分別分析3、2、1、datagrid中多條語(yǔ)句同時(shí)更新3、2、1、1利用拖放后置代碼在進(jìn)行根新的時(shí)候只需要一行代碼:sqldataadapter.u
22、pdate(ds,”employees”);要點(diǎn):1、拖放的sqldataadapter會(huì)根據(jù)sql語(yǔ)句自動(dòng)生成其它的command,在提交的過(guò)程中會(huì)根據(jù)用戶所做的insert、update、delete操作自動(dòng)執(zhí)行各自得command2、用戶在datagrid中所作的所有更改都是在客戶端完成的,只有sqldataadapter.update可以完成到數(shù)據(jù)庫(kù)的提交,在更新的時(shí)候要指名表的名稱。3、2、1、2手動(dòng)編寫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) 命令構(gòu)造器
24、,根據(jù)select語(yǔ)句自動(dòng)生成其他的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要點(diǎn):1、sqlcommandbuilder以sqldataadapter為參數(shù),能夠根據(jù)sqldataadapter所寫的sql語(yǔ)句自動(dòng)生成其它的command,其做法與上面的拖放實(shí)際是一樣的;2、該方法的最大弊端是速度非常慢,一般只會(huì)在單機(jī)操作的程序中使用b、手動(dòng)編寫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) 創(chuàng)建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要點(diǎn):1、該方式由用戶自定義insert,update,delete對(duì)應(yīng)的c
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 湖南省岳陽(yáng)市臨湘市2024-2025學(xué)年七年級(jí)下學(xué)期期中考試生物試題(含答案)
- 藥店?duì)I業(yè)員協(xié)議書或合同
- 解約教師勞動(dòng)合同協(xié)議
- 菜品買賣協(xié)議書范本
- 街道辦商鋪?zhàn)赓U合同協(xié)議
- 融資顧問(wèn)協(xié)議合同書范本
- 融資代建框架合同協(xié)議
- 藥房代理加盟合同協(xié)議
- 自愿試崗協(xié)議書范本
- 船舶建造合同轉(zhuǎn)讓協(xié)議
- 產(chǎn)科輸血-ppt課件
- 國(guó)家職業(yè)技能標(biāo)準(zhǔn) (2021年版) 公共營(yíng)養(yǎng)師
- 森林防火PPT課件
- 多合規(guī)政策及流程變化對(duì)照版
- 鋼箱梁的制作及安裝方案
- 工程測(cè)量畢業(yè)設(shè)計(jì)畢業(yè)論文
- 艏艉密封裝置安裝工藝規(guī)程
- 一元二次方程四種解法知識(shí)點(diǎn)與練習(xí)題(包括十字相乘法)
- 水平四籃球行進(jìn)間運(yùn)球教學(xué)設(shè)計(jì)
- 雨露計(jì)劃職業(yè)教育補(bǔ)助學(xué)籍證明四川
- 15MW雙饋風(fēng)力發(fā)電機(jī)電氣原理圖
評(píng)論
0/150
提交評(píng)論