第21章之一 連接層課件_第1頁
第21章之一 連接層課件_第2頁
第21章之一 連接層課件_第3頁
第21章之一 連接層課件_第4頁
第21章之一 連接層課件_第5頁
已閱讀5頁,還剩53頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

第21章節(jié)DAO第21章之一:連接層第21章節(jié)DAO21.1概述是微軟以類似于ADO的方式設計并實現(xiàn)的專用于.NET平臺的新技術(shù)。它提供一個面向?qū)ο蟮臄?shù)據(jù)存取構(gòu)架??梢允褂?/p>

的兩個組件來訪問和處理數(shù)據(jù):.NETFramework數(shù)據(jù)提供程序DataSet第21章節(jié)DAONETFramework數(shù)據(jù)提供程序.NETFramework數(shù)據(jù)提供程序是專門為數(shù)據(jù)處理以及快速地只進、只讀訪問數(shù)據(jù)而設計的組件。Connection對象提供與數(shù)據(jù)源的連接。Command對象使您能夠訪問用于返回數(shù)據(jù)、修改數(shù)據(jù)、運行存儲過程以及發(fā)送或檢索參數(shù)信息的數(shù)據(jù)庫命令。DataReader從數(shù)據(jù)源中提供高性能的數(shù)據(jù)流。最后,DataAdapter提供連接DataSet對象和數(shù)據(jù)源的橋梁。DataAdapter使用Command對象在數(shù)據(jù)源中執(zhí)行SQL命令,以便將數(shù)據(jù)加載到DataSet中,并使對DataSet中數(shù)據(jù)的更改與數(shù)據(jù)源保持一致。第21章節(jié)DAODataSet

DataSet專門為獨立于任何數(shù)據(jù)源的數(shù)據(jù)訪問而設計。因此,它可以用于多種不同的數(shù)據(jù)源,用于XML數(shù)據(jù),或用于管理應用程序本地的數(shù)據(jù)。DataSet包含一個或多個DataTable對象的集合,這些對象由數(shù)據(jù)行和數(shù)據(jù)列以及有關(guān)DataTable對象中數(shù)據(jù)的主鍵、外鍵、約束和關(guān)系信息組成。第21章節(jié)DAO選擇DataReader或DataSet

在決定應用程序應使用DataReader還是應使用DataSet時,應考慮應用程序所需的功能類型。DataSet用于執(zhí)行以下功能:在應用程序中將數(shù)據(jù)緩存在本地,以便可以對數(shù)據(jù)進行處理。如果只需要讀取查詢結(jié)果,DataReader是更好的選擇。在層間或從XMLWeb服務對數(shù)據(jù)進行遠程處理。與數(shù)據(jù)進行動態(tài)交互,例如綁定到Windows窗體控件或組合并關(guān)聯(lián)來自多個源的數(shù)據(jù)。對數(shù)據(jù)執(zhí)行大量的處理,而不需要與數(shù)據(jù)源保持打開的連接,從而將該連接釋放給其他客戶端使用。第21章節(jié)DAO21.2數(shù)據(jù)提供程序第21章節(jié)DAO

操作數(shù)據(jù)庫結(jié)構(gòu)圖本章內(nèi)容第21章節(jié)DAO.NET數(shù)據(jù)提供程序類型.NETFramework數(shù)據(jù)提供程序

說明SQLServer

.NET數(shù)據(jù)提供程序MicrosoftSQLServer數(shù)據(jù)源System.Data.SqlClient命名空間OLEDB

.NET數(shù)據(jù)提供程序OLEDB公開的數(shù)據(jù)源System.Data.OleDb

命名空間ODBC.NET數(shù)據(jù)提供程序ODBC公開的數(shù)據(jù)源System.Data.Odbc

命名空間Oracle

.NET數(shù)據(jù)提供程序Oracle數(shù)據(jù)源System.Data.OracleClient命名空間第21章節(jié)DAO21.6創(chuàng)建Autolot數(shù)據(jù)庫4/4/2024第21章節(jié)DAO21.7連接和檢索數(shù)據(jù)②數(shù)據(jù)庫命令對象CommandSqlCommand、OleDbCommand提供存取數(shù)據(jù)庫的命令(包括:Select、Insert、Delete、Update)提供數(shù)據(jù)源(庫)的連接,針對不同的數(shù)據(jù)庫有不同的連接對象;①數(shù)據(jù)庫連接對象ConnectionSqlConnection、OleDbConnection.NET數(shù)據(jù)提供程序針對SQL、OLEDB兩組數(shù)據(jù)源,各有四個對象:③數(shù)據(jù)庫閱讀器DataReader通過Command執(zhí)行SQL命令可提供一個向前的數(shù)據(jù)流。供應用程序讀取。DataAdapter含兩個主要成員,Connection及一組Command對象,通過構(gòu)造函數(shù)可以為這兩個對象賦值。它可以向DataSet裝載表數(shù)據(jù)。④數(shù)據(jù)庫適配器DataAdapterSqlDataAdapter、OleDbDataAdapte第21章節(jié)DAO21.8使用Connection應用程序數(shù)據(jù)源請求數(shù)據(jù)Connection橋梁第21章節(jié)DAO連接數(shù)據(jù)庫示例連接到本機的AutoLot數(shù)據(jù)庫演示示例1:測試

AutoLot

數(shù)據(jù)庫連接第21章節(jié)DAO示例1代碼分析關(guān)鍵代碼回顧//數(shù)據(jù)庫連接字符串stringconnString="DataSource=.;InitialCatalog=AutoLot;UserID=sa;pwd=***";//創(chuàng)建

Connection對象SqlConnectionconnection=newSqlConnection(connString);

//打開數(shù)據(jù)庫連接connection.Open();Console.WriteLine("打開數(shù)據(jù)庫連接成功");

//關(guān)閉數(shù)據(jù)庫連接connection.Close();Console.WriteLine("關(guān)閉數(shù)據(jù)庫連接成功");表示本機第21章節(jié)DAOConnection主要成員必須顯式關(guān)閉連接屬性名稱說明ConnectionString連接字符串方法說明Open()打開數(shù)據(jù)庫連接Close()關(guān)閉數(shù)據(jù)庫連接第21章節(jié)DAO連接數(shù)據(jù)庫步驟連接數(shù)據(jù)庫的步驟:1、定義連接字符串2、創(chuàng)建Connection對象3、打開與數(shù)據(jù)庫的連接DataSource=服務器名;InitialCatalog=數(shù)據(jù)庫名;UserID=用戶名;Pwd=密碼SqlConnectionconnection=newSqlConnection(connString);連接字符串connection.Open();沒有密碼,可省略第21章節(jié)DAOConnection對象命名空間對應的Connection對象System.Data.SqlClientSqlConnectionSystem.Data.OleDbOleDbConnectionSystem.Data.OdbcOdbcConnectionSystem.Data.OracleClientOracleConnection不同命名空間的Connection對象第21章節(jié)DAO小結(jié)連接到本機的pubs數(shù)據(jù)庫//連接字符串stringconnString="DataSource=.;InitialCatalog=pubs;UserID=sa";//創(chuàng)建Connection對象

SqlConnectionconnection=newSqlConnection(connString);connection.Open();//打開數(shù)據(jù)庫連接……connection.Close();//關(guān)閉數(shù)據(jù)庫連接關(guān)鍵代碼參考答案第21章節(jié)DAO為什么使用異常處理應用程序打開數(shù)據(jù)庫處理數(shù)據(jù)……數(shù)據(jù)源與數(shù)據(jù)庫的連接中斷無法打開數(shù)據(jù)庫無法操作數(shù)據(jù)出現(xiàn)意外錯誤!出現(xiàn)異常第21章節(jié)DAO異常處理異常:在運行時發(fā)生的錯誤異常處理:預知可能發(fā)生的異常,在程序中編碼處理操作數(shù)據(jù)庫時可能發(fā)生異常:無法打開數(shù)據(jù)庫無法讀取數(shù)據(jù)數(shù)據(jù)操作出錯

……第21章節(jié)DAO如何處理異常2-1使用try—catch塊捕獲和處理異常try{connection.Open();//……connection.Close();}catch(處理的異常類型){//錯誤處理代碼}處理異常的代碼出現(xiàn)異常,跳到catch否則正常向下執(zhí)行出現(xiàn)異常,跳轉(zhuǎn)連接關(guān)閉語句將不被執(zhí)行包含可能出現(xiàn)異常的代碼第21章節(jié)DAO如何處理異常2-2finally塊——無論是否發(fā)生異常,都會執(zhí)行try{connection.open();//……}catch(處理的異常類型){

}finally{connection.Close();}可能出現(xiàn)異常的代碼處理異常的代碼是否發(fā)生異常數(shù)據(jù)庫連接都會關(guān)閉必須執(zhí)行的語句放在finally中無論如何都會執(zhí)行的代碼第21章節(jié)DAOconnection.Open();Console.WriteLine("打開數(shù)據(jù)庫連接完畢");connection.Close();Console.WriteLine("關(guān)閉數(shù)據(jù)庫連接完畢");處理異常修改示例1的代碼,增加try語句塊演示示例2:使用try-catch-finally第21章節(jié)DAO小結(jié)如果try中沒有出現(xiàn)異常,輸出哪幾行信息?try{//…可能出現(xiàn)異常的代碼

Console.WriteLine("try塊");}catch(Exceptione){Console.WriteLine("catch塊");}finally{Console.WriteLine("finally塊");}顯示顯示不顯示第21章節(jié)DAO使用<connectionStrings>元素添加config文件<connectionStrings><addname="AutoLotSqlProvider"connectionString="DataSource=.;InitialCatalog=AutoLot;PersistSecurityInfo=True;UserID=sa;Password=***********"/></connectionStrings>提取連接字符串stringConnString=ConfigurationManager.ConnectionStrings["AutoLotSqlProvider"].ConnectionString;注:首先,添加對System.Configuration.dll文件的引用;第21章節(jié)DAO使用usingusing(SqlConnectionconn=newSqlConnection(ConnString))

{

}第21章節(jié)DAO練習——測試AutoLot的數(shù)據(jù)連接需求說明:創(chuàng)建MyAutoLotBase控制臺程序新建用于操作數(shù)據(jù)庫的DBOperation類在DBOperation類中自定義數(shù)據(jù)庫連接方法,實現(xiàn)連接和關(guān)閉AutoLot數(shù)據(jù)庫完成時間:20分鐘第21章節(jié)DAO練習——為連接操作添加異常需求說明:為數(shù)據(jù)庫連接增加異常處理將數(shù)據(jù)庫服務停止,再次測試連接操作完成時間:15分鐘第21章節(jié)DAO21.8.3使用Command應用程序打開數(shù)據(jù)庫處理數(shù)據(jù)……數(shù)據(jù)源Connection?怎樣處理數(shù)據(jù)Command提交SQL命令并從數(shù)據(jù)源中返回結(jié)果第21章節(jié)DAOCommand的主要成員屬性名稱說明ConnectionCommand對象使用的數(shù)據(jù)庫連接CommandText執(zhí)行的SQL語句方法說明

ExecuteNonQuery執(zhí)行不返回行的語句,如UPDATE等ExecuteReader返回DataReader對象ExecuteScalar返回單個值,如執(zhí)行COUNT(*)第21章節(jié)DAO操作數(shù)據(jù)庫示例完成MySchoolBase系統(tǒng)的登錄功能1、驗證管理員的用戶名和密碼是否存在2、驗證通過,顯示登錄成功信息第21章節(jié)DAO使用Command步驟使用Command步驟:1、創(chuàng)建數(shù)據(jù)庫連接2、定義SQL語句3、創(chuàng)建Command對象4、執(zhí)行命令SqlConnectionconnection=newSqlConnection(connString);stringsql="selectcount(*)fromAdminwhereLoginId='

"+userName

+"

'andLoginPwd='

"+pwd+"

'";connection.Open();//打開數(shù)據(jù)庫連接SqlCommandcommand=newSqlCommand(sql,connection);intnum=(int)command.ExecuteScalar();示例3關(guān)鍵代碼:執(zhí)行命令前,必須打開數(shù)據(jù)庫連接!要進行類型轉(zhuǎn)換!第21章節(jié)DAO分析示例3定義一個ValidateUser()方法需要Connection和Command對象分兩步實現(xiàn)驗證:1、建立數(shù)據(jù)庫連接2、驗證用戶是否存在

定義一個CheckLogin()方法用于顯示ValidateUser()返回的結(jié)果信息第21章節(jié)DAO分析驗證方法ValidateUser()方法框架1、驗證的結(jié)果:通過,不通過返回值為bool型2、方法需要:用戶名,密碼值方式傳參3、不通過的原因:用戶名或密碼不存在、其他原因引用方式傳參

publicboolValidateUser

(stringuserName,

stringpwd,

ref

stringstrMsg){}第21章節(jié)DAO用戶驗證方法具體實現(xiàn)第一步:創(chuàng)建數(shù)據(jù)庫連接第二步:查詢用戶是否存在SELECTCOUNT(*)ExecuteScalar()方法查詢ValidateUser()方法具體實現(xiàn)演示示例3:檢查MySchoolBase用戶登錄第21章節(jié)DAO21.9使用DataReader應用程序毛毛,電信系,優(yōu)秀毛毛姓名:學校:電信系成績:優(yōu)秀DataReader怎樣讀取數(shù)據(jù)庫的數(shù)據(jù)?使用DataReader對象數(shù)據(jù)庫第21章節(jié)DAODataReader對象每次讀取一行數(shù)據(jù)命名空間對應的DataReader對象System.Data.SqlClientSqlDataReaderSystem.Data.OleDbOleDbDataReaderSystem.Data.OdbcOdbcDataReaderSystem.Data.OracleClientOracleDataReader第21章節(jié)DAO使用DataReader查詢數(shù)據(jù)在數(shù)據(jù)庫操作類中創(chuàng)建讀取學生列表方法使用DataReader讀取學生學號和姓名在業(yè)務信息類中創(chuàng)建輸出信息方法在菜單選項中添加輸出信息方法如何查看學生學號、姓名列表?演示示例:使用DataReader

讀取數(shù)據(jù)第21章節(jié)DAO示例2代碼分析關(guān)鍵代碼回顧:示例2源代碼command.ExecuteReader();//執(zhí)行查詢SqlDataReaderreader=_dbOper.GetStudentList();//取得學生用戶列表方法…//循環(huán)讀取DataReaderwhile(reader.Read()){Console.Write(reader["StudentNo"]+"\t");Console.WriteLine(reader["StudentName"]);}…//關(guān)閉DataReaderreader.Close();循環(huán)讀取數(shù)據(jù)行并顯示第21章節(jié)DAODataReader的主要成員屬性說明HasRows是否返回了結(jié)果方法說明

Read前進到下一行記錄Close關(guān)閉DataReader對象DataReader的主要成員:第21章節(jié)DAODataReader使用步驟小結(jié)使用DataReader檢索數(shù)據(jù)的步驟:1、創(chuàng)建Command對象2、調(diào)用ExecuteReader()

創(chuàng)建DataReader對象3、使用DataReader的Read()

方法逐行讀取數(shù)據(jù)4、讀取某列的數(shù)據(jù),(type)dataReader[]5、關(guān)閉

DataReader對象獲取某列的值:方法一:指定列的索引,從0開始方法二:指定列名注意:DataReader使用后必須關(guān)閉第21章節(jié)DAO指導——實現(xiàn)學生姓名查詢訓練要點:DataReader對象的使用需求說明:當管理員輸入操作鍵“3”時,給予輸入學號的提示,根據(jù)輸入查詢Student表中匹配學號的學生姓名,將學生學號和姓名一并輸出講解需求說明第21章節(jié)DAO實現(xiàn)思路1、在數(shù)據(jù)庫操作類中創(chuàng)建查詢學生姓名的方法

2、使用StringBuilder拼寫帶條件的Sql語句3、使用DataReader對象的Read()方法讀取學生姓名并返回4、在業(yè)務類中調(diào)用查詢方法并輸出返回的學生姓名難點指導:執(zhí)行Command對象的ExecuteReader()方法得到Reader對象學號為主鍵,只能讀取至多一行信息,固使用if語句完成時間:25分鐘指導——實現(xiàn)學生姓名查詢第21章節(jié)DAO指導——實現(xiàn)學生信息查詢訓練要點:DataReader對象的使用Sql語句的拼寫需求說明:當管理員輸入操作鍵“4”時,給予輸入學生姓名的提示,根據(jù)姓名模糊查詢Student表中除密碼外的全部信息并顯示,年級根據(jù)實際編號顯示年級名稱講解需求說明第21章節(jié)DAO實現(xiàn)思路1、在數(shù)據(jù)庫操作類中創(chuàng)建查詢學生信息的方法

2、使用StringBuilder拼寫內(nèi)連接的Sql語句3、使用DataReader對象的Read()方法循環(huán)讀取學生信息4、在業(yè)務類中調(diào)用查詢學生信息的方法并輸出關(guān)鍵代碼:完成時間:25分鐘指導——實現(xiàn)學生信息查詢SELECTA.[StudentNo],A.[StudentName],A.[Sex],B.[GradeName],A.[Phone],A.[Adress],A.[BornDate],A.[Email]FROM[Student]asA,[Grade]asBWHERE[StudentName]like‘%學生姓名%'ANDA.[GradeId]=B.[GradeId]第21章節(jié)DAO操作數(shù)據(jù)應用程序毛毛,電信系,良好毛毛姓名:系部:電信系成績:良好ExecuteNonQuery如何對數(shù)據(jù)庫的數(shù)據(jù)進行增刪改?使用ExecuteNonQuery()方法數(shù)據(jù)庫第21章節(jié)DAO操作數(shù)據(jù)示例1、構(gòu)件增加年級信息的Sql語句2、創(chuàng)建SqlCommand對象3、使用ExecuteNonQuery()

方法向數(shù)據(jù)庫增加記錄4、處理返回結(jié)果如何實現(xiàn)新增年級信息呢?演示示例:向數(shù)據(jù)庫增加記錄第21章節(jié)DAO示例3代碼分析關(guān)鍵代碼回顧:示例3源代碼StringBuildersb=newStringBuilder();sb.AppendLine("INSERTINTO");sb.AppendLine("[Grade]");sb.AppendLine("VALUES");sb.AppendLine("('"+gradeName+"')");//創(chuàng)建command對象SqlCommandcommand=newSqlCommand(sb.ToString(),conn);//執(zhí)行命令command.ExecuteNonQuery();……返回受影響記錄的行數(shù)單引號的位置第21章節(jié)DAOExecuteNonQuery()方法小結(jié)該方法執(zhí)行指定的sql語句返回受影響的行數(shù)使用ExecuteNonQuery()的步驟小結(jié):1、創(chuàng)建Connection對象2、定義sql語句3、創(chuàng)建Command對象4、執(zhí)行ExecuteNonQuery()方法5、根據(jù)返回的結(jié)果進行處理第21章節(jié)DAO練習——實現(xiàn)年級信息的創(chuàng)建需求說明:實現(xiàn)將管理員輸入的年級名稱添加到年級表中,并輸出添加結(jié)果提示完成時間:20分鐘第21章節(jié)DAO指導——實現(xiàn)出生日的修改訓練要點:類型轉(zhuǎn)換Command對象的ExecuteNonQuery()方法需求說明:當管理員輸入操作鍵“6”時,給予輸入要修改的學生學號和修改后的出生日的提示,根據(jù)學號更新Student表中的出生日出生日輸入格式錯誤、更新成功以及異常發(fā)生給出相應提示信息確認數(shù)據(jù)庫中的數(shù)據(jù)被成功更新講解需求說明第21章節(jié)DAO實現(xiàn)思路1、在數(shù)據(jù)庫操作類中創(chuàng)建更新方法

2、使用StringBuilder拼寫條件更新的Sql語句3、使用Command對象的ExecuteNonQuery()方法根據(jù)學號更新出生日4、在業(yè)務類中調(diào)用更新方法,使用異常處理捕獲輸入錯誤的出生日難點指導:執(zhí)行Command對象的ExecuteNonQuery()方法執(zhí)行對數(shù)據(jù)庫的修改操作可以使用Convert.ToDateTime()方法轉(zhuǎn)換管理員輸入的出生日完成時間:25分鐘指導——實現(xiàn)出生日的修改第21章節(jié)DAO練習——實現(xiàn)學生信息的刪除需求說明:當管理員輸入操作鍵“7”時,給予輸入刪除的學生學號的提示根據(jù)學號刪除Student表中的學生信息確認數(shù)據(jù)庫中的數(shù)據(jù)被成功刪除完成時間:20分鐘第21章節(jié)DAO21.10構(gòu)建可重用的數(shù)據(jù)訪問庫構(gòu)建AutoLotDAL.dll類庫項目

//連接數(shù)據(jù)庫privateSqlConnectionconn=null;publicvoidOpenConnection(stringconnString)

{conn=newSqlConnection(connString);conn.Open();

}publicvoidCloseConnection()

{conn.Close();

}第21章節(jié)DAO

//只讀查詢返回DataReaderpublicSqlDataReaderexeReader(stringcmdString,CommandTypecmdType,SqlParameter[]parameters)

{using(SqlCommandcmd=newSqlCommand())

{PrepareCommand(cmd,cmdString,cmdType,parameters);SqlDataReaderdr=cmd.ExecuteReader();returndr;

}

}第21章節(jié)DAO

//通用函數(shù)privatevoid

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論