版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本章要點(diǎn)使用控件操作數(shù)據(jù)庫(kù)使用ADO.NET對(duì)象操作數(shù)據(jù)庫(kù)ADO.NET的數(shù)據(jù)集16.1ASP.NET數(shù)據(jù)庫(kù)操作概述2中央數(shù)據(jù)庫(kù)用戶需要時(shí),可以隨時(shí)訪問(wèn)數(shù)據(jù)用戶計(jì)算機(jī)向數(shù)據(jù)庫(kù)服務(wù)器發(fā)送請(qǐng)求客戶端31、通過(guò)控件方式使用ADO.NET可以不編寫(xiě)代碼或少量編寫(xiě)代碼,它簡(jiǎn)單、易用、快速,但對(duì)于復(fù)雜問(wèn)題處理不靈活。訪問(wèn)數(shù)據(jù)的兩種方式2、通過(guò)編程方式使用ADO.NET對(duì)象訪問(wèn)方式比較靈活,可以滿足編程人員的各種需求。ADO.NET體系結(jié)構(gòu).Net數(shù)據(jù)提供程序有四個(gè)核心對(duì)象Connection對(duì)象:用于與特定數(shù)據(jù)源建立連接。Command對(duì)象:用于對(duì)數(shù)據(jù)源執(zhí)行命令,包括插入數(shù)據(jù)、修改數(shù)據(jù)、刪除數(shù)據(jù)、查詢數(shù)據(jù)以及運(yùn)行存儲(chǔ)過(guò)程等數(shù)據(jù)庫(kù)支持的SQL命令。DataReader對(duì)象:用于從數(shù)據(jù)源中讀取向前的、只讀的數(shù)據(jù)流,它是一個(gè)快速而且高效的數(shù)據(jù)集,另一個(gè)數(shù)據(jù)集是DataSet。DataAdapter對(duì)象:用于從數(shù)據(jù)源產(chǎn)生一個(gè)DataSet,并且更新數(shù)據(jù)庫(kù)。6.2數(shù)據(jù)庫(kù)的控件連接SqlDataSource控件是ADO.NET的可視化對(duì)象,通過(guò)它可以訪問(wèn)多種數(shù)據(jù)庫(kù),其在工具箱中的圖標(biāo)為。使用時(shí)可以將此控件拖放到VisualStudio的Web窗體中。在Web窗體運(yùn)行時(shí),此控件是不可見(jiàn)的。配置過(guò)程中可以生成的一個(gè)連接字符串。DataSource指明SQLServer服務(wù)器地址,InitialCatalog指明數(shù)據(jù)庫(kù),IntegratedSecurity=True表示使用Windows驗(yàn)證。定義要執(zhí)行的SQL命令運(yùn)行結(jié)果6.2.2使用SqlDataSource控件操作數(shù)據(jù)庫(kù)設(shè)計(jì)的頁(yè)面SqlDataSource的配置自動(dòng)生成的前臺(tái)頁(yè)面代碼如下:<asp:SqlDataSourceID="SqlDataSource1"runat="server"ConnectionString="DataSource=\MSSQLSERVER2014;InitialCatalog=stu;PersistSecurityInfo=True;UserID=sa;Password=123"InsertCommand="insertinto學(xué)生(學(xué)號(hào),姓名)values(@stuno,@stuname)"ProviderName="System.Data.SqlClient"SelectCommand="select*from學(xué)生where1=0"><InsertParameters><asp:ControlParameterControlID="T_StuNo"Name="stuno"PropertyName="Text"/><asp:ControlParameterControlID="T_StuName"Name="stuname"PropertyName="Text"/></InsertParameters></asp:SqlDataSource>SqlDataSource控件設(shè)置了ConnectionString屬性,但這個(gè)連接字符串是固化在頁(yè)面文件中的,當(dāng)數(shù)據(jù)庫(kù)服務(wù)器地址、用戶名、密碼等發(fā)生變化時(shí),程序?qū)?huì)因數(shù)據(jù)庫(kù)連接不上而出錯(cuò),而Web.config文件中的連接字符串用戶可以隨時(shí)修改,所以應(yīng)該使用Web.config文件中的連接字符串,代碼可以修改成如下形式:<asp:SqlDataSourceID="SqlDataSource1"runat="server"ConnectionString="<%$ConnectionStrings:stuConnectionString%>";…</asp:SqlDataSource>其中,<%$用于訪問(wèn)web.config文件中的數(shù)據(jù),stuConnectionString為web.config文件中的連接字符串名稱。在“錄入”按鈕上添加Click事件代碼:protectedvoidBt_Enter_Click(objectsender,EventArgse){try{
SqlDataSource1.Insert();//執(zhí)行插入語(yǔ)句
ClientScript.RegisterStartupScript(this.GetType(),"","<scripttype='text/javascript'>alert('錄入成功');</script>");}catch(Exceptioner){ClientScript.RegisterStartupScript(this.GetType(),"","<scripttype='text/javascript'>alert('錄入失敗');</script>");}}6.3數(shù)據(jù)庫(kù)的對(duì)象連接6.3.1Connection對(duì)象Connection對(duì)象用于連接到數(shù)據(jù)源。Connection對(duì)象分為以下午4種:SqlConnection:用于連接SQLServer7.0或更高版本OleDbConnection:用于連接OLE數(shù)據(jù)源,例如Access數(shù)據(jù)庫(kù)OdbcConnection:用于連接ODBC數(shù)據(jù)源OracleConnection:用于連接Oracle數(shù)據(jù)庫(kù)
usingSystem.Data.SqlClient;//訪問(wèn)SQLServer數(shù)據(jù)庫(kù)的ADO對(duì)象所在的命名空間為什么使用Connection?15應(yīng)用程序數(shù)據(jù)源第一個(gè)步驟是連接Connection橋梁Connection主要成員屬性說(shuō)明ConnectionString連接字符串方法說(shuō)明Open打開(kāi)數(shù)據(jù)庫(kù)連接Close關(guān)閉數(shù)據(jù)庫(kù)連接16必須顯式關(guān)閉連接連接到數(shù)據(jù)庫(kù)連接到SQLServer的Stu數(shù)據(jù)庫(kù):SqlConnectionconn=newSqlConnection();conn.ConnectionString="DataSource=CUITSZW\\MSSQLSERVER2014;InitialCatalog=stu;IntegratedSecurity=True";conn.Open();也可以使用如下形式:SqlConnectionconn=newSqlConnection("DataSource=CUITSZW\\MSSQLSERVER2014;InitialCatalog=stu;IntegratedSecurity=True");conn.Open();如果SQLServer使用SQL身份驗(yàn)證,連接字符串形式如下:DataSource=服務(wù)器名;InitialCatalog=數(shù)據(jù)庫(kù)名;UserID=用戶名;Pwd=密碼如果SQLServer使用Windows身份驗(yàn)證,連接字符串形式如下:DataSource=服務(wù)器名;InitialCatalog=數(shù)據(jù)庫(kù)名;Catalog=x1;IntegratedSecurity=SSPI";關(guān)閉連續(xù)接在訪問(wèn)數(shù)據(jù)庫(kù)任務(wù)完成以后,應(yīng)使用Close方法關(guān)閉連接。因?yàn)榇蠖鄶?shù)數(shù)據(jù)源只支持打開(kāi)有限數(shù)目的連接,并且打開(kāi)的連接占用寶貴的系統(tǒng)資源,所以在使用連接時(shí),應(yīng)該盡可能晚的打開(kāi)連接,盡可能早的關(guān)閉連接。關(guān)閉連接方法:conn.Close();6.3.2Command對(duì)象在創(chuàng)建Connection對(duì)象后,需要?jiǎng)?chuàng)建Command對(duì)象實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作。Command對(duì)象要與對(duì)應(yīng)的連接對(duì)象匹配:對(duì)SqlConnection采用SqlCommand;對(duì)OleDbConnection采用OleDbCommand。為什么使用Command?20應(yīng)用程序打開(kāi)數(shù)據(jù)庫(kù)處理數(shù)據(jù)……數(shù)據(jù)源Connection?怎樣處理數(shù)據(jù)Command第二個(gè)步驟是執(zhí)行命令;為訪問(wèn)和操作數(shù)據(jù)作好準(zhǔn)備,也可直接從數(shù)據(jù)源中返回結(jié)果Command的主要成員屬性說(shuō)明CommandType=Text;執(zhí)行SQL語(yǔ)句CommandType=StoredProcedure;執(zhí)行的存儲(chǔ)過(guò)程21方法說(shuō)明ExecuteNonQuery執(zhí)行不返回行的語(yǔ)句,如UPDATE等ExecuteReader返回DataReader對(duì)象ExecuteScalar返回單個(gè)值,如執(zhí)行COUNT(*)使用Command步驟使用Command步驟:1、創(chuàng)建數(shù)據(jù)庫(kù)連接2、定義SQL語(yǔ)句3、創(chuàng)建Command對(duì)象4、執(zhí)行命令22SqlConnectionconnection=newSqlConnection(connString);stringsql="SELECTCOUNT(*)FROMStudent";connection.Open();//打開(kāi)數(shù)據(jù)庫(kù)連接SqlCommandcommand=newSqlCommand(sql,connection);intnum=(int)command.ExecuteScalar();執(zhí)行命令前,必須打開(kāi)數(shù)據(jù)庫(kù)連接!取單一值,要進(jìn)行聚合數(shù)據(jù)!Command對(duì)象用SQL語(yǔ)句的Command設(shè)置SqlCommandComm=newSqlCommand();Comm.CommandText="SQL語(yǔ)句";Comm.CommandType=CommandType.Text;Comm.Connection=sqlConn;用存儲(chǔ)過(guò)程的Command設(shè)置SqlCommandComm=newSqlCommand();Comm.CommandText="sp_UpdateName";Comm.CommandType=CommandType.StoredProcedure;Comm.Connection=sqlConn;其中,Sp_UpdateName是在SQLServer服務(wù)器上創(chuàng)建的存儲(chǔ)過(guò)程23【例6-6】設(shè)計(jì)的界面學(xué)號(hào):<asp:TextBoxID="T_StuNo"runat="server"></asp:TextBox><br/>姓名:<asp:TextBoxID="T_StuName"runat="server"></asp:TextBox><br/>性別:<asp:RadioButtonListID="RBL_Sex"runat="server"RepeatDirection="Horizontal"><asp:ListItem>男</asp:ListItem><asp:ListItem>女</asp:ListItem></asp:RadioButtonList>【例6-6】
protectedvoidBt_Enter_Click(objectsender,EventArgse){SqlConnectionconn=newSqlConnection();//創(chuàng)建連接對(duì)象
conn.ConnectionString=WebConfigurationManager.ConnectionStrings["stuConnectionString"].ToString();//從web.config文件中讀取連接字符串
try{conn.Open();//打開(kāi)連接
SqlCommandcmd=newSqlCommand();//創(chuàng)建命令對(duì)象
cmd.Connection=conn;//設(shè)置Command對(duì)象關(guān)聯(lián)的連接對(duì)象
cmd.CommandText="insertinto學(xué)生(學(xué)號(hào),姓名,性別)values(@stuno,@stuname,@sex)";//定義插入數(shù)據(jù)的SQL命令
cmd.Parameters.AddWithValue("@stuno",T_StuNo.Text.Trim());//給sql中的參數(shù)賦值,即界面上學(xué)號(hào)文本框的值給@stuno參數(shù)
cmd.Parameters.AddWithValue("@stuname",T_StuName.Text.Trim());cmd.Parameters.AddWithValue("@sex",RBL_Sex.SelectedValue.Trim());“錄入”按鈕的Click事件代碼:if(cmd.ExecuteNonQuery()>0)//如果命令影響的行數(shù)大于0{ClientScript.RegisterStartupScript(this.GetType(),"","<scripttype='text/javascript'>alert('插入成功');</script>");}}catch(Exceptioner){ClientScript.RegisterStartupScript(this.GetType(),"","<scripttype='text/javascript'>alert('數(shù)據(jù)庫(kù)操作失?。?+Message+"');</script>");}finally{if(conn.State==System.Data.ConnectionState.Open)//如果連接已打開(kāi)
{conn.Close();//關(guān)閉連接
}}}【例6-6】6.3.3DataReader對(duì)象27關(guān)閉數(shù)據(jù)庫(kù)應(yīng)用程序
數(shù)據(jù)庫(kù)N個(gè)表1、用Connection.Open建立連接2、用Command執(zhí)行命令3、使用DataReader讀數(shù)據(jù)庫(kù)中的表表中的記錄DataReader對(duì)象提供一個(gè)只讀的,單向前移的記錄集。使用該對(duì)象可以有效的節(jié)約內(nèi)存,因?yàn)閮?nèi)存中一次只保存一條記錄,而不是將所有記錄都裝入內(nèi)存,在檢索大量數(shù)據(jù)時(shí),建議使用DataReader。DataReader對(duì)象只能與Command對(duì)象結(jié)合使用,并且要與Command對(duì)象的類(lèi)型相匹配:對(duì)于SqlCommand應(yīng)使用SqlDataReader;對(duì)于OleDbCommand則采用OleDbDataReader。DataReader對(duì)象的常用屬性和方法DataReader對(duì)象的常用屬性有:HasRows:判斷SqlDataReade是否包含一行或多行記錄。IsClosed:判斷DataReader對(duì)象是否關(guān)閉。DataReader對(duì)象的常用方法有:Read():判斷是否還有記錄,如果有,則讀取下一條記錄。GetName():取得字段的名稱。GetValue():取得以本機(jī)格式表示的指定列的值。Close():關(guān)閉DataReader對(duì)象。IsNull():判斷字段是否為null值?!纠?-7】使用DataReader對(duì)象讀取學(xué)生表的數(shù)據(jù)并顯示在ListBox控件中SqlCommandcmd=newSqlCommand("select學(xué)號(hào),姓名,性別,出生日期from學(xué)生",conn);//創(chuàng)建命令對(duì)象
SqlDataReaderreader=cmd.ExecuteReader();//讀取數(shù)據(jù)
while(reader.Read())//記錄指針移動(dòng)到下一行,如果指向數(shù)據(jù)行則為true{stringstuno=reader.GetString(0);//獲取當(dāng)前行的第1列的數(shù)據(jù)
stringstuname=reader[1].ToString();//獲取當(dāng)前行的第2列的數(shù)據(jù)
stringsex=reader["性別"].ToString();//獲得當(dāng)前行的性別列的數(shù)據(jù)
stringbirthday=reader.GetValue(3).ToString();//獲取當(dāng)前行的第4列的數(shù)據(jù)
stringstu=stuno+stuname+sex+birthday;ListBox1.Items.Add(stu);//將字符串加入ListBox控件中
}例6-7運(yùn)行結(jié)果6.3.4DataAdapter對(duì)象DataAdapter用作DataSet和數(shù)據(jù)源之間的橋接器以便檢索和保存數(shù)據(jù),稱為數(shù)據(jù)適配器。DataAdapter通過(guò)Fill和Update方法來(lái)提供這一橋接器。DataSetDataTableDataAdapterConnection和Command數(shù)據(jù)庫(kù)32DataAdapter:它是DataSet對(duì)象和數(shù)據(jù)源之間的一個(gè)橋梁,用于從數(shù)據(jù)源中檢索數(shù)據(jù)、填充DataSet對(duì)象中的表及對(duì)DataSet對(duì)象做出的更改提交回?cái)?shù)據(jù)源DataAdapter:它使用Command對(duì)象從數(shù)據(jù)源中檢索數(shù)據(jù)并將更改提交回?cái)?shù)據(jù)源,Command對(duì)象體現(xiàn)在DataAdapter的SelectCommand、InsertCommand、UpdateCommand和DeleteCommand屬性上。DataAdapter:它的Fill方法用于在DataSet中添加或刷新行以匹配數(shù)據(jù)源中的行。33使用DataAdapter對(duì)象從數(shù)據(jù)集更新數(shù)據(jù)庫(kù)DataAdaptor.Fill應(yīng)用程序
數(shù)據(jù)庫(kù)1、用Connection.Open建立連接2、用Command執(zhí)行命令3、使用DataAdapter對(duì)象填充數(shù)據(jù)集DataSet使用SqlDataAdapter示例代碼SqlConnectionconn=newSqlConnection();//創(chuàng)建連接對(duì)象conn.ConnectionString="DataSource=CUITSZW\\MSSQLSERVER2014;InitialCatalog=stu;IntegratedSecurity=True";//設(shè)置連接字符串SqlCommandcmd=newSqlCommand();//創(chuàng)建命令對(duì)象cmd.Connection=conn;//設(shè)置命令對(duì)象關(guān)聯(lián)的連接對(duì)象cmd.CommandText="select學(xué)號(hào),姓名,性別,出生日期from學(xué)生";//設(shè)置查詢命令SqlDataAdaptersda=newSqlDataAdapter();//創(chuàng)建數(shù)據(jù)適配匹器對(duì)象sda.SelectCommand=cmd;//設(shè)置數(shù)據(jù)適匹器對(duì)象SelectCommand屬性關(guān)聯(lián)的命令對(duì)象DataSetds=newDataSet();//創(chuàng)建數(shù)據(jù)集sda.Fill(ds);//通過(guò)數(shù)據(jù)適匹器對(duì)象填充數(shù)據(jù)集6.4DataSet對(duì)象DataSet對(duì)象是創(chuàng)建在內(nèi)存中的集合對(duì)象,它可以包括任意數(shù)量的數(shù)據(jù)表,以及所有表的約束、索引和關(guān)系,相當(dāng)于一個(gè)小型關(guān)系數(shù)據(jù)庫(kù)。一個(gè)DataSet對(duì)象包括一組DataTable對(duì)象和DataRelation對(duì)象,其中每個(gè)DataTable對(duì)象由DataColumn、DataRow和DataRelation對(duì)象組成。DataSet對(duì)象結(jié)構(gòu)6.4.2填充數(shù)據(jù)集形式一:SqlDataAdaptersda=newSqlDataAdapter(“select*from學(xué)生”,conn);DataSetds=newDataSet();sda.Fill(ds);形式二:SqlDataAdaptersda=newSqlDataAdapter(“select*from學(xué)生”,conn);DataSetds=newDataSet();sda.Fill(ds,”stu”);6.4.3訪問(wèn)數(shù)據(jù)集1.訪問(wèn)數(shù)據(jù)表可以使用以下形式訪問(wèn)數(shù)據(jù)表:
數(shù)據(jù)集.Tables[表名|索引]例如:DataTabledt=ds.Tables[“stu”];或DataTabledt=ds.Tables[0];6.4.3訪問(wèn)數(shù)據(jù)集2.訪問(wèn)數(shù)據(jù)行可以使用以下形式訪問(wèn)數(shù)據(jù)行:
DataTable.Rows[行索引]例如:DataRowrow=ds.Tables[“stu”].Rows[0];其中Rows[0]表示第1行,第2行為Rows[1]。行索引值不能越界,可以通過(guò)Rows.Count屬性獲取Table中的數(shù)據(jù)行數(shù)。6.4.3訪問(wèn)數(shù)據(jù)集3.訪問(wèn)數(shù)據(jù)列可以使用以下形式訪問(wèn)數(shù)據(jù)列:DataRow[列名|索引]或DataRow.Item[列名|索引]例如:stringstuno=ds.Tables[0].Rows[0]["學(xué)號(hào)"].ToString();或stringstuno=ds.Tables[0].Rows[0].ItemArray[0].ToString();4.訪問(wèn)視圖通過(guò)DataTable的DefaultView屬性,可以訪問(wèn)與數(shù)據(jù)表相關(guān)的視圖。也可以通過(guò)DataView類(lèi)的構(gòu)造函數(shù)創(chuàng)建DataView。例如:DataViewdv1=ds.Tables[0].DefaultView;DataViewdv2=newDataView(ds.Tables[0]);視圖可以排序和篩選數(shù)據(jù)。通過(guò)DataView的Sort屬性可以排序數(shù)據(jù),例如:dv1.Sort=“出生日期ASC”;通過(guò)DataView的RowFilter屬性可以篩選數(shù)據(jù),例如:dv.RowFilter="姓名like'李%'";【例6-9】訪問(wèn)數(shù)據(jù)集usingSystem.Data.SqlClient;…SqlDataAdaptersda=newSqlDataAdapter("select學(xué)號(hào),姓名,性別,出生日期from學(xué)生",conn);//創(chuàng)建SqlDataAdapter對(duì)象
DataSetds=newDataSet();
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 桐城師范高等專(zhuān)科學(xué)?!缎胁輨?chuàng)作(3)》2023-2024學(xué)年第一學(xué)期期末試卷
- 同濟(jì)大學(xué)《化工計(jì)算與流程模擬》2023-2024學(xué)年第一學(xué)期期末試卷
- 通遼職業(yè)學(xué)院《廣告策劃與品牌管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 鐵嶺師范高等專(zhuān)科學(xué)?!稄U棄物資源化利用》2023-2024學(xué)年第一學(xué)期期末試卷
- 小區(qū)規(guī)劃課程設(shè)計(jì)范例
- 招標(biāo)文件的編制課程設(shè)計(jì)
- CRDIC系列探地雷達(dá)行業(yè)相關(guān)投資計(jì)劃提議
- 幼兒美術(shù)課程設(shè)計(jì)繪畫(huà)
- 液壓理論課程設(shè)計(jì)
- 宇航員樂(lè)高課程設(shè)計(jì)
- 中華人民共和國(guó)職業(yè)分類(lèi)大典是(專(zhuān)業(yè)職業(yè)分類(lèi)明細(xì))
- 2024年檢察院招錄書(shū)記員考試法律基礎(chǔ)知識(shí)及答案
- 國(guó)開(kāi)2024年秋季《形勢(shì)與政策》大作業(yè)答案
- 北師大版四年級(jí)上冊(cè)除法豎式計(jì)算題300道及答案
- 2024-2030年中國(guó)橡膠伸縮縫行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略分析報(bào)告
- 2021-2022學(xué)年內(nèi)蒙古呼和浩特市高一上學(xué)期期末考試英語(yǔ)試題(解析版)
- 12SG121-1 施工圖結(jié)構(gòu)設(shè)計(jì)總說(shuō)明
- DL∕T 2447-2021 水電站防水淹廠房安全檢查技術(shù)規(guī)程
- AQ 1097-2014 井工煤礦安全設(shè)施設(shè)計(jì)編制導(dǎo)則(正式版)
- 2024裝修補(bǔ)貼協(xié)議書(shū)
- 四川省對(duì)外文化交流中心2024年公開(kāi)招聘工作人員歷年【重點(diǎn)基礎(chǔ)提升】模擬試題(共500題)附帶答案詳解
評(píng)論
0/150
提交評(píng)論