




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、C#C#程序設(shè)計第程序設(shè)計第6 6章使用章使用ADO.NETADO.NET管理管理數(shù)據(jù)數(shù)據(jù)目目 錄錄6.1 案例引入案例引入6.2 ADO.NET概述概述6.3 數(shù)據(jù)庫連接數(shù)據(jù)庫連接6.4 命令對象命令對象6.5 數(shù)據(jù)讀取器數(shù)據(jù)讀取器6.6 數(shù)據(jù)集數(shù)據(jù)集6.7 回到案例回到案例6.1 案例引入案例引入 某軟件公司要設(shè)計一個窗體程序來保存員工的相關(guān)信息。下面是公司在數(shù)據(jù)庫中已經(jīng)建立好了的兩張表,部門表和員工表:v 【實(shí)作任務(wù)】 員工信息保存功能的實(shí)現(xiàn)v 要求:根據(jù)數(shù)據(jù)庫中的這兩張表,設(shè)計相應(yīng)的窗體程序,當(dāng)管理員填寫好員工信息點(diǎn)擊提交按鈕后,填寫的信息能保存到數(shù)據(jù)庫員工表中 。6.1 案例引入案例
2、引入6.2 ADO.NET概述概述 v ADO.NET中定義了一組訪問和操作數(shù)據(jù)源的類,這些數(shù)據(jù)源除了常用的關(guān)系數(shù)據(jù)庫,也可以是普通的文本文件、Excel表格或者XML文件。v ADO.NET為連接訪問不同類型的數(shù)據(jù)庫,提供了4種數(shù)據(jù)庫客戶端命名空間,可以在.NET編程環(huán)境中訪問SQL Server數(shù)據(jù)庫、Oracle數(shù)據(jù)庫、ODBC數(shù)據(jù)源以及通過OLE DB技術(shù)實(shí)現(xiàn)的數(shù)據(jù)庫。 6.3 數(shù)據(jù)庫連接數(shù)據(jù)庫連接 在C#程序中要訪問SQL Server數(shù)據(jù)庫,我們需要一個連接對象來和SQL Server數(shù)據(jù)庫進(jìn)行連接,ADO.NET中提供了SqlConnection類來完成連接的工作。 6.3 數(shù)據(jù)
3、庫連接數(shù)據(jù)庫連接1. 引入命名空間System.Data.SqlClient using System.Data.SqlClient;2. 根據(jù)連接字符串創(chuàng)建一個Sql Server連接對象 SqlConnection conn = new SqlConnection( Data Source=.SQLEXPRESS;Initial Catalog=companydb; User ID=sa;Password=123456);3. 建立Sql Server連接 conn.Open();4. 進(jìn)行數(shù)據(jù)庫訪問操作5. 關(guān)閉Sql Server連接 conn.Close();6.4 命令對象命令對象
4、 v和數(shù)據(jù)庫建立連接后,就需要對數(shù)據(jù)庫進(jìn)行操作,ADO.NET中提供了多種數(shù)據(jù)庫的操作方式,本節(jié)介紹使用命令對象進(jìn)行數(shù)據(jù)庫操作的方式。 6.4 命令對象命令對象6.4.1 創(chuàng)建命令對象 v使用連接對象SqlConnection的CreateCommand方法來創(chuàng)建命令對象SqlCommand。 SqlCommand cmd = conn.CreateCommand();v使用SQL命令字符串和連接對象為參數(shù)實(shí)例化獲得Sql Server命令對象。如下面的代碼片段: String sql = SELECT * FROM tb_employee; SqlCommand cmd = new SqlC
5、ommand(sql,conn);6.4 命令對象命令對象6.4.2 執(zhí)行SQL文本命令 vExecuteNonQuery():執(zhí)行非查詢命令,返回受影響的記錄個數(shù)。vExecuteReader():執(zhí)行查詢命令,返回數(shù)據(jù)讀取器對象。vExecuteScalar():執(zhí)行查詢命令,返回結(jié)果集中第一行的第一列數(shù)據(jù)。 6.4 命令對象命令對象v6.4.3 執(zhí)行存儲過程 使用SqlCommand對象還可以執(zhí)行數(shù)據(jù)庫中的存儲過程,存儲過程(Stored Procedure)是在數(shù)據(jù)庫系統(tǒng)中一組為了完成特定功能的SQL語句集,經(jīng)編譯后存儲在數(shù)據(jù)庫中,用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶
6、有參數(shù))來執(zhí)行它。 6.5 數(shù)據(jù)讀取器數(shù)據(jù)讀取器 v6.5.1 數(shù)據(jù)讀取器概述v上節(jié)中介紹的SqlCommand對象的ExecuteReader()方法會返回一個數(shù)據(jù)讀取器SqlDataReader對象,通過這個對象能很方便的讀取出查詢結(jié)果。使用數(shù)據(jù)讀取器對象只能以往前和只讀的方式獲取查詢數(shù)據(jù),每次從數(shù)據(jù)庫服務(wù)器端檢索一條記錄,放入客戶端的緩沖區(qū),因此速度快。 6.5 數(shù)據(jù)讀取器數(shù)據(jù)讀取器6.5.2 查詢數(shù)據(jù) v /通過Sql Server連接對象獲得Sql Server命令對象v SqlCommand cmd = conn.CreateCommand();v /設(shè)置SQL命令字符串v cmd
7、.CommandText = select name,age from tb_employee;v /執(zhí)行非查詢類型的SQL語句v SqlDataReader reader = cmd.ExecuteReader();v /在訪問數(shù)據(jù)之前先調(diào)用DataReader對象的Read方法。v while (reader.Read()v v Console.WriteLine(String.Format(0, 1,v reader0, reader1);v v /關(guān)閉DataReader對象v reader.Close(); 6.5 數(shù)據(jù)讀取器數(shù)據(jù)讀取器6.5.3 獲取表的信息 v SqlComman
8、d cmd = conn.CreateCommand(); v cmd.CommandText = select * from tb_employee; v SqlDataReader reader = cmd.ExecuteReader();v /通過DataReader對象獲取DataTabel對象v DataTable dataTable = reader.GetSchemaTable();v /遍歷DataTabel對象中的行對象,獲取表的列名和數(shù)據(jù)類型v foreach (DataRow row in dataTable.Rows) v Console.WriteLine(Strin
9、g.Format(0,1,v rowcolumnname,rowdatatype);v v reader.Close(); 6.6 數(shù)據(jù)集數(shù)據(jù)集 6.6.1 數(shù)據(jù)集與數(shù)據(jù)適配器 除了使用前面介紹的SqlCommand和SqlDataReader來訪問數(shù)據(jù)庫,在ADO.NET中還提供了一個數(shù)據(jù)集DataSet類,這個類具有很強(qiáng)大的數(shù)據(jù)處理功能,所有復(fù)雜的數(shù)據(jù)操作都需要使用它, DataSet是ADO.NET的核心類。DataSet需要結(jié)合數(shù)據(jù)適配器DataAdapter一起使用,SqlDataAdapter表示一組 SQL 命令和一個數(shù)據(jù)庫連接,用于填充 DataSet和更新數(shù)據(jù)源。 6.6 數(shù)
10、據(jù)集數(shù)據(jù)集v /通過連接對象創(chuàng)建一個SqlDataAdapter對象v SqlDataAdapter da = new SqlDataAdapter(select * from tb_employee, conn); v /創(chuàng)建一個DataSet對象v DataSet ds = new DataSet();v /將SqlDataAdapter對象的查詢結(jié)果填充到DataSet對象中v da.Fill(ds, employee);v /獲取DataSet對象中students表第一行name列的數(shù)據(jù)v foreach (DataRow row in ds.Tablesemployee.Rows)
11、v v /在控制臺中輸出當(dāng)前行name列的數(shù)據(jù)v Console.Write(rowname+ );v /在控制臺中輸出當(dāng)前行age列的數(shù)據(jù)v Console.Write(rowage + );v /在控制臺中輸出當(dāng)前行g(shù)ender列的數(shù)據(jù)v Console.WriteLine(rowgender);v 6.6 數(shù)據(jù)集數(shù)據(jù)集 6.6.2 數(shù)據(jù)集中的數(shù)據(jù)修改 v / 通過連接對象創(chuàng)建一個SqlDataAdapter對象v SqlDataAdapter da = new SqlDataAdapter(select * from tb_employee where name=李文, conn); v
12、 /為SqlDataAdapter創(chuàng)建一個SqlCommandBuilder對象v SqlCommandBuilder cb = new SqlCommandBuilder(da);v /創(chuàng)建一個DataSet對象v DataSet ds = new DataSet();v /將SqlDataAdapter對象的查詢結(jié)果填充到DataSet對象中v da.Fill(ds, employee);v /判斷是否有記錄查詢出來v if (ds.Tablesemployee.Rows.Count = 0)v v Console.Write(員工表中沒有名為李文的記錄);v Console.Read()
13、;v return;v 6.6 數(shù)據(jù)集數(shù)據(jù)集v /獲取DataSet對象中employee表第一行name列的數(shù)據(jù)v String namestr = (String)ds.Tablesemployee.Rows0name;v Console.Write(更新前name列為:);v Console.WriteLine(namestr + );v /給DataSet對象中employee表第一行name列的數(shù)據(jù)賦值v ds.Tablesemployee.Rows0name = 李雯;v /將所做修改更新到數(shù)據(jù)庫中v da.Update(ds, employee);v Console.Write(
14、更新后name列為:);v Console.WriteLine(ds.Tablesemployee.Rows0name);6.6 數(shù)據(jù)集數(shù)據(jù)集6.6.3 添加記錄行 v /通過連接對象創(chuàng)建一個SqlDataAdapter對象v SqlDataAdapter da = new SqlDataAdapter(select * from tb_employee, conn);v /為SqlDataAdapter創(chuàng)建一個SqlCommandBuilder對象v SqlCommandBuilder cb = new SqlCommandBuilder(da);v /創(chuàng)建一個DataSet對象v Data
15、Set ds = new DataSet();v /將SqlDataAdapter對象的查詢結(jié)果填充到DataSet對象中v da.Fill(ds, employee);v /新建一個數(shù)據(jù)行v DataRow newrow = ds.Tablesemployee.NewRow();v /為新數(shù)據(jù)行的各列賦值v newrowname = 張力;v newrowage = 26;v newrowgender = M;v /將已賦值的新數(shù)據(jù)行加到表中v ds.Tablesemployee.Rows.Add(newrow);v /將所做修改更新到數(shù)據(jù)庫中v da.Update(ds, employee
16、); 6.6 數(shù)據(jù)集數(shù)據(jù)集6.6.4 在DataSet中訪問多個表 v在在DataSet中除了對單個表進(jìn)行訪問外,還中除了對單個表進(jìn)行訪問外,還可以訪問和維護(hù)多個表以及它們之間的關(guān)可以訪問和維護(hù)多個表以及它們之間的關(guān)系。每個系。每個DataSet中都有一個中都有一個Relations屬屬性來表示其中多個表對象性來表示其中多個表對象DataTable之間的之間的關(guān)系,關(guān)系,Relations屬性是包含屬性是包含DataRelation對象的集合,對象的集合,DataRelation對象用于表示對象用于表示兩個兩個DataTable對象之間的關(guān)系。對象之間的關(guān)系。 6.6 數(shù)據(jù)集數(shù)據(jù)集v /通過連
17、接對象創(chuàng)建一個訪問員工表的SqlDataAdapter對象v SqlDataAdapter da = new SqlDataAdapter(select * from tb_employee, conn); v /創(chuàng)建一個DataSet對象v DataSet ds = new DataSet();v /將查詢結(jié)果填充到DataSet對象的名為employee的表中v da.Fill(ds, employee);v /通過連接對象創(chuàng)建一個訪問部門表的SqlDataAdapter對象v SqlDataAdapter depda = v new SqlDataAdapter(select * fro
18、m tb_department, conn);v /將查詢結(jié)果填充到DataSet對象的名為department的表中v depda.Fill(ds, department); 6.6 數(shù)據(jù)集數(shù)據(jù)集v /在DataSet對象中創(chuàng)建表department和表employee一對多的關(guān)系v DataRelation dr = ds.Relations.Add(empdeprel,v ds.Tablesdepartment.Columnsid,v ds.Tablesemployee.Columnsdepid);v /遍歷表department的所有行v foreach (DataRow deprow in ds.Tablesdepartment.Rows)v /輸出當(dāng)前行數(shù)據(jù)的部門名稱 v Console.WriteLine(deprowname+ );v /遍歷某一部門的所有員工v foreach (DataRow emprow in deprow.GetChildRows(dr)v /輸出當(dāng)前行數(shù)據(jù)的員工姓名 v Console.WriteLine(emprowname + ); v v 6.7 回到案例回到案例 解決本章案例的步驟為:1. 啟動VS2010并新
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 團(tuán)建勞務(wù)協(xié)議書
- 協(xié)議書摩托車注意事項(xiàng)
- 項(xiàng)目合作利潤分成協(xié)議書
- PVC證卡的種類及簡單制作流程
- 教案、作業(yè)檢查通報
- 2025年安規(guī)考試練習(xí)題庫及答案
- 小學(xué)平移旋轉(zhuǎn)試卷及答案
- 2025年高級電工證考試試題及答案
- 2025年工程項(xiàng)目管理考點(diǎn)豐富試題及答案
- 2025年基礎(chǔ)護(hù)理學(xué)題庫及答案第16章
- 門診護(hù)理質(zhì)量持續(xù)改進(jìn)方案
- 全國工會財務(wù)知識競賽題庫及答案
- 材料科學(xué)基礎(chǔ)課件
- 銀行招聘考試每日一練 2022.3.26模擬卷(含答案解析)
- 新課標(biāo)背景下課堂教學(xué)中的跨學(xué)科教學(xué)探究 論文
- 人文精神與科學(xué)素養(yǎng)
- GB/T 7562-2018商品煤質(zhì)量發(fā)電煤粉鍋爐用煤
- GB/T 36524-2018沖模矩形截面壓縮彈簧安裝尺寸和顏色標(biāo)識
- 2004三菱格藍(lán)迪grandis維修手冊
- T∕IAC CAMRA 20.3-2022 事故汽車維修工時測定及應(yīng)用規(guī)范 第3部分:拆裝工時
- 錨的作用與錨泊解析課件
評論
0/150
提交評論