




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、11.3 ADO.NET概念A(yù)DO.NET是由很多類組成的類庫,這些類提供了許多對象,分別用來實現(xiàn)連接數(shù)據(jù)庫,查詢數(shù)據(jù),插入數(shù)據(jù),更新數(shù)據(jù)和刪除數(shù)據(jù)等操作。ADO.NET提供了下面兩種訪問數(shù)據(jù)庫的方法(1) 利用Connection,Command和DataReader對象訪問數(shù)據(jù)庫。這種方式只能從數(shù)據(jù)庫讀取數(shù)據(jù),不能添加,修改和刪除基類。如果只是進(jìn)行查詢,這種方式效率更高一些(2) 利用Connection,Command,DataAdapter和DataSet對象。這種方式比較靈活,不僅可以讀取數(shù)據(jù)庫進(jìn)行查詢操作。還可以進(jìn)行添加,刪除和修改等操作。另外,ADO.NET對象模型主要由兩個基本
2、組件構(gòu)成;一個是ADO.NET數(shù)據(jù)庫提供程序,用于連接到數(shù)據(jù)庫,執(zhí)行命令和檢查結(jié)果;另一個是數(shù)據(jù)集(DataSet),DataSet對象是支持ADO.NET的斷開式,分布式數(shù)據(jù)方案的核心對象。1 .NET Data Provider.NET 數(shù)據(jù)提供者是指存取數(shù)據(jù)源的一組類庫,主要是為了統(tǒng)一各類型數(shù)據(jù)源的存取方式而設(shè)計出一套高效類庫。 在.NET Data Provider中包括了下表四個對象對象名稱功能說明Connection提供和數(shù)據(jù)源的連接功能Command提供存取數(shù)據(jù)庫命令,并執(zhí)行傳送數(shù)據(jù)或修改數(shù)據(jù)的命令,例如執(zhí)行SQL命令,預(yù)存程序。DataAdapter擔(dān)任DataSet對象和數(shù)據(jù)
3、源間的橋梁。DataAdapter使用四個Command對象執(zhí)行查詢,新增,修改,刪除的SQL命令,把數(shù)據(jù)加載DataSet,或者把DataSet內(nèi)的數(shù)據(jù)更新返回數(shù)據(jù)源。DataReader通過Command對象執(zhí)行SQL查詢命令取得數(shù)據(jù)流,以便進(jìn)行高速,只讀的數(shù)據(jù)瀏覽功能DataSet該對象可視為一個虛擬的數(shù)據(jù)源。在該對象中,存在著許多DataTable對象。DataTable對象可以看作一個內(nèi)存中的Table,開發(fā)人員可以自定義Table中的欄目來在顯示數(shù)據(jù),也可以通過將不同數(shù)據(jù)源的數(shù)據(jù)存在不同DataTable對象的方式將這些數(shù)據(jù)整合在一起。11.4 ADO.NET對象不同的數(shù)據(jù)提供程序
4、會由于其所用的數(shù)據(jù)庫技術(shù)不同而有不同的實現(xiàn)方式。它們提供了對底層數(shù)據(jù)源的訪問,包括四個數(shù)據(jù)對象,其分別是Connection對象,Command對象,DataReader對象和DataAdapter對象。Connection對象用于連接到數(shù)據(jù)源。ADO.NET中包括OleDbConnection和SqlConnection等對象,前者用來連接基于OLE DB的數(shù)據(jù)庫,后者專門用來連接SQL Server數(shù)據(jù)庫。(1)使用SqlConnection對象連接到SQL Server數(shù)據(jù)庫連接到數(shù)據(jù)庫是訪問數(shù)據(jù)庫的第一步,可以使用下面的語句連接到SQL Server的pubs數(shù)據(jù)庫String Con
5、nectionString=“server=(local);uid=sa;pwd=;database=pubs”;如果是Windows身份驗證時;則連接字符串具有如下形式Data Source=(local);Initial Catalog=數(shù)據(jù)庫名;Integrated Security=True;SqlConnection MyConnection=new SqlConnection(ConnectionString)其中,ConnectionString變量存儲了訪問數(shù)據(jù)庫的各種信息,server用于指定運(yùn)行SQL Server的服務(wù)器;uid和pwd分別指定登錄到SQL Server服
6、務(wù)器的用戶名和密碼;database指定數(shù)據(jù)庫名,MyConnection變量為SqlConnection類型的變量,代表了實際的連接對象(3) 使用OleDbConnection對象連接到OLE數(shù)據(jù)源進(jìn)行數(shù)據(jù)庫的連接需要使用連接字符串,連接OLE DB數(shù)據(jù)庫(以Access數(shù)據(jù)庫為例)的Connection對象的語句為Data Source=“文件路徑及文件名”;如果數(shù)據(jù)庫使用Access 2007版本編寫的時候連接字符串改為String ConnectionString=“Provider=”;Data Source=“文件路徑及文件名”;(1注意Data Source要分開寫即中間要留有
7、空格OleDbConnection MyConnection=new OleDbConnection(ConnectionString)其中Provider提出了OLE DB數(shù)據(jù)庫的驅(qū)動程序,DataSource提出Access數(shù)據(jù)庫文件名的絕對路徑。表17.3 SqlConnection連接字符串中的常用關(guān)鍵字名稱默認(rèn)值說明Data Source或Server或Address或Addr或NetworkAddress連接的SQL Server實例名稱或網(wǎng)絡(luò)地址Initial Catalog或Database要連接的數(shù)據(jù)庫名稱Integrated Security或Trusted_Connect
8、ionFalse當(dāng)為false時,在連接時必須指定SQL Server登錄賬號和密碼Password或PwdSQLServer登錄賬戶密碼Persist Security InfoFalse當(dāng)該值設(shè)置為false或no時,如果要連接是打開的或者一直處于打開狀態(tài),那么安全信息將不會作為連接的一部分User IDSQL Server登錄賬戶(4) OleDbConnection與SqlConnection對象常用的屬性和方法表11.1 Connection對象的常用屬性屬性含義ConnectionString獲取或設(shè)置用于打開SQL數(shù)據(jù)庫的字符串ConnectionTimeOut獲取終止嘗試連接并
9、生成錯誤之前所等待的時間DataBase獲取當(dāng)前數(shù)據(jù)庫或連接打開后要使用的數(shù)據(jù)庫名稱DataSource獲取要連接SQL Server實例名稱ServerVersion獲取包含客戶端要連接的SQL Server實例的版本字符串State獲取或設(shè)置連接的當(dāng)前狀態(tài)SqlConnection類的State屬性表述當(dāng)前數(shù)據(jù)庫連接狀態(tài);其值是一個ConnectionState枚舉類型,ConnectionState枚舉類型共包含6個值,表示6種數(shù)據(jù)庫連接狀態(tài)。(1) Closed:連接處于關(guān)閉狀態(tài);(2) Connecting:正在與數(shù)據(jù)源連接;(3) Open:連接處于打開狀態(tài);(4) Executi
10、ng:正在執(zhí)行命令;(5) Fetching:長在檢索數(shù)據(jù);(6) Broken:連接中斷;表11.2 Connection對象的常用方法方法含義Open打開數(shù)據(jù)庫連接Close關(guān)閉與數(shù)據(jù)庫的連接,這是關(guān)閉任何連接的首選方法ChangeDatabase為打開的SqlConnection更改當(dāng)前數(shù)據(jù)庫在創(chuàng)建Connection對象后,需要創(chuàng)建Command對象實現(xiàn)對數(shù)據(jù)庫的操作,Command對象要與對應(yīng)的連接方式匹配;對SqlConnection采用SqlCommand;對OleDbConnection則采用OleDbCommand(1) 創(chuàng)建SqlCommand對象創(chuàng)建一個SqlComman
11、d對象的語句為 String ConnectionString = "server =(local;uid=sa;pwd=;database=pubs"/創(chuàng)建一個SqlConnection對象SqlConnection MyConnection = new SqlConnection(ConnectionString;/打開Connection對象,以實現(xiàn)對Command對象的進(jìn)一步操作MyConnection.Open(;string SqlString = "select * from authors"/創(chuàng)建一個SqlCommand對象SqlComm
12、and MyCommand = new SqlCommand(SqlString, MyConnection;2)SqlCommand和OleDbCommand對象的常用 屬性和方法表11.3 Command對象的常用屬性屬性含義CommandText獲取或設(shè)置對數(shù)據(jù)源執(zhí)行的T-SQL語句或存儲過程CommandTimeOut獲取或設(shè)置在終止嘗試并生成錯誤之前的等待時間Connection獲取或設(shè)置SqlCommand實例并使用SqlConnection表11.4 Command對象的常用方法方法含義ExecuteReader將CommandText發(fā)送到Connection并生成一個SqlD
13、ataReaderExecuteNonQuery對連接執(zhí)行T-SQ語句并返回受影響的行數(shù)(成功執(zhí)行時,返回1,否則返回0;ExecuteScalar執(zhí)行查詢并返回查詢所返回的結(jié)果集中第一行的第一列的值。忽略額外的列或行DataReader對象提供了一個只讀的,單項前移的記錄集;使用該對象可以有效地節(jié)約內(nèi)存,因為內(nèi)存中一次只保存一條記錄,而不是將所有記錄都裝入內(nèi)存。與DataSet相比,如果執(zhí)行純粹的讀操作,DataReader的速度要快得很多。DataReader對象只能與Command對象結(jié)合使用,并要與Command對象采用的方式相匹配;對SqlCommand采用SqlDataReader
14、;對OleDbCommand則采用過OleDbDataReader各商家配合使用通用券方法鍍金樹葉吊墜1000枚欲執(zhí)行一個會返回多結(jié)果集的數(shù)據(jù)命令,仍然是調(diào)用 SqlCommand.ExecuteReader 方法,然后在調(diào)用屬性 NextResult 方法將數(shù)據(jù)讀取器前移下一個結(jié)果集。如果有其他結(jié)果集, NextResult 方法會返回 TRUE ;否則會返回 False; DataAdapter 對象用來把來自特定數(shù)據(jù)源的信息調(diào)整為關(guān)系型數(shù)據(jù)格式,以適應(yīng)DataSet對象的需要。DataAdapter對象的功能很強(qiáng)大,不但負(fù)責(zé)把DataSet與關(guān)系型數(shù)據(jù)源聯(lián)系起來,而且能夠自動改變Data
15、Set的數(shù)據(jù)結(jié)構(gòu)。表DataAdapter對象的常用屬性DM單表明DataReader對象是否已經(jīng)關(guān)閉,為只讀屬性GetDataTypeName(i)tdtdtdtd 月份期次節(jié)日主活動周期特性DM檔期預(yù)算項目商戶參與宣傳方式預(yù)算費(fèi)用預(yù)期目標(biāo)PR活動節(jié)日促銷一月份11/1元旦喜迎新年幸運(yùn)抽紅包金羊報喜,抽獎連年惠戰(zhàn)年終,全場特價元旦活動當(dāng)天購物滿100便可參與抽獎,給你不一樣的新年禮物12/15-1/1獎品若干DM單頁5000張條幅一個海報14張X展架2個氣拱門、宣傳車考慮到正值銷售旺季故不要求各商家統(tǒng)一折扣銷售,各商家可根據(jù)自身情況合理安排促銷DM單微信平臺信息報電視字幕宣傳車等2年貨采購季
16、金羊送福迎財神過新年,穿新衣,戴新帽,新年新氣象,新年新風(fēng)尚全場特價,年貨也瘋狂購滿100省30/20/10元1/1-2/18同上同上DM單微信平臺信息報電視字幕宣傳車等二月份12/14情人節(jié)00有“情”天濃情蜜意,愛要久久2.14千支玫瑰送給您活動當(dāng)天凡在商場購物滿100元憑購物小票便可領(lǐng)取精美情人節(jié)禮品一份2/14DM單頁3000張紅玫瑰1000支X展架2個條幅一個同上DM單微信平臺信息報22/18春節(jié)三月份13/5元宵節(jié)冬季出清大促銷告別冬天走進(jìn)春天您的新衣,我的心意三月掃貨季,繽紛春季購物節(jié)冬季服飾全場八折起,春季新品搶先上市,部分新品超低價銷售3/5-4-20DM單3000張條幅1個
17、X展架2個戶外廣告冬裝全場八折起,春季新款第一件原價第二件九折DM單微信平臺信息報23/8婦女節(jié)3/15消費(fèi)者權(quán)益日3.8魅力女人節(jié)天天都是3.15,滿意服務(wù)在003.8女人節(jié),做美麗女人購物滿200元送美甲服務(wù)一次3/8-3/15同上同上DM單微信平臺信息報四月份14/1愚人節(jié)新裝搶鮮、呼吸春天,春裝全面上市四月踏青魅力出行繽紛春季購物節(jié)集章送好禮,活動期間,顧客在商場蓋章處,集齊“恭”“喜”“發(fā)”“財”四枚印章后即可領(lǐng)取相應(yīng)禮品。4/10-4/12同上同上DM單微信平臺信息報24/5清明節(jié)草長鶯飛四月天,祥盛購物揚(yáng)“紙鳶”凡活動期間購物滿100元便可領(lǐng)取精美風(fēng)箏一只4/10-4/20同上同
18、上DM單微信平臺信息報月份期次節(jié)日主活動周期特性DM檔期預(yù)算項目商戶參與宣傳方式預(yù)算費(fèi)用預(yù)期目標(biāo)PR活動節(jié)日促銷五月份15/1勞動節(jié)5/4青年節(jié)五一黃金周 幸運(yùn)大轉(zhuǎn)盤五一“大放價”先比拼,再血拼:拼豪禮、比幸運(yùn)、比實惠5/1-5/3活動期間購物滿100元便可參與幸運(yùn)大轉(zhuǎn)盤4/25-4/30DM單3000張條幅1個X展架2個戶外廣告獎品繽紛夏裝全面上市,春裝全面出清。春款服飾享購一件9折第二件8折優(yōu)惠DM單微信平臺25/10母親節(jié)商場各種特色服務(wù)捆綁大行動.特別的愛送特別的禮,給母親送上最貼心的關(guān)懷購物即送康乃馨5/10;購物滿300元送品牌護(hù)手霜一支或美甲一次5/8-5/10康乃馨500支美甲
19、券200張全場女裝、女鞋、美甲、化妝品、針織內(nèi)衣及部分箱包配飾當(dāng)天實行母親節(jié)貼心特價活動DM單微信平臺六月份16/1兒童節(jié)夏季初登場 購物送好禮購物即送商場扇子一把6/1-6/7商場扇子1000把DM單微信平臺26/20端午節(jié)6/21父親節(jié)粽飄香,慶雙節(jié),父愛如山感恩有禮父愛如山,老爸也時尚活動期間購物滿100送精品男襪一雙或精裝粽子一份6/206/21精品男襪300雙精裝粽子300份全場男裝、男鞋、皮具實行特價銷售DM單微信平臺七月份17/1建黨節(jié)仲夏大行動 全場9.5折起再滿150返20元代金券仲夏大行動激情年中會,時尚根本停不下來,重新搭配我們認(rèn)知世界的色彩全場9.5折起再滿150返20
20、元代金券7/8-7/22DM單3000張20元代金券500張全場9折起再滿150返20元代金券DM單微信平臺2學(xué)子有禮,本人持中考/高考準(zhǔn)考證、入取通知書領(lǐng)取20元通用券八月份18/1建軍節(jié)夏日反季特賣會午后瘋狂,限時搶購會每日午后1點(diǎn)至3點(diǎn),服裝區(qū)都有驚喜特價品8/1-8/10DM單3000張各商家推出限時搶購商品DM單微信平臺28/20七夕七月七日晴,轉(zhuǎn)角遇愛情,飾品全區(qū)8.5折“愛情見證人”舉辦祥盛擁抱比賽,情侶報名參加,男士將女士抱起,堅持時間最久的一對獲勝,獲得金玫瑰一支8/19-8/21金玫瑰20支飾品區(qū)全場8.5折DM單微信平臺月份期次節(jié)日主活動周期特性DM檔期預(yù)算項目商戶參與宣
21、傳方式預(yù)算費(fèi)用預(yù)期目標(biāo)PR活動節(jié)日促銷九月份19/10教師節(jié)開學(xué)特賣“惠”新學(xué)期新裝備,讓你到哪都是時尚達(dá)人持續(xù)學(xué)子有禮活動29/27中秋節(jié)雙節(jié)同慶 連環(huán)禮-滿300返50 9/27-10/7月圓中秋,情濃祥盛國慶嘉年華越購越開心秋季新品全面上市,夏裝全面出清滿100送“溫馨月餅”一盒,滿200元送“月餅紅酒”禮盒一份9/27-10/7DM單5000張條幅1個X展架2個戶外廣告中秋禮盒若干繽紛夏裝全面出清,秋裝全面上市DM單微信平臺信息報十月份110/1國慶節(jié)盡享意外驚喜-“國慶購物不花錢”設(shè)抽獎箱,內(nèi)有30個乒乓球其中全額1個,半額2個其余為紀(jì)念將(福彩刮刮樂一張)即時開獎活動當(dāng)日憑單張購物
22、滿100元購物小票便可參與抽獎,有機(jī)會獲得該票全額和半額消費(fèi)返還10/1-10/3DM單5000張條幅1個X展架2個戶外廣告福彩刮刮樂1000張DataReader對象的常用屬性和方法如表11.5和表11.6所示表對象的常用屬性10/21重陽節(jié)屬性節(jié)后再續(xù)禮,秋日最后的瘋狂男裝女裝鞋滿300減50HasRows表明是否還有記錄未被讀取。為只讀屬性10/12-10/25DM單微信平臺3 DataReader常用的屬性和方法通過Command對象ExecuteReader方法執(zhí)行購物有驚喜送大禮 DataReader對象,DataReader“雙十一”00對象的屬性與方法逐一取得每條記錄或相關(guān)字段
23、的數(shù)據(jù)線下也瘋狂“脫光”狂歡價含義DM單3000張完成讀取DataReader對象的查詢結(jié)果,可使用這個方法關(guān)閉DataReader對象DM單將從當(dāng)前DataReader查詢結(jié)果中取得的數(shù)據(jù)記錄的字段總數(shù)返回。若返回值為5,表示該條數(shù)據(jù)記錄共有50-4(字段下標(biāo)從0開始)用于獲取字段的數(shù)據(jù)類型名,參數(shù)i為字段序數(shù)GetName(100元、200元-*獲取字段名,參數(shù)i為字段序數(shù)DataReader“字段名稱”DM單取得字段名稱所指的字段數(shù)據(jù)GetValues(ArrayName全場商家持續(xù)冬季新品特價搶購活動讀取記錄中所有字段值,并將結(jié)果存入數(shù)組,參數(shù)ArrayName為數(shù)組名單微信平臺信息報
24、IsDBNull(i)十二月份判斷某個字段是是否為,字段下標(biāo)從0開始算起,若沒有數(shù)據(jù)返回true,否則返回falseGetValue(i)取得第i個字段的數(shù)據(jù)內(nèi)容,字段下標(biāo)從0開始算起GetOrdinal2取得某個字段的下標(biāo)。0為第一例Read()先將記錄指針移到下一條,并判斷記錄指針是否指到EOF(文件結(jié)束符號)。若記錄指針指到圣誕、元旦活動當(dāng)天購物滿false;若記錄指針沒有指到EOF,則返回True;DM張條幅1個BOF展架21戶外廣告2全場商家持續(xù)冬季新品特價搶購活動3DM4微信平臺5EOF合計預(yù)算屬性含義DeleteCommand獲取或設(shè)置一個T-SQL語句或存儲過程,以從數(shù)據(jù)集刪除
25、記錄InsertCommand獲取或設(shè)置一個T-SQL語句或存儲過程,以在數(shù)據(jù)源中插入新紀(jì)錄SelectCommand獲取或設(shè)置一個T-SQL語句或存儲過程,用于在數(shù)據(jù)源中選擇記錄UpdateCommand獲取或設(shè)置一個T-SQL語句或存儲過程,用于更新數(shù)據(jù)源中的記錄表11.8 DataAdapter對象的常用方法方法含義Fill在DataSet中添加或刷新行以匹配數(shù)據(jù)源中的行(即同時執(zhí)行SQL語句)(SelectCommand)GetFillParameters獲取當(dāng)執(zhí)行SQL Select語句時用戶設(shè)置的參數(shù)Update為DataSet中每個插入,已更新或刪除的行條用相應(yīng)的Insert,U
26、pdate或Delete語句(InsertCommand,DeleteCommand,UpdateCommand)即更新數(shù)據(jù)庫里面的數(shù)據(jù)。DataSet對象是一個簡單,存儲在內(nèi)存的數(shù)據(jù)庫,提供了一個不依賴于數(shù)據(jù)源而可進(jìn)行持續(xù)編程的模型。一個DataSet表示整個數(shù)據(jù)集,包含相互聯(lián)系,約束和關(guān)系等內(nèi)容。DataSet包含一個或多個DataTable對象,DataTable表示來自一個表的行集合。DataTable對象有數(shù)據(jù)行(DataRow)和數(shù)據(jù)列(DataColumn),以及主鍵,外鍵約束和有關(guān)DataTable對象中數(shù)據(jù)的關(guān)系信息組成。對DataSet對象中數(shù)據(jù)的操作時通過調(diào)用這些子對象的
27、方法完成的。DataSet(數(shù)據(jù)集)是ADO.NET離線數(shù)據(jù)存取結(jié)構(gòu)中的核心部分,其功能主要是在內(nèi)存中暫存并處理各種從數(shù)據(jù)源中所取回的數(shù)據(jù)要全面了解DataSet對象,首先要了解DataTable對象。利用DataTable對象和方法可以對DataTable中存儲的數(shù)據(jù)信息進(jìn)行訪問。DataTable的常用屬性如表11.9表11.9 DataTable對象的常用屬性屬性含義TableName用來返回表名Columns用來返回表所包含所有列,可以用Columns.Count表明列數(shù),用Columns(列序數(shù)或列名)具體引用每一列,每一列都是一個DataColumn對象Rows用來返回表所包含的所
28、有行(記錄),可以像Columns屬性一樣用Rows.Count表名行數(shù),使用Rows(行序數(shù))來引用行,用Rows.Item(列序數(shù)或列名)引用行的某列,每一行都是一個DataRow對象1 .NET Data Provider.NET 數(shù)據(jù)提供之是指存取數(shù)據(jù)源的一組類庫,主要是為了統(tǒng)一各類型數(shù)據(jù)源的存取方式而設(shè)計出一套高效類庫。在.NET Data Provider中包含了下表四個對象對象名稱功能說明Connection提供和數(shù)據(jù)源的連接功能Command提供存取數(shù)據(jù)庫命令,并執(zhí)行傳送數(shù)據(jù)或修改數(shù)據(jù)的命令,例如執(zhí)行SQL命令,預(yù)存程序。DataAdapter擔(dān)任DataSet對象和數(shù)據(jù)源間的
29、橋梁,DataAdapter使用四個Command對象來執(zhí)行查詢,新增,修改,刪除的SQL,把數(shù)據(jù)加載DataSet,或者把DataSet內(nèi)的數(shù)據(jù)更新返回數(shù)據(jù)源DataSet通過Command對象執(zhí)行SQL查詢命令取得數(shù)據(jù)流,以便進(jìn)行高速,只讀的數(shù)據(jù)瀏覽功能在上表中,通過Connection對象可與指定的數(shù)據(jù)庫進(jìn)行聯(lián)機(jī)。Command對象用來執(zhí)行相關(guān)的SQL命令(Select,Insert,Update,Delete)。以讀取或修改數(shù)據(jù)庫中的數(shù)據(jù)。通過DataAdapter對象內(nèi)的提供的四個Command對象進(jìn)行離線式的數(shù)據(jù)存取,這四個Command對象分別是SelectCommand,Ins
30、ertCommand,UpdateCommand和DeleteCommand。其中SelectCommand用來將數(shù)據(jù)庫中的數(shù)據(jù)讀出并放到DataSet對象中,以便進(jìn)行離線式的數(shù)據(jù)存取,至于其他三個命令對象則是用來將DataSet對象中的數(shù)據(jù)修改,并返回數(shù)據(jù)庫中。通過DataAdapter對象的Fill方法可以將數(shù)據(jù)讀到DataSet中,通過Update方法則可以將DataSet對象的數(shù)據(jù)更新到指定的數(shù)據(jù)庫中。至于查詢語句,還可以通過Command對象設(shè)置SELECT查詢語句和Connection對象設(shè)置數(shù)據(jù)庫聯(lián)機(jī),執(zhí)行數(shù)據(jù)查詢后取得DataReader對象,以只讀方式進(jìn)行往下的逐條數(shù)據(jù)瀏覽2
31、. DataSetDataSet(數(shù)據(jù)集)是ADO.NET離線數(shù)據(jù)存取結(jié)構(gòu)中的核心對象,其功能主要是在內(nèi)存中暫存并處理各種從數(shù)據(jù)源中所取回的數(shù)據(jù)。DataSet其實就是一個存放在內(nèi)存中的數(shù)據(jù)暫存區(qū),這些數(shù)據(jù)必須通過DataAdapter對象與數(shù)據(jù)庫做數(shù)據(jù)交換。在DataSet內(nèi)部允許同時存放一個或多個不同的數(shù)據(jù)表(Data Table)對象.NET Framework內(nèi)置提供下列兩種 .NET Data Provider:(1) SQL .NET Data Provider支持Microsoft SQL Server 7.0及2000以上的版本,由于它使用自己的通訊協(xié)議并且已優(yōu)化,所以可以直接
32、存取SQL Server數(shù)據(jù)庫,而不必使用OLE DB或ODBC(開放數(shù)據(jù)庫互聯(lián))接口,因此執(zhí)行效率較高。程序中使用SQL.NET Data Provider,則該ADO.NET對象名稱前面都要加上Sql,如SqlConnection,SqlCommand(2) OLE DB.NET Data Provider支持通過OLE DB接口來存取像Dbase,F(xiàn)oxPro,Excel,Access,Oracle,以及SQL Server。等各種類型數(shù)據(jù)源。程序中若使用OLE DB.NET Data Provider,則ADO.NET對象名稱前面都要加上OleDb,如OleDbConnection,O
33、leDbCommand。第十一章 ADO.NET數(shù)據(jù)庫聯(lián)機(jī)與存取下面只列出ADO.NET常用的命名空間相關(guān)說明1 System.Data是ADO.NET命名空間的核心;大部分是由ADO.NET架構(gòu)的類組合而成。這些類是Managed應(yīng)用程序存取數(shù)據(jù)的主要方法。它定義了Tables,Rows,Columns,Constraints和DataSet類。由此可知,DataSet類位于System.Data命名空間,在編寫程序時若用到DataSet類,必須在程序的最開頭使用using語句來引用此命名空間,其寫法如下Using System.Data /引用ADO.NET基本對象這個命名空間允許你聯(lián)機(jī)到
34、OLE DB類型的數(shù)據(jù)源,接受SQL查詢和使用OleDbDataAdapter對象的Fill方法,該方法用來將數(shù)據(jù)填入到DataSet中。這個命名空間允許你聯(lián)機(jī)到SQL Server 7.0(含)以上版本的數(shù)據(jù)庫,使用該類型可以直接與SQL Server聯(lián)機(jī)。若在程序中使用該類型的數(shù)據(jù)庫,必須在程序的開頭使用using語句引用此命名空間,其寫法如下在SQL.NET Data Provider下,所用的ADO.NET對象名稱前面必須加上Sql,如SqlConnection下表是ADO.NET在所屬命名空間中各對象命名的對照表System.Data.OleDbSystem.Data.SqlClie
35、ntOleDbConnectionSqlConnectionOleDbCommandSqlCommandOleDbDataReaderSqlDataReaderOleDbDataAdapterSqlDataAdapterOleObParameterSqlParameter11.2 如何運(yùn)用Connection對象打開,關(guān)閉數(shù)據(jù)庫的聯(lián)機(jī)ADO.NET 提供的Connection對象,主要用來與數(shù)據(jù)庫建立聯(lián)機(jī)。Connection對象提供下列兩種常用方法;(1) Open方法:用來建立并打開一個數(shù)據(jù)庫的聯(lián)機(jī)(2) Close方法:將數(shù)據(jù)庫的聯(lián)機(jī)關(guān)閉接著介紹ADO.NET架構(gòu)下,如何引用ADO.NE
36、T命名空間,打開和關(guān)閉兩種不同數(shù)據(jù)源聯(lián)機(jī)的程序代碼(1 引用命名空間Using System.Data(2 聲明OleDbConnection連接對象OleDbConnection myConnection;(3 聲明一個名為conStr的字符串變量,用來存放數(shù)據(jù)庫的聯(lián)機(jī)字符串,并指定數(shù)據(jù)庫所在的真實路徑String conStr(4 建立OleDbConnection對象并指定其數(shù)據(jù)庫的聯(lián)機(jī)字符串myConnection=new OleDbConnection(conStr)(5 使用Open方法打開與數(shù)據(jù)庫的聯(lián)機(jī)myConnection.Open(;(6 完成數(shù)據(jù)庫存取后在使用Close方
37、法關(guān)閉與數(shù)據(jù)庫的聯(lián)機(jī)myConnection.Close(;操作方式和上述類似,先聲明SqlConnection對象,再建立SqlConnection對象,并指定聯(lián)機(jī)的數(shù)據(jù)庫,最后使用Open方法打開與數(shù)據(jù)庫的聯(lián)機(jī),使用Close方法關(guān)閉與數(shù)據(jù)庫聯(lián)機(jī)。但SqlConnection及OleDbConnection對象的數(shù)據(jù)庫聯(lián)機(jī)字符串寫法不一樣Using System.DataString ConnectionString = "server =(local;uid=sa;pwd=;database=pubs"/創(chuàng)建一個SqlConnection對象SqlConnection
38、 MyConnection = new SqlConnection(ConnectionString;/打開Connection對象,以實現(xiàn)對Command對象的進(jìn)一步操作MyConnection.Open(; /打開與數(shù)據(jù)庫的聯(lián)機(jī)MyConnection.Close(; /關(guān)閉與數(shù)據(jù)庫的聯(lián)機(jī)以下是SqlConnection對象聯(lián)機(jī)字符串的參數(shù)設(shè)置(1) Server:可指定數(shù)據(jù)庫的服務(wù)器名稱,IP地址,localhost(代表本機(jī))(2) Database:SQL Server數(shù)據(jù)的名稱(3) Uid:數(shù)據(jù)庫;連接賬號,sa表示SQL數(shù)據(jù)庫管理者賬號(4) Pwd:數(shù)據(jù)庫連接密碼11.3 如
39、何運(yùn)用DataReader對象讀取數(shù)據(jù)庫上一節(jié)已經(jīng)介紹如何打開與關(guān)閉數(shù)據(jù)庫的聯(lián)機(jī),本節(jié)將陸續(xù)介紹如何對已聯(lián)機(jī)的數(shù)據(jù)庫,通過ADO.NET架構(gòu)內(nèi)的Command及DataReader對象讀取數(shù)據(jù)庫內(nèi)的數(shù)據(jù)。(1) Command對象Command對象可以讓你執(zhí)行SQL數(shù)據(jù)庫命令,以傳送和修改數(shù)據(jù),執(zhí)行存儲過程,并且傳送或獲取參數(shù)信息。所以,Command對象通過SQL命令可以從數(shù)據(jù)源獲取數(shù)據(jù),也可以將修改過的數(shù)據(jù)傳回數(shù)據(jù)源。此對象提供下列兩種方法來存取數(shù)據(jù)庫的內(nèi)容(1)ExecuteReader方法執(zhí)行Command對象的Select命令,建立一個DataReader對象進(jìn)行數(shù)據(jù)的瀏覽(2Exe
40、cuteNonQuery方法使用Command對象的ExecuteNonQuery方法,新增,刪除,修改數(shù)據(jù)庫中的數(shù)據(jù),也就是說執(zhí)行SQL語法中的Insert,Delete,Update命令(2) DataReader對象使用DataReader對象可以從數(shù)據(jù)庫中順向(Forward-only)逐條讀取數(shù)據(jù)流中的數(shù)據(jù)記錄,由于并不是一次將所有數(shù)據(jù)傳向客戶端的內(nèi)存中,因此可以提高應(yīng)用程序的效率。DataReader對象讀取數(shù)據(jù)方式是先通過Connection對象和數(shù)據(jù)庫聯(lián)機(jī),再通過Command對象的ExecuteReader方法執(zhí)行SQL Select命令獲取查詢的數(shù)據(jù),使用Connectio
41、n對象建立與數(shù)據(jù)庫的聯(lián)機(jī)通過 Command 對象提 通過 DataReader 對象 供的ExecuteReader方法, 的方法,進(jìn)行數(shù)據(jù)瀏執(zhí)行SQL的Select查詢命令, 覽,由開頭向下逐條建立一個DataReader對象 讀取數(shù)據(jù)庫中的數(shù)據(jù)DataReaderCommand 數(shù)據(jù)庫顯示查詢結(jié)果Connection4 如何使用DataReader讀取查詢結(jié)果若想通過DataReader對象讀取查詢結(jié)果,可以使用重復(fù)結(jié)果檢查記錄指針是否已經(jīng)知道EOF文件結(jié)束符號,若記錄指針尚未知道EOF表示數(shù)據(jù)沒讀完,便可使用DataReader的方法和屬性,順向逐一取得每個字段的名稱和該方法字段內(nèi)的數(shù)
42、據(jù),若記錄指針指到EOF表示數(shù)據(jù)已經(jīng)讀取完畢,便可結(jié)束讀取動作。(1) 如何通過DataReader對象取得數(shù)據(jù)記錄的字段名稱利用For計次循環(huán)配合DataReader對象的FieldCount屬性及GetName方法取得每列的字段名稱,并將字段名稱顯示在richTextBox1豐富文本框上:/列段的數(shù)目For(int i=0;i ) richTextBox1.Text+=myDataReader.GetName(i;(2) 如何通過DataReader對象顯示字段數(shù)據(jù)。有下列兩種方式。第一種方式在需要顯示所有字段數(shù)據(jù)時使用,第二種方式是僅顯示部分字段內(nèi)容時使用;(1) 利用DataReade
43、r對象方法讀取數(shù)據(jù),通過While。語句判斷記錄指針是否指到EOF?11.4如何使用DataSet對象來讀取數(shù)據(jù)1 DataSet對象DataSet對象可以是ADO.NET的主角,它像是一個內(nèi)存中數(shù)據(jù)庫,采用離線存取方式;例如:數(shù)據(jù)可以從應(yīng)用程序與SQL Server數(shù)據(jù)庫分別安裝在不同的主機(jī)上,當(dāng)數(shù)據(jù)庫應(yīng)用程序要從SQL Server數(shù)據(jù)庫取數(shù)據(jù)時,數(shù)據(jù)庫會將所要的數(shù)據(jù)全部傳送到執(zhí)行數(shù)據(jù)庫應(yīng)用程序的計算機(jī)(DataSet)中,此時就可與數(shù)據(jù)庫中斷聯(lián)機(jī)。當(dāng)DataSet中的數(shù)據(jù)更新完畢后,再重新和數(shù)據(jù)庫進(jìn)行聯(lián)機(jī),將所有數(shù)據(jù)一次更新到數(shù)據(jù)庫中,因此DataSet執(zhí)行效率高,適用于多客戶端數(shù)據(jù)存取
44、,但此種方式需耗費(fèi)較多內(nèi)存空間。在DataSet中可以包含一個以上的DataTable對象,DataTable對象相當(dāng)于內(nèi)存中的一個數(shù)據(jù)表。2 DataAdapter對象DataAdapter對象是數(shù)據(jù)庫和DataSet之間溝通的橋梁。 DataAdapter對象使用Command對象執(zhí)行SQL命令,將從數(shù)據(jù)庫獲取的數(shù)據(jù)送到DataSet,此時便可使用DataTable對象來存取數(shù)據(jù)表,將DataSet里面的數(shù)據(jù)經(jīng)過處理后再送回數(shù)據(jù)庫。3如何使用DataAdapter對象使用下列步驟可以產(chǎn)生名稱為“成績數(shù)據(jù)表”與“股票行情表”的DataTable對象(1) 建立名稱為myDataSet的Dat
45、aSet對象以及聲明myAdapter適應(yīng)DataAdapter對象:DataSet myDataSet=new DataSet() ;OleDbAdapter myAdapter ;(2) 建立myAdapter對象并指定所要執(zhí)行的SQL命令及要聯(lián)機(jī)的數(shù)據(jù)庫selectCmd=“Select * from SCORE” /查詢SCORE數(shù)據(jù)表myAdapter=new OleDbDataAdapter(selectCmd,myConnection);(3) 使用DataAdapter對象的Fill方法,將查詢結(jié)果放到DataSet對象中。此時DataSet對象中即會產(chǎn)生一個DataTable
46、對象,該DataTable對象會以數(shù)據(jù)表的方式存放查詢結(jié)果,所以只要通過DataTable對象即可取得SQL命令查詢的數(shù)據(jù)myAdapter.Fill(myDataSet,“成績表”) /成績表為表的名稱注意使用DataAdapter對象的Update()與Fill()方法時,Connection對象會自動與數(shù)據(jù)庫打開聯(lián)機(jī)及關(guān)閉聯(lián)機(jī),因此不必再使用Connection對象的Open及Close方法來打開與關(guān)閉數(shù)據(jù)庫的聯(lián)機(jī)。其程序?qū)懛ㄈ缦拢ㄍ暾绦虼a)OleDbConnection conn;Conn=new OleDbConnection(connStr)DataSet myDataSet=
47、new DataSet();OleDbDataAdapter myAdapter;/建立數(shù)據(jù)庫表的DataTable對象selectCmd=“Select * from SCORE“;myAdapter=new OleDbDataAdapter(selectCmd,myConnection);myAdapter.Fill(myDataSet,“成績表“);/建立股票行情表的DataTable對象selectCmd=“Select * from Stock“; /查詢STOCK數(shù)據(jù)表myAdapter=new OleDbDataAdapter(selectCmd,myConnection)myA
48、dapter.Fill(myDataSet,“股票行情表“;上述程序在DataSet對象中產(chǎn)生了“成績表“及”股票行情表“兩個DataTable對象也可以通過DataSet對象提供的Tables集合對象(由DataTable對象構(gòu)成),來指定取用哪一個DataTable對象DataTable myDataTable1,myDataTable2;myDataTable1=myDataSet.Tables“成績表“myDataTable2=myDataSet.Tables“股票行情表“上述程序也可以改用表格編號來取得DataTable對象,Tables集合對象的小標(biāo)起始為0;DataTable m
49、yDataTable1,myDataTable2;myDataTable1=myDataSet.Tables0myDataTable2=myDataSet.Tables1通過下面程序取得DataTable的總數(shù)或DataTable名稱myDataSet.Tablesi.TableName; /取得第i個DataTable對象的名稱若DataTable對象指定給DataGrid控件的DataSource屬性,則DataGrid控件會顯示該DataTable對象中的所有數(shù)據(jù);如下程序/讓dataGrid1控件顯示DataSet對象中“股票行情”DataTable對象的所有數(shù)據(jù)dataGrid1.D
50、ataSource=myDataSet.Tables“股票行情”DataSet對象與DataTable對象之間的關(guān)系DataTable對象N-1圖中的N值為DataSet中DataTable數(shù)目其寫法如下: 5 如何使用DataTable對象取得數(shù)據(jù)在前面曾提及DataTable對象有如內(nèi)存的數(shù)據(jù)表。因此,只要通過下列屬性 ,即可取得名稱為myDataTable的DataTable對象中的數(shù)據(jù):(1) 取得DataTable的字段數(shù)目 (2) 取得DataTable的第K個字段名稱,標(biāo)注起始值為0;myDataTable.Columnsk.ColumnName; (3) 取得DataTable
51、的數(shù)據(jù)總條數(shù):(4) 取得DataTable的第i行第j列的數(shù)據(jù)內(nèi)容,標(biāo)注起始值0:myDataTable.Rowsij; DataTable對象的結(jié)構(gòu)如圖11.9所示編號Columns0姓名Columns1電話Columns2.性別Columnsk-1123.NRows0Rows1Rows2Rowsi2Rowsi0Rowsi00Rowsij-1Rowsi-1 6 如何使用DataTable顯示查詢結(jié)果的所有記錄只要通過下列程序代碼,便可以取得DataTable對象中的數(shù)據(jù)For循環(huán)配合ColumnName取得第i列的字段名稱,并放入rtbShow豐富文本框內(nèi)For(int k=0;k ; k
52、+ ) rtbShow.Text+=myDataTable.Columnsk.ColumnName;(7)取得DataTable對象的字段數(shù)據(jù)內(nèi)容,有下列兩種方法方法一:使用嵌套循環(huán)逐一取得DataTable對象第i行第j列的數(shù)據(jù),并放入rtbShow豐富文本框內(nèi),其寫法如下:For(int j=0;j rtbShow.Text+=myDataTable.Rowsij;rtbShow.Text+=”n”;方法二:DataTable對象存放數(shù)據(jù)的方式就像表格一樣(二維數(shù)組),可以使用嵌套的foreach。循環(huán),逐一取得DataTable對象所有字段的數(shù)據(jù)去,其寫法如下Foreach(DataRo
53、w myDataRow in myDataTable.Rows)Foreach(object obj in myDataRow.ItemArray)rtbShow.Text+=obj.ToString(;6使用Command對象及SQL語法更新數(shù)據(jù)庫編好新增(Insert),刪除(Delete),修改(Update)數(shù)據(jù)的SQL語法后,就可以通過Command對象的ExecuteNonQuery方法來更新數(shù)據(jù)庫的數(shù)據(jù)。OleDbCommand myCommand;myCommand=new OleDbCommand(SQL語法,myConnection;/使用Command對象的ExecuteNonQuery方法更新數(shù)據(jù)庫myCommand. ExecuteNonQuery(; /返回受影響的數(shù)據(jù)的行數(shù)第12章 ADO.NET數(shù)據(jù)庫瀏覽與綁定本章將介紹如何使用DataView對象來排序與過濾數(shù)據(jù);如何使用BindingManagerBase對象來移動數(shù)據(jù)記錄指針;如何將兩個數(shù)據(jù)表關(guān)聯(lián);數(shù)據(jù)如何綁定等技巧;12.1 D
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年品牌傳播新趨勢:游戲化營銷策略研究與實踐指南與應(yīng)用案例報告
- 2025年農(nóng)業(yè)新型經(jīng)營主體培育與政策支持體系構(gòu)建報告
- 2025年農(nóng)業(yè)生物技術(shù)在種業(yè)中的生物技術(shù)產(chǎn)品技術(shù)創(chuàng)新與專利分析報告
- 小藥童的秘密花園講課件
- 商業(yè)決策中的教育數(shù)據(jù)分析方法與應(yīng)用
- 江蘇建筑職業(yè)技術(shù)學(xué)院《現(xiàn)代生物制藥工程原理》2023-2024學(xué)年第二學(xué)期期末試卷
- 云南能源職業(yè)技術(shù)學(xué)院《酒店服務(wù)綜合實訓(xùn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 學(xué)生自我認(rèn)知能力在潛能激發(fā)中的重要性分析
- 重慶城市科技學(xué)院《科技英語(精細(xì)化工)》2023-2024學(xué)年第二學(xué)期期末試卷
- 手足口病護(hù)理及治療講課件
- 人教版七年級初一生物上冊導(dǎo)學(xué)案(全冊)
- 一站式退休理財與養(yǎng)老規(guī)劃
- 倉庫打包發(fā)貨管理制度
- 一平臺機(jī)考《數(shù)據(jù)結(jié)構(gòu)》復(fù)習(xí)資料3
- 唐俊蘭分享材料終稿
- 2022-2023學(xué)年遼寧省沈陽市高一下學(xué)期期末數(shù)學(xué)試題【含答案】
- 中國歷史地理
- 砼攪拌車駕駛員安全生產(chǎn)責(zé)任制
- 部編版三年級道德與法治下冊《大家的“朋友”》教案及教學(xué)反思
- 世界各國國別簡稱三位英文縮寫
- 光伏電站的運(yùn)行維護(hù)
評論
0/150
提交評論