第14章-ASP-NET數據庫應用開發(fā)基礎_第1頁
第14章-ASP-NET數據庫應用開發(fā)基礎_第2頁
第14章-ASP-NET數據庫應用開發(fā)基礎_第3頁
第14章-ASP-NET數據庫應用開發(fā)基礎_第4頁
第14章-ASP-NET數據庫應用開發(fā)基礎_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

《商務網站設計與開發(fā)》溫浩宇西安電子科技大學第14章數據庫應用開發(fā)根底內容14.1數據庫接口ADO.NET14.2連接數據源Connection對象14.3執(zhí)行SQL命令Command對象14.4讀取數據DataReader14.5思考題14.1數據庫接口ADO.NETWeb應用程序對數據庫效勞器的訪問需要在網絡協(xié)議的支持下構建會話〔Session〕,在此根底上,應用程序可以向數據庫效勞器發(fā)出數據的操作請求,比方增加數據、查詢數據等,數據庫效勞器那么會根據請求對數據進行操作或返回查詢結果。雖然各種不同的RDBMS都盡可能遵循新版本的SQL的標準,但應用程序依然不能用相同的代碼來訪問不同的RDBMS。這一方面是因為不同的RDBMS中SQL語法并不完全相同,更重要的方面是每個RDBMS都有不同的建立會話、傳輸SQL、返回數據結果的網絡協(xié)議。雖然通常RDBMS都會提供一組數據庫訪問的應用程序接口〔API〕,但對于應用程序的開發(fā)者而言,不同的接口函數、不同的協(xié)議規(guī)那么不僅提高了學習的難度,而且當數據庫進行升級或移植時難度巨大。如果有一套統(tǒng)一的API作為訪問不同RDBMS的接口,那么會有效降低開發(fā)難度,顯著降低開發(fā)和維護本錢。14.1數據庫接口ADO.NETApplicationDriverManagerDriverDriverDriverDataSourceDataSourceDataSourceODBCAPIODBCAPIODBC的結構圖14.1數據庫接口ADO.NET應用系統(tǒng)ADOOLEDB電子表格ODBCSQLISAM目錄服務文件系統(tǒng)ADO的結構圖14.1數據庫接口ADO.NETADO.NET數據提供程序ASP.NET或其它應用程序其他Web窗體ConnectionCommandDataAdapterDataReaderDataSetWindows窗體數據庫ADO.NET的結構圖14.1數據庫接口ADO.NETADO.NET中包含了一系列核心對象來構建高效、廣泛適用的數據庫訪問方式。其中,Connection對象負責創(chuàng)立于數據源〔不一定是RDBMS〕的連接;Command對象可以向數據庫效勞器發(fā)出SQL命令,完成數據增、刪、改、查,執(zhí)行存儲過程,收發(fā)參數信息等;DataReader對象可以產生一個只讀的記錄集,從而提供高效率的數據讀取方式;DataAdapter對象建立了從數據源到DataSet對象的橋梁,其中利用了Command對象來執(zhí)行多種SQL命令以完成DataSet的數據加載和數據回寫。ADO.NET引入了DataSet的概念,這是一個駐于內存的數據緩沖區(qū),它可以包含多個類似關系型數據庫中的表的對象——DataTable。DataSet替代了ADO原有的Recordset對象,提高了程序的交互性和可擴展性,尤其適合于分布式的應用場合。不管數據來源于一個關系型的數據庫,還是來源于一個XML文檔,都可以用統(tǒng)一的編程模型加載到DataSet中,并對其中的數據進行操作。14.2連接數據源Connection對象可以使用Connection對象來連接數據源,而根據數據源的類型〔比方SQLServer、Oracle等〕要使用DbConnection類的某個子類。例如,訪問OLEDB的數據源需要使用OleDbConnection,訪問SQLServer數據庫需要SqlConnection。名稱說明ConnectionString獲取或設置數據庫的連接字符串。ConnectionTimeout獲取建立連接的最長等待時間,超過等待時間將產生錯誤。Database獲取數據庫的名稱。DataSource獲取數據源(比如數據庫服務器)的名稱。DbProviderFactory獲取數據庫提供者的名稱。ServerVersion獲取服務器版本。State獲取連接狀態(tài)。14.2連接數據源Connection對象ConnectionString為可以設置的屬性。針對特定的數據源,需要給出特定的“連接字符串〞,其中包含了數據庫地址、名稱、用戶名和密碼等信息。下面代碼給出兩個典型的ConnectionString值:DataSource=00;InitialCatalog=crm_db;PersistSecurityInfo=True;UserID=crm_user;Password=123456;ConnectTimeout=30或者DataSource=.;InitialCatalog=DbExamples;IntegratedSecurity=True;ConnectTimeout=3014.2連接數據源Connection對象DbConnection類常用方法usingSystem.Data.SqlClient;……//構建連接字符串stringconnectionString="DataSource=.;InitialCatalog=DbExamples;Integrated

Security=True;ConnectTimeout=30";

//實例化SqlConnection對象SqlConnectionconnection=newSqlConnection(connectionString);

connection.Open();/*這里添加代碼完成數據的操作*/connection.Close();名稱說明Open根據連接字符串連接數據庫。Close關閉數據庫連接。BeginDbTransaction開始一個數據庫事務。CreateDbCommand創(chuàng)建一個與當前連接相關聯(lián)的DbCommand對象。GetSchema從數據源中獲取架構信息。14.2連接數據源Connection對象//在異常處理try/catch塊中翻開數據連接并完成數據的操作try{connection.Open(); /* 這里添加代碼完成數據的操作 */}catch(Exceptionex)//當出現異常時要執(zhí)行的語句{Response.Write(ex.Message);}finally//無論如何都要執(zhí)行的語句{connection.Close();}//結束SqlConnection對象的范圍,并釋放對象14.3執(zhí)行SQL命令Command對象通過Connection對象建立了與數據庫的連接后,就可以使用SQL語言來完成數據的增、刪、改、查。這四項數據操作的根本功能可以被簡稱為CRUD,即Create、Read〔或Retrieve〕、Update和Delete〔或Destroy〕。對于數據庫中已有的數據表,我們可以通過SQL中的Insert、Delete、Update和Select語句分別來完成增、刪、改、查的操作。在ADO.NET中,這些SQL語句通過Command對象傳輸到數據庫效勞器中,并獲取數據庫的反響。DbCommand類是構建Command對象的基類,它的派生類包括SqlCommand〔用于SQLServer數據庫〕、SqlCommand〔用于Oracle數據庫〕、OleDbCommand〔用于OLEDB接口〕、OdbcCommand〔用于ODBC接口〕等。14.3執(zhí)行SQL命令Command對象DbCommand類常用屬性表名稱說明Connection獲取或設置數據庫的連接對象CommandType指定CommandText屬性中的命令類型,包括:Text、StoredProcedure和TableDirectCommandText獲取或設置在數據庫中執(zhí)行的命令CommandTimeout獲取或設置命令執(zhí)行的等待時間,超出時間將報錯Parameters獲取命令中的參數所對應的參數對象集合

Transaction獲取或設置命令所屬的事務對象14.3執(zhí)行SQL命令Command對象DbCommand類常用方法表NameDescriptionExecuteNonQuery執(zhí)行非查詢語句ExecuteReader執(zhí)行查詢語句并返回一個DbDataReader對象ExecuteScalar執(zhí)行查詢語句并返回結果集的第一行第一列的值(通常用于具有集合函數的查詢)

Cancel嘗試取消命令的執(zhí)行CreateParameter創(chuàng)建一個DbParameter實例對象14.3執(zhí)行SQL命令Command對象使用DbCommand類在數據庫中進行數據的增、刪、改、查操作,首先在SQLServer數據庫中建立了一個名為“tb_客戶〞的表。字段名類型是否可為空客戶IDint不可簡稱nvarchar(10)不可全稱nvarchar(50)不可行業(yè)nvarchar(10)不可地址nvarchar(50)不可郵編nvarchar(10)可以座機nvarchar(50)可以手機nvarchar(50)可以聯(lián)系人nvarchar(50)可以代理商名稱nvarchar(50)不可創(chuàng)建時間smalldatetime可以修改時間smalldatetime可以備注nvarchar(50)可以14.3執(zhí)行SQL命令Command對象//構建連接字符串stringconnectionString="DataSource=.;InitialCatalog=DbExamples;IntegratedSecurity=True;ConnectTimeout=30";

//構建SQL字符串stringqueryString="INSERTINTO[tb_客戶]"+"([簡稱],[全稱],[行業(yè)],[地址],[],[座機]"+",[],[聯(lián)系人],[創(chuàng)立時間],[修改時間],[備注])"+"VALUES"+"('浩瀚','深圳浩瀚電子公司','集成電路','深圳南山區(qū)明德路2號','002200','12345678'"+",'1391111111','李浩瀚',2023-1-1,2023-1-1,'新客戶')";14.3執(zhí)行SQL命令Command對象//實例化SqlConnection對象,并規(guī)定了SqlConnection對象的范圍using(SqlConnectionconnection=newSqlConnection(connectionString)){SqlCommandcommand=newSqlCommand(queryString,connection);

//實例化SqlCommand對象try{//在異常處理try/catch塊中翻開數據連接并完成數據的操作connection.Open();inti=command.ExecuteNonQuery();Response.Write("執(zhí)行完畢,"+i+"條數據受到影響");}catch(Exceptionex)//當出現異常時要執(zhí)行的語句{Response.Write(ex.Message);}finally//無論如何都要執(zhí)行的語句{connection.Close();}}//結束SqlConnection對象的范圍,并釋放對象14.3執(zhí)行SQL命令Command對象上述代碼執(zhí)行了一條INSERT語句,同樣的,DELETE和UPDATE語句都可以用以上的代碼結構,只是字符串變量queryString的賦值不同而已,例如“刪除〞數據的操作代碼為:stringqueryString="DELETEFROMtb_客戶WHERE簡稱='浩瀚'";“修改〞數據的操作代碼為:stringqueryString="UPDATE[tb_客戶]SET[全稱]='深圳浩瀚醫(yī)療器械公司'WHERE簡稱='浩瀚'";14.3執(zhí)行SQL命令Command對象查詢操作與非查詢操作最大的不同是,查詢操作會返回一個查詢結果集。對于關系型數據庫系統(tǒng)而言,查詢結果集是一個二維表,ADO.NET中提供了DataReader對象來讀取結果集中的數據。Command對象使用ExecuteReader函數〔而不是ExecuteNonQuery函數〕實例化一個DataReader對象,隨后就可以使用DataReader對象的Read函數來逐條讀取結果集中的每一個數據項。14.3執(zhí)行SQL命令Command對象//構建SQL字符串stringqueryString="SELECTTOP10*FROMtb_客戶WHERE簡稱='浩瀚'";//實例化SqlCommand對象SqlCommandcommand=newSqlCommand(queryString,connection);//實例化SqlDataReader對象SqlDataReaderreader=command.ExecuteReader();

while(reader.Read()){Response.Write("簡稱:"+reader["簡稱"]+";");Response.Write("全稱:"+reader["全稱"]+";");Response.Write("<br/>");}……14.3執(zhí)行SQL命令Command對象完成對數據的各種增、刪、改、查操作是建立數據庫管理系統(tǒng)的基石,不管操作有多么復雜,本質上都是形成各種SQL語句傳輸到數據庫效勞器中來執(zhí)行。ASP.NET程序的主要任務就是提供用戶界面以獲取用戶對數據的操作需求,下面我們通過簡單的ASP.NET代碼把上述的數據增、刪、改、查操作繼承在一個頁面中。14.4讀取數據DataReader可以使用Command對象向數據庫傳輸增、刪、改、查的SQL指令。對于非查詢的操作,SQLServer效勞器會返回操作所影響的行數,而對于查詢操作,那么返回一個二維表結構的結果集,這是就需要DataReader對象來讀取這些數據。DataReader對象讀取數據時只能從頭到尾單向讀取〔forward-only〕,這主要是出于效率的考慮。實際上這種單向讀取數據的方式完全滿足Web程序設計的需求。DbDataReader類是構建DataReader對象的基類,它的派生類包括SqlDataReader〔用于SQLServer數據庫〕、OracleDataReader〔用于Oracle數據庫〕、OleDbDataReader〔用于OLEDB接口〕、OdbcDataReader〔用于ODBC接口〕等。14.4讀取數據DataReaderDbDataReader類常用屬性表名稱說明Depth獲取當前行的嵌套深度值FieldCount獲取當前行的字段數量HasRows獲取是否包含一行或多行數據IsClosed獲取是否DataReader已經關閉Item[Int32]通過字段序號獲取指定字段的值Item[String]通過字段名稱獲取指定字段的值VisibleFieldCount獲取可見字段的數量14.4讀取數據DataReaderDbDataReader類常用方法表名稱說明Read將讀取器前進到結果集中的下一個記錄。Close關閉DataReader對象。Dispose釋放DataReader對象實例所使用的所有資源。GetBoolean獲取指定列的布爾值形式的值。GetByte獲取指定列的字節(jié)形式的值。GetBytes從指定列讀取一個字節(jié)流讀到緩沖區(qū)中。GetChar獲取指定列的單個字符串形式的值。GetChars從指定列讀取一個字符流。GetDecimal獲取指定列的Decimal對象形式的值。GetDouble獲取指定列的雙精度浮點數形式的值。GetFloat獲取指定列的單精度浮點數形式的值。GetGuid獲取指定列的全局唯一標識符(GUID)形式的值。名稱說明GetInt16獲取指定列的16位有符號整數形式的值。GetInt32獲取指定列的32位有符號整數形式的值。GetInt64獲取指定列的64位有符號整數形式的值。GetDateTime獲取指定列的DateTime對象形式的值。GetString獲取指定列的作為String的實例的值。GetValue獲取指定列的作為Object的實例的值。GetValues使用當前行的列值來填充對象數組。IsDBNull獲取一個值,該值指示列是否為空(NULL)。GetName給定了從零開始的列序號時,獲取列的名稱。GetOrdinal給定列名稱時,獲取列序號。GetDataTypeName獲取指定列的數據類型的名稱。GetFieldType獲取指定列的數據類型。NextResult讀取批處理語句的結果時,使讀取器前進到下一個結果。14.4讀取數據DataReader在DbDataReader類的方法中有多個以某種類型獲取數據的方法,比方GetString、GetInt32等,這些方法雖然可以獲取指定列的值,但參數中只能用使用列序號,而不能使用列的名稱。比方以下三行代碼都可以獲得第2列〔字段名為“簡稱〞〕的值,并輸出到HTML中:Response.Write("簡稱:"+reader[1]+";");Response.Write("簡稱:"+reader["簡稱"]+";");Response.Write("簡稱:"+reader.GetString(1)+";");當然,使用列序號需要注意,與C/C++語言一樣,C#的數組下標是從0開始的;另外,使用列名稱的可讀性和可維護性都要更優(yōu)。特別是,如果使用列序號,一旦數據庫表中的列順序發(fā)生變化,可能會帶來程序的運行異常。14.4讀取數據DataReader使用Command對象執(zhí)行SQL查詢命令時已經給出了使用DataReader對象的方法,其中與DataReader對象有關的核心代碼如下:stringqueryString="SELECTTOP10*FROMtb_客戶WHERE簡稱='浩瀚'";

//構建SQL字符串……//實例化SqlCommand對象SqlCommandcommand=newSqlCommand(queryString,connection);

SqlDataReaderreader=command.ExecuteReader();

//實例化SqlDataReader對象

while(reader.Read()){Response.Write("簡稱:"+reader["簡稱"]+";");Response.Write("全稱:"+reader["全稱"]+";");Response.Write("<br/>");}reader.Close();14.4讀取數據DataReader在Response對象輸出字符串時,輸出一個完整的<table>內容。Response.Write("<tableborder='1'>");//輸出Table的起始標簽Response.Write("<tr><td>簡稱</td><td>全稱</td></tr>");//輸出標題行

while(reader.Read()){Response.Write("<tr><td>"+reader["簡稱"]+"</td><td>"+reader["全稱"]+"</td></tr>");//輸出數據行}Response.Write("</table>");//輸出Table的終結標簽14.4讀取數據DataReader為了提高開發(fā)效率,ASP.NET提供了大量的Web效勞器控件,其中在效勞器端運行的Table控件就可以很好地幫助構建HTML中的<table>。while(reader.Read()){TableRowtempRow=newTableRow();TableCelltempCell=newTableCell();tempCell.Text=reader["簡稱"].ToString();tempRow.Cells.Add(tempCell);tempCell=newTableCell();tempCell.Text=reader["全稱"].ToString();tempRow.Cells.Add(tempCell);Table1.Rows.Add(tempRow);}14.4讀取數據DataReader對于廣泛的數據庫應用開發(fā)需求,ASP.NET專門提供了許多針對結構化數據的Web效勞器控件,其中Repeater控件就可以簡化多條數據的迭代輸出的開發(fā)工作。Repeater控件是一個數據綁定容器控件,用于生成多條數據的列表。我們可以使用Repeater中的<ItemTe

溫馨提示

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

評論

0/150

提交評論