《C#語言程序設(shè)計項目教程》第9章 ADO.NET數(shù)據(jù)庫訪問技術(shù)寫字字帖_第1頁
《C#語言程序設(shè)計項目教程》第9章 ADO.NET數(shù)據(jù)庫訪問技術(shù)寫字字帖_第2頁
《C#語言程序設(shè)計項目教程》第9章 ADO.NET數(shù)據(jù)庫訪問技術(shù)寫字字帖_第3頁
《C#語言程序設(shè)計項目教程》第9章 ADO.NET數(shù)據(jù)庫訪問技術(shù)寫字字帖_第4頁
《C#語言程序設(shè)計項目教程》第9章 ADO.NET數(shù)據(jù)庫訪問技術(shù)寫字字帖_第5頁
已閱讀5頁,還剩46頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第9章ADO.NET數(shù)據(jù)庫訪問技術(shù)本章導(dǎo)讀:本章的主要內(nèi)容是學(xué)習(xí)ADO.NET數(shù)據(jù)庫訪問技術(shù)。然后通過項目“MyQQ的登錄和注冊管理”為導(dǎo)向,三個任務(wù)(完善用戶注冊窗體、完善用戶登錄窗體、用戶信息后臺管理窗體)為驅(qū)動,學(xué)習(xí)有關(guān)ADO.NET數(shù)據(jù)庫訪問技術(shù),包括數(shù)據(jù)庫連接對象Connection、SQL語句執(zhí)行對象Command、數(shù)據(jù)讀取對象DataReader等,本項目的完成將使得學(xué)習(xí)者學(xué)會數(shù)據(jù)庫的訪問技術(shù),使得窗體應(yīng)用程序能夠與后臺數(shù)據(jù)庫得到交互。第9章ADO.NET數(shù)據(jù)庫訪問技術(shù)

——任務(wù)一完善用戶注冊窗體一、任務(wù)描述:使用SQLServer數(shù)據(jù)庫,創(chuàng)建一個名為QQMessage的數(shù)據(jù)庫,在QQMessage數(shù)據(jù)庫下創(chuàng)建一個名為tb_UserMsg的表。在第8章任務(wù)二基礎(chǔ)上,首先完成第8章的實訓(xùn)四,如左圖所示(添加DateTimePicker控件來選擇出生日期),然后修改程序,當(dāng)單擊【注冊】按鈕的時候能夠向QQMessage數(shù)據(jù)庫中表tb_UserMsg中保存用戶注冊信息(如右下圖),如左圖所示,并彈出如右上圖所示消息框。二、知識準(zhǔn)備:1Connection對象2Command對象二、知識準(zhǔn)備:1、Connection對象Connection對象的主要功能是創(chuàng)建應(yīng)用程序與數(shù)據(jù)庫之間的連接,主要包括4種類型訪問數(shù)據(jù)庫的對象,不同類型所對應(yīng)的數(shù)據(jù)提供程序不同,下表中分別列出了這4種不同的數(shù)據(jù)提供程序以及相對應(yīng)的命名空間。(1)什么是Connection對象不同類型的Connection對象編號數(shù)據(jù)提供程序命名空間類型1SQLServer數(shù)據(jù)提供程序System.Data.SqlClientsqlConnection2ODBC數(shù)據(jù)提供程序System.Data.OdbcOdbcConnection3OLEDB數(shù)據(jù)提供程序System.Data.OleDbOleDbConnection4Oracle數(shù)據(jù)提供程序System.Data.OracleClientOracleConnection其中Access和MySQL數(shù)據(jù)庫都是OLEDB公開的數(shù)據(jù)庫。常用方式二、知識準(zhǔn)備:1、Connection對象(2)連接數(shù)據(jù)庫(以SQLServer數(shù)據(jù)庫為例)1)首先通過usingSystem.Data.SqlClient引入命名空間;2)聲明數(shù)據(jù)庫連接字符串。例如要連接一個名為QQMessage的數(shù)據(jù)庫:

stringconnString="DataSource=.;InitialCatalog=QQMessage;UserID=sa;pwd=123456";對連接字符串的說明如下:DataSource:服務(wù)器名稱,“.”或者“l(fā)oacalhost”表示本地服務(wù)器。InitialCatalo:數(shù)據(jù)庫的名稱。UserID,pwd:表示數(shù)據(jù)庫的登錄名和密碼,需要在數(shù)據(jù)庫安裝時進行配置。二、知識準(zhǔn)備:1、Connection對象(2)連接數(shù)據(jù)庫4)最后通過Open()方法打開數(shù)據(jù)庫:connection.Open();State屬性是ConnectionState類型的枚舉值之一,其說明如表所示:ConnectionState枚舉值枚舉值說明Broken連接中斷??梢躁P(guān)閉后重新打開處理這種狀況。Closed連接關(guān)閉。Connecting正在連接。Executing正在執(zhí)行命令。Fetching正在檢索數(shù)據(jù)。Open連接打開。3)然后創(chuàng)建Connection對象:SqlConnectionconnection=newSqlConnection(connString);連接字符串二、知識準(zhǔn)備:1、Connection對象(3)關(guān)閉數(shù)據(jù)庫連接對數(shù)據(jù)庫的操作完畢時,應(yīng)該關(guān)閉與數(shù)據(jù)庫的連接,釋放被占用的資源。關(guān)閉數(shù)據(jù)庫連接有兩種方法:Close和Dispose方法。這兩種關(guān)閉數(shù)據(jù)庫連接方法的區(qū)別在于:Close()方法只是關(guān)閉連接,而Dispose()方法還同時清理連接所占用資源。關(guān)閉上面打開的數(shù)據(jù)庫連接:connection.Close();數(shù)據(jù)庫連接有打開,在后面一定有關(guān)閉。二、知識準(zhǔn)備:2、Command對象(1)什么是Command對象Command對象是是一個數(shù)據(jù)命令對象,主要功能是向指定的數(shù)據(jù)庫發(fā)送查詢、修改和刪除的SQL命令。根據(jù)所使用的數(shù)據(jù)庫的不同,Command對象有不同的形式,主要有如下表所示的幾種方式,這幾種方式跟前表中不同類型的Connection對象對應(yīng)使用。不同類型的Connection對象編號數(shù)據(jù)提供程序命名空間類型1SQLServer數(shù)據(jù)提供程序System.Data.SqlClientsqlCommand2ODBC數(shù)據(jù)提供程序System.Data.OdbcOdbcCommand3OLEDB數(shù)據(jù)提供程序System.Data.OleDbOleDbCommand4Oracle數(shù)據(jù)提供程序System.Data.OracleClientOracleCommand二、知識準(zhǔn)備:2、Command對象(1)什么是Command對象在使用OracleCommand時,要引入System.Data.OracleClient命名空間,但是默認情況下沒有此命名空間,所有需要將程序集System.Data.OracleClient.dll引入到項目中。定義一個Command對象:SqlCommandcommand=newSqlCommand();二、知識準(zhǔn)備:2、Command對象(2)設(shè)置Command對象的屬性Command對象有以下3個重要屬性:Connection:用于設(shè)置sqlCommand的對象。CommandText:用于設(shè)置要執(zhí)行的SQL語句或存儲過程。CommandType:用于設(shè)置CommandText的類型。類型有StroedProcedure(存儲過程名稱)、TableDirect(表的名稱),Text(SQL文本命名)。對上面定義的Command對象command設(shè)置屬性:command.Connection=connection;command.CommandText=sql;command.CommandType=CommandType.Text;SqlCommandcommand=newSqlCommand(sql,connection);兩種方式都可二、知識準(zhǔn)備:2、Command對象(3)執(zhí)行SQL語句要執(zhí)行Command對象中設(shè)置的SQL語句,有以下幾種常見的方法:PublicoverrideintExecuteNonQuery()該方法返回受影響的行數(shù)。在做插入功能的SQL語句時,可以用此方法來判斷是否插入成功。1)ExecuteNonQuery方法。語法:二、知識準(zhǔn)備:2、Command對象(3)執(zhí)行SQL語句要執(zhí)行Command對象中設(shè)置的SQL語句,有以下幾種常見的方法:PublicSqlDataReaderExecuteRead()該方法返回SqlDataReader對象。2)ExecuteRead方法。語法:PublicoverrideObjectExecuteScalar()該方法返回值為結(jié)果集中第一行的第一列,當(dāng)結(jié)果集為空時返回空引用。3)ExecuteScalar方法。語法:三、任務(wù)分析:1、打開SQLServer數(shù)據(jù)庫,新建數(shù)據(jù)庫QQMessage,新建表tb_UserMsg,表結(jié)構(gòu)如下表所示:表tb_UserMsg列名數(shù)據(jù)類型是否允許為空說明Namestring否用戶姓名(主鍵)Birthdaystring是用戶生日Passwordstring否登錄密碼Sexstring是用戶性別Agestring是用戶年齡Provincestring是用戶籍貫Interestingstring是用戶興趣Description,string是用戶描述Imgstring是頭像保存路徑三、任務(wù)分析:2、要執(zhí)行的SQL語句如下:stringsql=String.Format("insertintotb_UserMsgvalues('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}')",name,birthday,password,age,sex,province,interesting,description,photopath);在對表進行插入操作時,要注意表的列結(jié)構(gòu),插入值的前后順序應(yīng)該跟表中列的前后順序一致。3、SqlCommand對象采用ExecuteNonQuery()方法執(zhí)行SQL語句,目的是為了根據(jù)返回受影響的行數(shù)判斷注冊是否成功。四、任務(wù)實施:1、打開SQLServer,新建一個名為QQMessage的數(shù)據(jù)庫,名為tb_UserMsg的數(shù)據(jù)表。四、任務(wù)實施:2、修改【注冊】按鈕的Click事件處理程序,在后面添加如下代碼://把注冊信息存入數(shù)據(jù)庫stringconnString="DataSource=.;InitialCatalog=QQMessage;UserID=sa;pwd=123456";SqlConnectionconnection=newSqlConnection(connString);stringsql=String.Format("insertintotb_UserMsgvalues('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}')",name,birthday,password,age,sex,province,interesting,description,photopath);

connection.Open();

SqlCommandcommand=newSqlCommand();command.Connection=connection;command.CommandText=sql;command.CommandType=CommandType.Text;數(shù)據(jù)庫連接字符串創(chuàng)建Connection對象執(zhí)行的SQL語句打開連接command對象設(shè)置四、任務(wù)實施:2、修改【注冊】按鈕的Click事件處理程序,在后面添加如下代碼://返回受影響的行數(shù),如果num>0表示插入信息成功

intnum=command.ExecuteNonQuery();if(num>0){MessageBox.Show("用戶注冊成功!");stringmsg=name+"\r\n"+birthday+"\r\n"+age+"\r\n"+sex+"\r\n"+province+"\r\n"+interesting+"\r\n"+description+"\r\n"+photopath+"\r\n";

msgmessage=newmsg(msg);message.Show();message.Owner=this;}else{MessageBox.Show("用戶注冊失??!");}//關(guān)閉數(shù)據(jù)庫連接

connection.Close();實例化注冊信息顯示窗體,利用構(gòu)造函數(shù)參數(shù)傳遞數(shù)據(jù)五、任務(wù)小結(jié):SqlCommandcommand=newSqlCommand();command.Connection=connection;command.CommandText=sql;command.CommandType=CommandType.Text;SqlCommandcommand=newSqlCommand(sql,connection);1、設(shè)置Command對象的兩種方法:(1)通過屬性設(shè)置(2)在定義Command對象的時候直接設(shè)置,通常采用這種方式:2、當(dāng)對數(shù)據(jù)庫表執(zhí)行插入操作時,如果需要驗證插入是否成功,采用ExecuteNonQuery()方法執(zhí)行SQL語句。第9章ADO.NET數(shù)據(jù)庫訪問技術(shù)

——任務(wù)二完善用戶登錄窗體

一、任務(wù)描述:對第8章任務(wù)二中的用戶登錄窗體進行修改。如下所示:用戶名:admin密碼:123456用戶名和密碼存在表tb_UserMsg中,彈出消息框“***,歡迎登錄!”一、任務(wù)描述:如果是用戶名錯誤,則彈出消息框“用戶名不存在!”,如左圖所示,如果是密碼錯誤,則彈出消息框“用戶密碼錯誤!”,如右圖所示。二、知識準(zhǔn)備:1DataReader對象二、知識準(zhǔn)備:1、DataReader對象DataReader對象是數(shù)據(jù)讀取對象,它提供向前只讀的游標(biāo),如果應(yīng)用程序只需要快速讀取數(shù)據(jù),可以使用DataReader進行讀取。下表中列出了不同類型的DataReader。(1)什么是DataReader對象不同類型的DataReader對象編號數(shù)據(jù)提供程序命名空間類型1SQLServer數(shù)據(jù)提供程序System.Data.SqlClientsqlDataReader2ODBC數(shù)據(jù)提供程序System.Data.OdbcOdbcDataReader3OLEDB數(shù)據(jù)提供程序System.Data.OleDbOleDbDataReader4Oracle數(shù)據(jù)提供程序System.Data.OracleClientOracleDataReader二、知識準(zhǔn)備:1、DataReader對象publicoverrideboolHasRows{get;}(2)HasRows屬性HasRows屬性用于判斷sqlDataReader中是否包含了值。語法如下:如果有值屬性值為true,沒有值屬性值為false。(3)Read方法Read方法的功能是使sqlDataReader前進到下一條記錄。語法如下:publicoverrideboolRead()如果存在記錄則返回值為true,否則為false。三、任務(wù)分析:1、查看輸入的用戶名是否存在的SQL語句:selectNamefromtb_UserMsgwhereName='"+tb_name.Text.Trim()+"'";當(dāng)查詢的結(jié)果集里面有行時,表明用戶名存在。2、首先保存結(jié)果集中的Name,然后比較密碼是否正確。四、任務(wù)實施:1、打開第8章任務(wù)二中建立的窗體應(yīng)用程序,修改【登錄】按鈕的Click事件處理程序。privatevoidbtn_login_Click(objectsender,EventArgse)//用戶登錄

{

//數(shù)據(jù)庫連接字符串stringconnString="DataSource=.;InitialCatalog=QQMessage;UserID=sa;pwd=123456";//創(chuàng)建Connection對象

SqlConnectionconnection=newSqlConnection(connString);stringsql="select*fromtb_UserMsgwhereName='"+tb_name.Text.Trim()+"'andPassword='"+tb_psd.Text.Trim()+"'";connection.Open();//打開數(shù)據(jù)庫連接

SqlCommandcommand=newSqlCommand(sql,connection);黑色部分保持以前不變四、任務(wù)實施:1、打開第8章任務(wù)二中建立的窗體應(yīng)用程序,修改【登錄】按鈕的Click事件處理程序。

//使用ExecuteReader方法創(chuàng)建SqlDataReader對象

SqlDataReadersdr=command.ExecuteReader();if(sdr.HasRows){MessageBox.Show(tb_name.Text+",歡迎登錄!");}else{MessageBox.Show("登錄失??!");}//關(guān)閉數(shù)據(jù)庫連接

connection.Close();}此部分做修改判斷用戶名和密碼是否存在數(shù)據(jù)表橙色部分在后面繼續(xù)修改四、任務(wù)實施:2、修改登錄失敗提示,明確是到底用戶名不存在還是密碼錯誤。當(dāng)用戶名不存在時,出現(xiàn)如圖所示消息框。四、任務(wù)實施:2、修改登錄失敗提示,明確是用戶名不存在還是密碼錯誤。修改(1)中else中的代碼(橙色部分)如下:SqlConnectionconnection2=newSqlConnection(connString);connection2.Open();sql="selectNamefromtb_UserMsgwhereName='"+tb_name.Text.Trim()+"'";SqlCommandcommand2=newSqlCommand(sql,connection2);command2.CommandText=sql;stringfindname="";findname=Convert.ToString(command2.ExecuteScalar());if(findname==tb_name.Text){MessageBox.Show("用戶密碼錯誤!");}else{MessageBox.Show("用戶名不存在!");}connection2.Close();獲得用戶名用戶名存在用戶名不存在五、任務(wù)小結(jié):1、利用SqlDataReadersdr=command.ExecuteReader()得到結(jié)果集,然后利用dr.HasRows判斷結(jié)果集里是否包含行來確定登錄成功與否。2、重新查詢需要重新創(chuàng)建連接。第9章ADO.NET數(shù)據(jù)庫訪問技術(shù)

——任務(wù)三用戶信息后臺管理窗體

一、任務(wù)描述:在任務(wù)二基礎(chǔ)上新增一個窗體,如圖所示。在此窗體中包含1個DataRowView控件和2個Button控件。在DataRowView控件中顯示數(shù)據(jù)庫QQMessage中表tb_UserMsg的全部信息。單擊【刪除】按鈕可以在表中刪除被選中行,單擊【提交更改】按鈕向數(shù)據(jù)庫中表tb_UserMsg提交修改或刪除后的用戶信息。二、任務(wù)準(zhǔn)備:1、DataAdapter對象DataAdapter對象叫做數(shù)據(jù)適配器對象,是DataSet與數(shù)據(jù)源之間的橋梁。該對象提供了4個重要的屬性,實現(xiàn)與數(shù)據(jù)庫之間的互通,如表所示。DataAdapter對象常用屬性屬性說明SelectCommand從數(shù)據(jù)庫檢索數(shù)據(jù)的Command對象DeleteCommand從數(shù)據(jù)庫刪除數(shù)據(jù)的Command對象InsertCommand從數(shù)據(jù)庫插入數(shù)據(jù)的Command對象UpdateCommand從數(shù)據(jù)庫更新數(shù)據(jù)的Command對象二、任務(wù)準(zhǔn)備:1、DataAdapter對象在對數(shù)據(jù)庫進行操作時,該對象還提供了幾個主要的方法,如表所示:DataAdapter對象常用方法方法語法說明FillpublicintFill(DataSetds,stringscrTable)ds:表示要填充的數(shù)據(jù)集。scrTable:表示源表的名稱。返回值:在DataSet中成功添加或刷新的行數(shù)。UpdatepublicintUpdate(DataTabedt)dt:更新數(shù)據(jù)源的DataTabe。返回值:在DataSet中成功更新的行數(shù)。二、任務(wù)準(zhǔn)備:2、DataSet對象publicvoidMerge(DataSetdatabase,boolpreserveChanges,MissingSchemaActionmissingSchemaAction)DataSet對象叫做數(shù)據(jù)集對象,是ADO.NET的核心成員。DataSet對象相當(dāng)于內(nèi)存中的一個數(shù)據(jù)庫,包含數(shù)據(jù)表、數(shù)據(jù)列、數(shù)據(jù)行、視圖、約束和關(guān)系。使用DataSet的Merge方法,可以進行數(shù)據(jù)的合并。語法如下:二、任務(wù)準(zhǔn)備:3、DataGridView控件DataGridView控件叫做數(shù)據(jù)瀏覽器,在開發(fā)數(shù)據(jù)庫應(yīng)用程序時,通常用來顯示數(shù)據(jù)的視圖。如果需要在Windows窗體應(yīng)用程序中顯示表格數(shù)據(jù),應(yīng)該首要考慮使用DataGridView控件。目前通用的方法中,也可以采取使用ListView控件。二、任務(wù)準(zhǔn)備:(1)設(shè)置DataGridView控件顯示數(shù)據(jù)DataGridView控件的DataSource屬性用于獲取或設(shè)置所顯示數(shù)據(jù)的數(shù)據(jù)源,語法如下:publicObjectDataSources{get;set};3、DataGridView控件例如:dgV_UserMsg.DataSource=ds.Tables["um"];表示名為dgV_UserMsg的DataGridView控件的數(shù)據(jù)源為DataSet數(shù)據(jù)集對象中名為“um”的表。二、任務(wù)準(zhǔn)備:(2)常用屬性和方法DataGridView數(shù)據(jù)視圖常用的屬性如表所示:3、DataGridView控件DataGridView控件常用屬性屬性說明SelectionModeDataGridView控件被選則模式,有5種不同值:CellSelect:選中單元格。FullColumnSelect:選中整行。FullRowSelect:選中整列。RowHeaderSelect:選中首行。ColumnHeaderSelect:選中首列。二、任務(wù)準(zhǔn)備:(2)常用屬性和方法DataGridView數(shù)據(jù)視圖常用的方法如表所示:3、DataGridView控件DataGridView數(shù)據(jù)視圖常用方法方法說明Add向DataGridView添加新行。Delete用于刪除指定索引處的行。二、任務(wù)準(zhǔn)備:4、SqlCommandBuilder對象SqlCommandBuilder對象的主要作用是用來批量更新數(shù)據(jù)庫,一般和adapter結(jié)合使用。利用該對象能夠自動生成對數(shù)據(jù)庫的反向Sql命令,如:INSERT、UPDATE和DELETE命令。具體使用方法見【任務(wù)實施】步驟(5)。三、任務(wù)分析:1、制作如圖所示的窗體應(yīng)用界面,窗體上各控件的屬性及功能如表所示:對象屬性設(shè)置功能Form1Text:用戶信息后臺管理

DataGridView1Name:dgV_UserMsgSelectionMode:FullRowSelect顯示用戶注冊信息,設(shè)置為整行選中。Button1Name:btn_delText:刪除刪除DataGridView控件中選中行Button2Name:btn_saveText:提交更改將DataGridView更新后的數(shù)據(jù)存入數(shù)據(jù)表中控件屬性功能說明表三、任務(wù)分析:2、獲得DataGridView控件中的選中行使用dgV_UserMsg.CurrentRow.Index。四、任務(wù)實施:1、新建一個窗體應(yīng)用程序,或者直接在任務(wù)9.2基礎(chǔ)上新增一個窗體),繪制如圖所示界面。按照表設(shè)置控件屬性。對象屬性設(shè)置功能Form1Text:用戶信息后臺管理

DataGridView1Name:dgV_UserMsgSelectionMode:FullRowSelect顯示用戶注冊信息,設(shè)置為整行選中。Button1Name:btn_delText:刪除刪除DataGridView控件中選中行Button2Name:btn_saveText:提交更改將DataGridView更新后的數(shù)據(jù)存入數(shù)據(jù)表中控件屬性功能說明表四、任務(wù)實施:

DataSetds;//數(shù)據(jù)集SqlConnectionsqlconn;2、在窗體內(nèi)定義如下對象,因為數(shù)據(jù)集對象和SQL數(shù)據(jù)庫連接對象在按鈕的Click事件中要使用,所有需要定義在Load事件外。四、任務(wù)實施:

privatevoidForm1_Load(objectsender,EventArgse){sqlconn=newSqlConnection("DataSource=.;InitialCatalog=QQMessage;UserID=sa;pwd=123456");//創(chuàng)建連接sqlconn.Open();

stringsql="select*fromtb_UserMsg";//要執(zhí)行的SQL語句

SqlDataAdaptersda=newSqlDataAdapter(sql,sqlconn);//數(shù)據(jù)適配器

ds=newDataSet();//創(chuàng)建DataSet對象

sda.Fill(ds,"um

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論