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

首頁 > 編程 > .NET > 正文

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

2024-07-10 13:12:19
字體:
來源:轉載
供稿:網友
  • 本文來源于網頁設計愛好者web開發社區http://www.html.org.cn收集整理,歡迎訪問。
  • 服務器端數據介紹

    數據訪問是現實世界中應用程序的核心內容。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、郵政編碼和電話號碼等字段時的方便。

    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 将乐县| 班玛县| 宝兴县| 赣榆县| 西青区| 潼关县| 通城县| 翼城县| 丰顺县| 广南县| 贵德县| 乐业县| 将乐县| 新龙县| 石屏县| 三亚市| 安阳县| 古丈县| 菏泽市| 齐齐哈尔市| 莱西市| 临夏市| 修武县| 通渭县| 府谷县| 沛县| 五莲县| 兰州市| 文化| 昌黎县| 克山县| 平远县| 隆回县| 湖州市| 二连浩特市| 禹州市| 仙桃市| 太和县| 禹州市| 北安市| 巴彦淖尔市|