第六章數(shù)據(jù)庫編程連接數(shù)據(jù)庫_第1頁
第六章數(shù)據(jù)庫編程連接數(shù)據(jù)庫_第2頁
第六章數(shù)據(jù)庫編程連接數(shù)據(jù)庫_第3頁
第六章數(shù)據(jù)庫編程連接數(shù)據(jù)庫_第4頁
第六章數(shù)據(jù)庫編程連接數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第六章數(shù)據(jù)庫編程連接數(shù)據(jù)庫第一頁,共四十五頁,2022年,8月28日本章目標了解ADO.NET結構了解ADO.NET的組件使用Command對象和Connection對象使用ADO.NET進行事務處理第二頁,共四十五頁,2022年,8月28日ADO.NET

簡介2-1中央數(shù)據(jù)庫用戶需要時,可以隨時訪問數(shù)據(jù)用戶計算機向數(shù)據(jù)庫服務器發(fā)送請求客戶端不同的訪問方法和技術ADO.NET第三頁,共四十五頁,2022年,8月28日ADO.NET

簡介2-2.NETFrameworkADO.NETSystem.Data命名空間以ActiveX數(shù)據(jù)對象(ADO)為基礎以XML(擴展標記語言)為格式傳送和接收數(shù)據(jù)第四頁,共四十五頁,2022年,8月28日ADO.NET

的優(yōu)點互操作性性能可伸縮性標準化可編程能力第五頁,共四十五頁,2022年,8月28日ADO.NET對數(shù)據(jù)庫的訪問(3-1)將數(shù)據(jù)傳遞到用戶界面時,ADO.NET采用XML格式數(shù)據(jù)已緩存斷開式數(shù)據(jù)結構第六頁,共四十五頁,2022年,8月28日ADO.NET對數(shù)據(jù)庫的訪問(3-2)對于Insert,Update,Delete等單向操作應用程序

數(shù)據(jù)庫1、用Connection.Open打開數(shù)據(jù)庫2、用DataAdaptor.Command或者Command.Execute執(zhí)行命令3、關閉數(shù)據(jù)庫Insert用InsertCommandDelete用DeleteCommandUpdate用UpdateCommand第七頁,共四十五頁,2022年,8月28日ADO.NET對數(shù)據(jù)庫的訪問(3-3)應用程序

數(shù)據(jù)庫關閉數(shù)據(jù)庫1、用Connection.Open建立連接2、用DataAdaptor.SelectCommand執(zhí)行命令DataAdaptor.Fill對于Select的雙向操作

DataSet第八頁,共四十五頁,2022年,8月28日.NET數(shù)據(jù)提供程序5-1ConnectionCommandDataReaderDataAdapterADO.NETDataSet.NETFramework數(shù)據(jù)提供程序1、SQLClient2、OLEDB3、Oracle4、ODBC由以下各項組成的集合:第九頁,共四十五頁,2022年,8月28日.NET數(shù)據(jù)提供程序5-2

客戶端服務器數(shù)據(jù)集2、將數(shù)據(jù)發(fā)送到數(shù)據(jù)集A、客戶端修改數(shù)據(jù)集3、數(shù)據(jù)集傳遞給客戶端B、將修改后的數(shù)據(jù)集傳遞給服務器1、客戶端從服務器請求數(shù)據(jù)1,2,3是從服務器檢索數(shù)據(jù)的過程A、B是對數(shù)據(jù)庫修改的過程第十頁,共四十五頁,2022年,8月28日.NET數(shù)據(jù)提供程序5-3用于SQLServer的.NETFramework數(shù)據(jù)提供程序System.Data.SqlClient命名空間僅限于連接SQLServer數(shù)據(jù)庫7.0或更高版本第十一頁,共四十五頁,2022年,8月28日.NET數(shù)據(jù)提供程序5-4用于OLEDB的.NETFramework數(shù)據(jù)提供程序第十二頁,共四十五頁,2022年,8月28日.NET數(shù)據(jù)提供程序5-5用于ODBC的.NETFramework數(shù)據(jù)提供程序的命名空間用于Oracle的.NETFramework數(shù)據(jù)提供程序的命名空間System.Data.Odbc命名空間System.Data.OracleClient命名空間第十三頁,共四十五頁,2022年,8月28日知識點小結使用的名稱空間SQLServer

OLEDB

Oracle ODBC 第十四頁,共四十五頁,2022年,8月28日為什么使用Connection應用程序數(shù)據(jù)源請求數(shù)據(jù)Connection橋梁第十五頁,共四十五頁,2022年,8月28日示例1代碼分析關鍵代碼回顧//數(shù)據(jù)庫連接字符串stringconnString="DataSource=.;InitialCatalog=MySchool;UserID=sa";//創(chuàng)建Connection對象SqlConnectionconnection=newSqlConnection(connString);

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

//關閉數(shù)據(jù)庫連接connection.Close();MessageBox.Show("關閉數(shù)據(jù)庫連接成功");表示本機第十六頁,共四十五頁,2022年,8月28日Connection主要成員必須顯式關閉連接屬性說明ConnectionString連接字符串方法說明Open打開數(shù)據(jù)庫連接Close關閉數(shù)據(jù)庫連接第十七頁,共四十五頁,2022年,8月28日連接數(shù)據(jù)庫步驟連接數(shù)據(jù)庫的步驟:1、定義連接字符串2、創(chuàng)建Connection對象3、打開與數(shù)據(jù)庫的連接DataSource=服務器名;InitialCatalog=數(shù)據(jù)庫名;UserID=用戶名;Pwd=密碼SqlConnectionconnection=newSqlConnection(connString);連接字符串connection.Open();沒有密碼,可省略第十八頁,共四十五頁,2022年,8月28日Connection對象命名空間對應的Connection對象System.Data.SqlClientSqlConnectionSystem.Data.OleDbOleDbConnectionSystem.Data.OdbcOdbcConnectionSystem.Data.OracleClientOracleConnection不同命名空間的Connection對象第十九頁,共四十五頁,2022年,8月28日小結連接到本機的pubs數(shù)據(jù)庫//連接字符串stringconnString="DataSource=.;InitialCatalog=pubs;UserID=sa";//創(chuàng)建Connection對象

SqlConnectionconnection=newSqlConnection(connString);connection.Open();//打開數(shù)據(jù)庫連接……connection.Close();//關閉數(shù)據(jù)庫連接關鍵代碼第二十頁,共四十五頁,2022年,8月28日為什么使用Command應用程序打開數(shù)據(jù)庫處理數(shù)據(jù)……數(shù)據(jù)源Connection?怎樣處理數(shù)據(jù)Command執(zhí)行命令并從數(shù)據(jù)源中返回結果第二十一頁,共四十五頁,2022年,8月28日Command的主要成員屬性說明ConnectionCommand對象使用的數(shù)據(jù)庫連接CommandText執(zhí)行的SQL語句方法說明ExecuteNonQuery執(zhí)行不返回行的語句,如UPDATE等ExecuteReader返回DataReader對象ExecuteScalar返回單個值,如執(zhí)行COUNT(*)第二十二頁,共四十五頁,2022年,8月28日使用Command步驟使用Command步驟:1、創(chuàng)建數(shù)據(jù)庫連接2、定義SQL語句3、創(chuàng)建Command對象4、執(zhí)行命令SqlConnectionconnection=newSqlConnection(connString);stringsql="SELECTCOUNT(*)FROMStudent";connection.Open();//打開數(shù)據(jù)庫連接SqlCommandcommand=newSqlCommand(sql,connection);intnum=(int)command.ExecuteScalar();執(zhí)行命令前,必須打開數(shù)據(jù)庫連接!要進行類型轉換!第二十三頁,共四十五頁,2022年,8月28日Command對象用SQL語句的Command設置SqlCommandComm=newSqlCommand();Comm.CommandText="SQL語句";Comm.CommandType=CommandType.Text;Comm.Connection=sqlConn;用存儲過程的Command設置SqlCommandComm=newSqlCommand();Comm.CommandText="sp_UpdateName";Comm.CommandType=CommandType.StoredProcedure;Comm.Connection=sqlConn;其中,Sp_UpdateName是在SQLServer服務器上創(chuàng)建的存儲過程第二十四頁,共四十五頁,2022年,8月28日綜合示例完成系統(tǒng)登錄功能1、驗證管理員的用戶名和密碼是否存在2、驗證通過,顯示管理員主窗體處理登錄按鈕的Click事件定義一個ValidateUser()方法需要Connection和Command對象分兩步實現(xiàn)驗證:1、建立數(shù)據(jù)庫連接2、驗證用戶是否存在第二十五頁,共四十五頁,2022年,8月28日用戶驗證方法框架ValidateUser()方法框架1、驗證的結果:通過,不通過返回值為bool型2、方法需要:用戶名,密碼,登錄類型值方式傳參3、不通過的原因:用戶名或密碼不存在、其他原因引用方式傳參publicboolValidateUser(stringloginType,stringloginId,

stringloginPwd,refstringmessage){}第二十六頁,共四十五頁,2022年,8月28日用戶驗證方法具體實現(xiàn)第一步:建立數(shù)據(jù)庫連接增加DBHelper類第二步:查詢用戶是否存在SELECTCOUNT(*)ExecuteScalar()方法查詢ValidateUser()方法具體實現(xiàn)第二十七頁,共四十五頁,2022年,8月28日小結//查詢Student表使用的SQL語句stringsql=string.Format("SELECTCOUNT(*)FROMStudentWHERELogInId='{0}'ANDLogInPwd='{1}'",txtLogInId,txtLogInPwd);//使用的Command對象SqlCommandcommand=newSqlCommand(sql,DBHelper.connection);DBHelper.connection.Open();//執(zhí)行查詢,返回找到的個數(shù)count=(int)command.ExecuteScalar();增加驗證用戶的代碼第二十八頁,共四十五頁,2022年,8月28日總結Connection對象的什么方法用來打開和關閉數(shù)據(jù)庫連接?ExecuteScalar()方法返回什么?第二十九頁,共四十五頁,2022年,8月28日知識點小結Connection對象的作用Connection對象的兩種使用方法拖拉控件寫代碼四種典型的連接方式的應用名稱空間和連接字符串的寫法SqlConnectionOleDbConnectionOracleConnectionOdbcConnection第三十頁,共四十五頁,2022年,8月28日.NET中的事務處理3-1帳單編號說明數(shù)量價格總計1肥皂520100編號:12439

日期:2004年10月30日肥皂關系表數(shù)據(jù)庫512439124392004年10月30日已成功地完成對一個表的操作,但是關系表尚未更新,因此,數(shù)據(jù)會出現(xiàn)不一致的現(xiàn)象不完整的事務處理!成功地進行整個操作或者取消整個操作確保事務處理是一組數(shù)據(jù)操作,這些操作要么必須全部成功,要么必須全部失敗,以保證數(shù)據(jù)的一致性和完整性第三十一頁,共四十五頁,2022年,8月28日.NET中的事務處理3-2Begin:在執(zhí)行事務處理中的任何操作之前,必須使用Begin命令來開始事務處理Commit:在成功將所有修改都存儲于數(shù)據(jù)庫時,才算是提交了事務處理Rollback:由于在事務處理期間某個操作失敗,而取消事務處理已做的所有修改,這時將發(fā)生回滾事務處理命令第三十二頁,共四十五頁,2022年,8月28日.NET中的事務處理3-3類說明OdbcTransaction表示對數(shù)據(jù)源進行的SQL事務處理OleDbTransaction表示對數(shù)據(jù)源進行的SQL事務處理OracleTransaction表示對數(shù)據(jù)庫進行的事務處理SqlTransaction表示要對SQLServer數(shù)據(jù)庫進行的Transact-SQL事務處理第三十三頁,共四十五頁,2022年,8月28日SqlTransaction類3-1方法屬性Save()Rollback()Commit()ConnectionSqlTransaction類表示要對數(shù)據(jù)源進行的事務處理第三十四頁,共四十五頁,2022年,8月28日SqlTransaction類3-2在ADO.NET中實現(xiàn)事務處理時執(zhí)行的步驟順序SqlConnectionsqlConn=newSqlConnection ("server=SQLDB;uid=sa;pwd=sa;database=pubs");sqlConn.Open();創(chuàng)建數(shù)據(jù)庫連接并打開該連接SqlTransactionsqlTrans= sqlConn.BeginTransaction();使用BeginTransaction()方法開始事務處理第三十五頁,共四十五頁,2022年,8月28日SqlTransaction類3-3Comm.Transaction=sqlTrans;將Command對象的Transaction屬性設置為事務處理對象insertCommand="InsertintoStudent (Id,Name)values(200494012,“WangLi");Comm.CommandText=insertCommand;Comm.ExecuteNonQuery();執(zhí)行SQL命令sqlTrans.Commit();如果操作過程中沒有錯誤,則提交事務處理。如果操作過程中發(fā)生錯誤,則回滾已完成的所有修改sqlConn.Close();關閉連接第三十六頁,共四十五頁,2022年,8月28日應用程序示例7-1在VS.NET2005中新建一個名為Example1的基于Windows的項目。將默認窗體命名為frmFlight.cs用戶界面第三十七頁,共四十五頁,2022年,8月28日應用程序示例7-2控件名稱屬性值FormfrmFlightText航班詳細信息ButtonbutAddText添加(&A)

butModifyText修改(&M)butDeleteText刪除(&D)butCancelText取消(&C)LabellblFlightNoText航班號:lblAirlineText航空公司:lblDestinationText終到站:lblSourceText始發(fā)站:lblDepartureText起飛:lblArrivalText到達:ComboBoxcboSeatsText座位數(shù)量:第三十八頁,共四十五頁,2022年,8月28日應用程序示例7-3//Connection對象和Command對象privateSqlConnectionsqlConn;privateSqlCommandsqlComm;//類變量privatestringinstrCmd;privatestringmodCmd;privatestringdelCmd;privatevoidfrmFlight_Load(objectsender,System.EventArgse){//初始化connection對象sqlConn=newSqlConnection("server=jeny;database=Flights;uid=sa;pwd=sa");//將座位數(shù)量添加到組合框中this.cboSeats.Items.Clear();this.cboSeats.Items.Add(“200");this.cboSeats.Items.Add(“250");this.cboSeats.Items.Add(“300");this.btnModify.Enabled=false;this.btnDelete.Enabled=false;}給組合框添加項并禁用按鈕初始化connection對象第三十九頁,共四十五頁,2022年,8月28日應用程序示例7-4privatevoidbtnAdd_Click(objectsender,System.EventArgse){//插入命令instrCmd="insertintoFlightDetailsvalues('"+this.txtFlightCode.Text+"','"+this.txtAirline.Text+"','“+this.txtDestination.Text+"','“+this.txtSource.Text+"','“+this.txtArrival.Text+"','"+this.txtDeparture.Text+"',“+this.cboSeats.SelectedItem.ToString()+")";//初始化command對象sqlComm=newSqlCommand(instrCmd,sqlConn);

將插入命令和connection對象傳遞給command對象btnAddClick事件處理程序第四十頁,共四十五頁,2022年,8月28日應用程序示例7-5try{

//打開連接sqlConn.Open();

//執(zhí)行插入語句sqlComm.ExecuteNonQuery();MessageBox.Show(“已成功添加記錄");//啟用和禁用按鈕this.btnModify.Enabled=true;this.btnDelete.Enabled=true;this.btnAdd.Enabled=false;this.txtFlightCode.Enabled=false;}catch(SqlExceptionex){MessageBox.Show(ex.Message);}finally{

//關閉連接

sqlConn.Close();}}打開連接并執(zhí)行sqlComm中的命令btnAddClick事件處理程序第四十一頁,共四十五頁,2022年,8月28日應用程序示例7-6privatevoidbtnModify_Click(objectsender,System.EventArgse){modCmd="updateFlightDetailssetAirline='“+this.txtAirline.Text+"',Destination='“+this.txtDestination.Text+"',Source='"+this.txtSource.Text+"',Arrival='"+this.txtArrival.Text+"',Departure='"+this.txtDeparture.Text+"',TotalSeats="+this.cboSeats.SelectedItem.ToString()+"whereFlightCodelike'"+this.txtFlightCode.Text+"'";sqlComm=newSqlCommand(modCmd,sqlConn);try{

sqlConn.Open();

sqlComm.ExecuteNonQuery();

MessageBox.Show(“已成功更新記錄");}catch(SqlExceptionex){MessageBox.Show(ex.Message);

溫馨提示

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

評論

0/150

提交評論