国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

ASP.NET立即上手教程(9)_.Net教程

2024-07-10 12:50:15
字體:
來源:轉載
供稿:網友

推薦:ASP.NET立即上手教程(7)
Web Forms 用戶控件用戶控件介紹除了ASP.NET提供的內建的服務器控件外,你還可以使用已經掌握的制作WEB FORMS 頁面的技術,輕松的定義自己的控件。實際上,只需要稍微改動一下,幾乎任何W

服務器端數據介紹

數據訪問是現實世界中應用程序的核心內容。Asp.net提供了一套豐富的控件,他與CLR(通用語言運行庫)提供的用來管理數據訪問的APIs(應用程序接口)緊密結合。本章預排幾個反復使用asp.net的DateGrid控件來綁定SQL查詢結果和XML數據文件的例子。本章假定學習者熟悉數據庫基礎和SQL查詢語言。

Wincheer注:預排(walk through)這個詞不知道該怎樣準確翻譯,他的意思是在計算機程序設計中,在一個小組內進行有組織的討論,以便對計算機程序的邏輯進行跟蹤檢查的一個過程。

服務器端數據訪問比較獨特,其原因在于web頁面是無態的。這就導致在試圖執行事務,如插入或者更新記錄的時候,出現了一些有難度的挑戰。正如你將在本章看到的,DataGrid控件能夠幫助管理這些挑戰,允許你濃縮更多的應用程序邏輯,并且減少事件處理和狀態管理的細節。

Connections(連接)、Commands(命令)、和Datasets(數據集)

通用語言運行時刻(CLR)提供了一整套管理數據訪問的APIs,用來增強數據應用程序開發環境。這些應用程序接口用一致的方式來取得和填充數據,而不管實際的數據源是什么(SQL Server, OLEDB, XML,等等)最常用的三個對象是connections, commands, 和 datasets.

Connection 表示到數據存儲的物理連接,例如連接SQL Server 或者 XML文件。

Command 表示取得(select)或者操作(insert, update, delete)數據存儲的命令。

Dataset 表示應用程序用以工作的實際數據。注意datasets 總是與他們的數據源連接和數據模型分離,并且可以被獨立修改。 不過,對dataset進行修改,可以很容易的與原始數據模型協調一致。

關于在通用語言運行時刻管理數據訪問的更多細節問題,請參閱ADO.NET概述。

訪問基于SQL的數據

應用程序常常需要對SQL數據庫執行一個或多個select, insert, update, 或者delete 語句。下面的表格展示了一些實現這些功能的示例代碼。

以下為引用的內容:
功能 舉例
------------------------------------------------------------------
簡單查詢 | SELECT * from Employees WHERE FirstName = 'Bradley';
------------------------------------------------------------------
聯合查詢 | SELECT * from Employees E, Managers M WHERE E.FirstName = M.FirstName;
------------------------------------------------------------------
插入 | INSERT into Employees VALUES ('123-45-6789','Bradley','Millington','Program Manager');
------------------------------------------------------------------
更新 | UPDATE Employees SET Title = 'Development Lead' WHERE FirstName = 'Bradley';
------------------------------------------------------------------
刪除 | DELETE from Employees WHERE Productivity < 10;
------------------------------------------------------------------

要想讓你的頁面能夠訪問SQL數據庫,必須在頁面中引入System.Data 和 System.Data.SqlClient名稱空間:

<%@ Import Namespace="System.Data" %>

<%@ Import Namespace="System.Data.SqlClient" %>

為了從SQL數據庫執行select查詢,你需要通過連接字符串建立一個連接到數據庫的SqlConnection對象, 然后構造一個包含查詢語句的SqlDataAdapter對象。為了用查詢的返回結果填充到DataSet 對象,需要調用SqlDataAdapter的Fill方法。

以下為引用的內容:
SqlConnection myConnection = new SqlConnection("server=(local)/NetSDK;database=pubs;Trusted_Connection=yes");
SqlDataAdapter myCommand = new SqlDataAdapter("select * from Authors", myConnection);
DataSet ds = new DataSet();
myCommand.Fill(ds, "Authors");

正如本章前面提到的那樣,使用dataset的好處在于提供了一個分離的數據庫視圖。你可以在應用程序中操作dataset,然后將你的修改與實際的數據庫一致。對于長時間運行的應用程序來說,由于避免了頻繁的讀取數據源,因而是最好的處理辦法。對于web應用程序來說,往往使用簡短的操作(通常只是簡單的顯示數據)來處理客戶端的請求。在這種情況下,我們就可以使用SqlDataReader來代替DataSet對象。

SqlDataReader對象提供了一種從sql數據庫取得數據時,只向前,只讀的指針。由于SqlDataReader對象使用表格式數據流(TDS)直接從數據庫連接讀取數據,所以,在允許使用的情況下,他的執行效率高于DataSet。

使用SqlDataReader對象的時候,需要使用SqlCommand來代替SqlDataAdapter。SqlCommand 使用 ExecuteReader 方法得到SqlDataReader對象。注意在使用SqlCommand的時候,必須顯式地打開和關閉SqlConnection。調用ExecuteReader方法之后,SqlDataReader對象就可以作為數據源綁定到ASP.NET服務器控件了。下一個小節將會演示這種情況。

以下為引用的內容:
SqlConnection myConnection = new SqlConnection("server=(local)/NetSDK;database=pubs;Trusted_Connection=yes");
SqlCommand myCommand = new SqlCommand("select * from Authors", myConnection);
myConnection.Open();
SqlDataReader dr = myCommand.ExecuteReader();
...
myConnection.Close();

當執行一條不需要返回數據的SQL命令,如inserts, updates, 和 deletes,也使用SqlCommand。該命令通過調用ExecuteNonQuery方法來執行,返回實際處理的行數。注意使用SqlCommand的時候,必須顯式的打開連接;而SqlDataAdapter則自動的打開連接。

以下為引用的內容:
SqlConnection myConnection = new SqlConnection("server=(local)/NetSDK;database=pubs;Trusted_Connection=yes");
SqlCommand myCommand = new SqlCommand(
"UPDATE Authors SET phone='(800) 555-5555' WHERE au_id = '123-45-6789'",
myConnection);
myCommand.Connection.Open();
myCommand.ExecuteNonQuery();
myCommand.Connection.Close();

重要提示:頁面執行完畢之后,記得務必將數據模型的連接關閉。否則的話,當等待垃圾回收功能處理頁面實例的時候,可能在不經意間就消耗盡連接數限制。

將SQL數據綁定到DataGrid

下面的例子展示了將一個簡單的查詢語句綁定到DataGrid 控件。DataGrid 交付了一個包含sql數據的表。

類似數據綁定那一章提到的DropDownList, DataGrid 控件支持Ienumerable或者 Icollection 類型的DataSource屬性,就如同DataSet一樣。你可以通過將(包含在DataSet中的)表的DefaultView屬性賦值給想使用的(DataSet中的)表的名稱,來使用DataSet控件, DefaultView 屬性表示DataSet中當前表的狀態,包含應用程序代碼所作的任何改變(例如行刪除或者值的改變)。設置了DataSource 屬性以后,可以調用DataBind()來填充控件。

以下為引用的內容:
MyDataGrid.DataSource=ds.Tables["Authors"].DefaultView;
MyDataGrid.DataBind();

另一個相同的語法是同時指定DataSource 和DataMember. 在本例中, ASP.NET自動為你獲取了取得了DefaultView。

以下為引用的內容:
MyDataGrid.DataSource=ds;
MyDataGrid.DataMember="Authors";
MyDataGrid.DataBind();

你也可以直接綁定到SqlDataReader。如果你僅僅顯示數據,那么SqlDataReader 的"只向前"特性非常適合這種場合,同時你可以得到更高的執行性能。

注意:在本章的剩余部分,我們使用的都是DataSet這種數據訪問模式來演示;實際上,這些例子也同樣可以使用SQLDataReader來重寫。

執行用參數表示的Select命令

你也可以使用SqlDataAdapter對象來執行帶參數的select語句。下面的例子演示如何使用select HtmlControl控件傳遞的值來改變查詢的結果。

SqlDataAdapter 包含Parameters 集合,可以使用變量標識符(名稱前加一個"@") 來代替值。 你可以給這個集合增加一個新的SqlParameter 來指定參數的名稱、類型、和大小,然后設置他的Value屬性的值。

以下為引用的內容:
myCommand.SelectCommand.Parameters.Add(new SqlParameter("@State", SqlDbType.NVarChar, 2));
myCommand.SelectCommand.Parameters["@State"].Value = MySelect.Value;

重要提示:注意DataGrid的EnableViewState屬性缺省設置是false。如果在每一次頁面請求時填充數據,就沒有必要讓DataGrid保存表單發送的狀態信息。由于DataGrid保存它包含的所有的狀態的數據,因此將EnableViewState關閉可以提高頁面執行性能。

上面的例子靜態的填充列表框的數據。如果數據庫中的值已經發生了變化,這種方法就不能夠很好的工作。 由于列表框也支持IEnumerable DataSource屬性,所以你可以使用select查詢來動態的填充列表框的值,這樣可以保證數據庫和用戶接口總是一致的。下面的例子演示了這個過程。

在SQL數據庫中插入數據

為了在數據庫中插入一行記錄,你可以在頁面上增加一個輸入表單,然后在表單提交的事件句柄中執行一條插入命令。就像上面兩個例子一樣,你是用命令對象的參數集合填充命令的值。在插入數據的之前,注意檢查并確保從表單得到的值不能為空,這樣可以避免數據庫字段約束條件的意外錯誤。為了防止數據表中主索引與欲插入的記錄重復,可以使用try/catch語句塊來執行插入命令。

除了明確的檢查輸入數據以外,你也可以使用前面章節提到的驗證控件來檢查數據輸入。下面的例子向你展示了如何使用做到這一點。注意正則表達式驗證控件在檢查作者id、郵政編碼和電話號碼等字段時的方便。

分享:ASP.NET立即上手教程(8)
Asp.net引入了一種新的聲明數據綁定的語法。這種極其靈活的語法允許開發者不僅綁定數據源,而且可以綁定簡單的屬性、集合、表達式、甚至是調用方法所返回的結果。下面的列表顯示了這種新語法的

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 工布江达县| 荥经县| 青川县| 泌阳县| 古交市| 铅山县| 闻喜县| 合川市| 子长县| 临沂市| 射洪县| 丰顺县| 宜兰市| 吉林省| 达孜县| 东莞市| 江源县| 崇礼县| 义乌市| 威海市| 陵川县| 万全县| 贵溪市| 凤山县| 无为县| 壶关县| 合川市| 赫章县| 开平市| 平邑县| 恩平市| 辽源市| 承德县| 上饶市| 玛沁县| 鄢陵县| 甘谷县| 平定县| 安阳县| 独山县| 务川|