六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

ASP 3.0高級編程(414)

[摘要]第10章 ASP與客戶端數據在一本ASP專著中討論客戶端數據,這與服務器端的ASP編程是否矛盾?情況并非如此,因為我們至今尚未碰到只從事服務器端編程的ASP程序員。雖然ASP是一項服務器端技術,但可...
第10章 ASP與客戶端數據

在一本ASP專著中討論客戶端數據,這與服務器端的ASP編程是否矛盾?情況并非如此,因為我們至今尚未碰到只從事服務器端編程的ASP程序員。雖然ASP是一項服務器端技術,但可以想象,編程人員不可能僅僅使用ASP進行編程。從事ASP編程的Web開發人員,仍然需要與客戶端數據進行交互。
因此,圍繞著ASP構建一個應用程序時必須考慮整個應用程序的情況,這也意味著必須考慮客戶端。為了獲得一個運行良好、快速響應的應用程序,需要很好地使用客戶端數據。
本章將討論如何在客戶端使用數據。特別將著重研究:
· 遠程數據服務(Remote Data Services,RDS),如何向客戶端傳送數據以及客戶端接收數據。
· 如何將ADO記錄集綁定到HTML控件。
· 如何利用用戶自定義組件提供數據。
· 如何更新客戶端數據,并將其反饋到服務器。
· 如何從數據庫中獲取圖像并將其顯示在Web頁面中。
· 如何創建基于表格的Web頁面。
以上覆蓋的范圍相當廣泛,同時有很多不同的方法可以取得相同的結果,但實際上實現起來并不是特別困難。

10.1 斷開連接的記錄集
首先需要掌握的是“斷開連接的數據”的概念。迄今為止,在研究ADO的過程中,已經學習了獲取記錄集的方法,以及如何修改這些記錄集中的數據。回顧一下,我們打開一個記錄集,對數據做一些修改,然后再關閉這個記錄集,在操作記錄集的過程中,始終與服務器保持著連接。這是相當明顯的,但別忘了Web在本質上是無狀態的。如果想使用客戶端數據,如何始終保持與服務器的連接?很簡單,這是不可能實現的,這也是定義斷開連接的記錄集概念的緣由。
一個斷開連接的記錄集只是一個普通的記錄集,但解除了與服務器的連接,成為孤立的對象,可以像普通的記錄集那樣對其執行更新、增加和刪除操作。但這些變化只發生在記錄集內部,并不反饋到服務器,因為記錄集與服務器已不再保持著連接。這并不是缺點,因為可以與服務器重新建立連接,同時服務器可以對任何修改進行更新。即使服務器端的數據已經改變了,ADO仍然有方法讓用戶及時發現這些變化,這樣用戶就能決定哪些數據是正確的。這稱為沖突處理(conflict resolution)。
斷開連接的記錄集使我們能在組件之間,包括服務器與客戶之間,傳送具有全部功能的記錄集。本章后面將探討如何在組件內創建斷開連接的記錄集。但這里不準備對此做過于詳細的研究,因為本書第13章至第18章已經覆蓋這部分內容,這里僅做簡單的介紹,以便于了解組件是如何與遠程數據服務交互的。

10.2 遠程數據服務
遠程數據服務(Remote Data Services,RDS)是允許我們處理客戶端數據的一系列服務的統稱。現在不用擔心這方面的問題,因為RDS本身就是ADO的一部分,只有在需要傳送和使用客戶端數據時,才會使用。實際上RDS是由幾個組件構成的。圖10-1說明了這些組件以及它們之間是如何協同工作的。
圖10-1  RDS的組件構成
組件似乎很多,但并不是所有的組件在每種情形下都被使用,實際上有一些不是RDS的一部分。然而這里還是把所有可能出現的組件都放在了圖上,以備需要時查看。圖10-1分成了兩部分,因為使用客戶端數據需要一些向客戶端傳送數據的方法,同時數據一旦到達客戶端,也需要一些管理數據的方法。我們先從服務器端開始。

10.2.1 RDS服務器組件
雖然RDS用于傳送和訪問客戶端數據,但其確實有一些基于服務器的組件。這是必需的,因為肯定需要某種方式將數據傳送到客戶端。因此有了一系列能訪問數據并允許發送數據到客戶端的服務器組件。我們把實際的數據傳送稱為調度(marshal)。
服務器端組件圖的最上端是數據存儲,由OLE DB提供者訪問。它并不是RDS的一部分,但這表示只要有相應的OLE DB提供者,就可以通過RDS在客戶端使用任何數據。至于如何處理服務器上的數據,可以有兩種選擇:
· 數據工廠(DataFactory)是缺省的用于訪問數據存儲的服務器端組件。它作為服務器端RDS組件的一部分安裝在計算機上,除了能從數據存儲中獲取數據外,還為服務器處理發送到客戶端以及從客戶端發送來的數據。
· 自定義組件只是一個普通的提供了數據傳送方法的COM組件。當數據工廠不能提供所需的功能時,可以使用自定義組件。本章將介紹一個簡單的組件例子,在本書的后面還有一個更復雜的例子。
Web服務器使用這兩種組件作為客戶和服務器數據的接口。

10.2.2 RDS客戶組件
在客戶端先從底端的DataSpace對象開始,該對象作為客戶端的一部分與數據工廠或自定義對象協同工作。DataSpace對象是一個代理對象,負責與服務器進行通信,同時也是數據傳輸的通道(或者通常所說的調度)。DataSpace對象是用客戶端腳本語言或用HTML語言中的<OBJECT>標記創建的COM對象。在本章后面會看到關于這方面的例子。
DataSpace對象上面是數據源對象(Data Source Object,DSO),負責存儲客戶端數據。一個數據源對象包含一個ADO數據記錄集,與客戶數據緩存共同管理數據。客戶數據緩存只是一種管理客戶端數據的客戶光標服務。同時數據源對象又是一個COM對象,與DataSpace對象類似,也可以通過客戶端腳本或使用HTML語言中的<OBJECT>標記來創建。同樣,在本章稍后也會介紹關于這方面的一些例子。
數據源對象的上面是數據綁定管理器,任務是建立HTML控件與數據源對象的連接。這就是我們所知道的綁定,可以通過設置某些HTML控件的DATASRC和DATAFLD屬性來實現。下面將對這些內容進行討論,并示范如何在瀏覽器中方便地使用數據。

10.2.3 支持RDS的瀏覽器
要知道RDS是微軟的技術,因此只能在微軟的瀏覽器上工作。實際上,只有在IE 4.0或更高版本的瀏覽器中才完全支持RDS。
當編寫依賴于RDS的應用程序時,需要注意訪問應用程序的客戶的RDS版本可能與服務器端有所不同。舉例來說,IE 4中的是RDS 1.5版本,而IE 5、Office 2000和Visual Studio 6中的則是RDS 2.0版本。有兩種方法可以處理這種兼容性問題:
· 確保所有用戶已經升級到RDS的最新版本。如果客戶運行的是Windows 2000,那么已經在運行最新版本的RDS了。否則,可以從網址www.microsoft.com/data處下載。RDS 2.5版本是目前最新的隨同Windows 2000一起發布的版本,同時也是一個可單獨下載的軟件包。
· 當連接到數據源時,指定數據工廠的模式。這可以指定使用的是哪一個版本的RDS組件,后面將介紹這方面的一個例子。

10.2.4 數據源對象
數據源對象是一個存儲和管理客戶端數據的客戶端對象。因為這是使用RDS最簡單的一種方式,首先研究一下這些對象。
這里有幾個不同的數據源對象,每一個都針對不同類型的數據:
· 表格數據控件(Tabular Data Control,TDC),用于處理表格形式或分隔形式的文本文件。
· RDS數據控件,用于連接OLE DB數據存儲,能夠指定連接到哪個數據存儲,以及返回哪些數據。
· Java數據庫連接器,這是一個通過Java數據庫控件(Java DataBase Control,JDBC)連接到數據存儲的Java小程序。這里我們不想討論JDBC,因為它并不提供其他控件無法實現的功能。
· 微軟的HTML(MSHTML)數據源對象用HTML標記數據,并把它作為數據源。
· XML數據源對象使用XML數據,用于結構化的或任意結構的XML。
選用哪一種數據源對象取決于你想做什么,以及數據從哪里來。如果需要向客戶提供少量的數據,并且不允許用戶修改數據,那么表格數據控件(TDC)可能會比較適合。這種數據源是一個文本文件,不需要任何數據庫,因此編輯起來比較簡單。對于從數據庫中取出數據并且可能需要更新的情況,RDS數據控件是最合適的。而對于許多新數據源,會發現此時需要使用XML數據控件。這實際依賴于所使用的Web應用程序的類型,以及用戶所需的功能。
我們將依次介紹這些數據控件,一旦了解了如何用它們把數據傳送到客戶端,將會介紹如何使用這些數據。
1.  表格數據控件
表格數據控件(Tabular Data Control,TDC)是最簡單的數據源對象,主要用于少量的只讀數據,特別是那些從不改變或很少修改的,不需要從客戶端進行更新的靜態數據。例如,表格數據控件能提供一個網頁內的菜單項或鏈接的列表。
通過在HTML代碼中使用<OBJECT>標記可以創建一個表格數據控件。參數DataURL可以指定包含文本數據的文件名。
<OBJECT CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83"
              ID="dsoAuthors" WIDTH="0" HEIGHT="0">
   <PARAM NAME="DataURL" VALUE="Authors.csv">
</OBJECT>
TDC只讀取表格中的數據或標記為表格形式的數據,例如,可以處理逗號分隔形式的數據(Comma Separated Value, CSV),類似于下面的數據:
"172-32-1176","White","Bob","408 496-7223"
"219-46-8915","Green","Marjorie","415 986-7020"
"238-95-7766","Carson","Cheryl","415 548-7723"
"267-41-2394","O'Leary","Michael","408 286-2428"
"274-80-9391","Straight","Dean","415 834-2919"
"341-22-1782","Smith","Meander","913 843-0462"
"409-56-7008","Bennet","Abraham","415 658-9932"
TDC也可以自由定義。除了DataURL外,TDC還有16個參數,可以通過設置OBJECT標記的參數項或編寫腳本代碼來配置這些參數。參數的說明如表10-1所示:
表10-1  TDC的參數及說明
屬 性
數據類型
說 明
缺 省 值

AppendData
布爾型
確定新數據是替換還是追加到數據源對象中的現有數據
False

CaseSensitive
布爾型
指出字符串比較時是否大小寫敏感
True

CharSet
字符型
指出數據的字符集類型。附錄中字符集的列表
Windows-1252

DataURL
字符型
指出數據源文件的URL


EscapeChar
字符型
指定源文件中使用的轉義字符。這些字符位于其他字符的前面以避免與FieldDelim、RomDelim或TextQualifier混淆


FieldDelim
字符型
指定字段之間的分隔字符
,(逗號)

Filter
字符型
設置過濾條件


Filtercolumn
字符型
設置過濾的列


FilterValue
字符型
設置過濾的列的值


Language
字符型
指定數據文件使用的語言
en-us(美國英語)

ReadyState
長整型
指出控件的當前狀態。可以是以下值:adcReadyStateComplete(4)表明所有的數據都傳送完畢,或發生了一個錯誤
adcReadyStateInteractive(3)表明數據正在傳送中
adcReadyStateLoaded(2)表明控件已被加載并等待數據傳輸
這個屬性是只讀的


RowDelim
字符型
指定文本文件中的行分隔符,缺省為回車符
一個新行字符

Sort
字符型
指出要排序的列的列表。列名前有減號表明是按降序排序,否則按升序排序


SortDirection
布爾型
如果排序是升序則為True,降序則為False


SortColumn
字符型
指定排序的列


TextQualifier
字符型
指定封閉文本字段的字符,缺省為雙引號
"(雙引號)

UseHeader
布爾型
表明文本文件中首行是否包含列名
False

下面是使用參數創建TDC的一個例子。
<OBJECT CLASSID="clsid:333C7BC4-460F-11D0-BC04-0080C7055A83"
                     ID="dsoAuthors" WIDTH="0" HEIGHT="0">
   <PARAM NAME="DataURL" VALUE="Authors.csv">
</OBJECT>
也可以在客戶端腳本中獲取數據,下面的例子顯示了給TDC加載數據的JScript腳本。
function fillTDC()
{
       dsoAuthors.dataURL = 'authors.csv';
       dsoAuthors.Reset();
}
如果改變了TDC的DataURL參數,必須使用Reset方法,這樣才能使新的URL起作用。當介紹數據綁定時,會更詳細地討論如何使用它。Reset方法是TDC唯一的一個方法。
2.  RDS數據控件
RDS數據控件能夠訪問一般的數據存儲,而不是平面文件。它通常用于連接SQL數據庫以從表、查詢或存儲過程獲取數據。與TDC不同,RDS數據控件允許更新數據。在本章稍后通過示例說明如何進行數據更新。
類似于TDC,可以用HTML腳本中的OBJECT標記來創建一個RDS數據控件,并以類似的方式設置其屬性。
<OBJECT CLASSID='clsid:BD96C556-65A3-11D0-983A-00C04FC29E33"
                     ID="dsoAuthors" WIDTH="0" HEIGHT="0">
       <PARAM NAME="Connect" VALUE="Connection String">
       <PARAM NAME="Server" VALUE="Server Name">
       <PARAM NAME="SQL" VALUE="Query Text">
</OBJECT>
同樣,注意定制數據控件時參數的使用方法。上面的例子顯示了最常見的設置方法。和TDC一樣,還有很多其他可以設置的參數,如表10-2所示:
表10-2  RDS數據控件的參數及說明
屬  性
數據類型
說 明
缺 省 值

Connect
字符型
一個標識數據存儲的ADO連續字符串


ExecuteOptions
長整型
指出命令是異步執行還是同步執行。可以是以下值之一:
adcExecSync(1)同步執行(缺省值)
adcExecAsync(2)異步執行
adExecAsync

FetchOptions
長整型
獲取數據的方式,可以是以下值:
adcFetchUpFront(1)先取數據,然后將控制交給應用程序
adcFetchBackground(2)先立即取得第一批數據,剩余的數據在后臺獲取
adcFetchAsync(3)在后臺獲取所有的數據
adcFetchAsync

FilterColumn
字符型
指定被過濾的列


FilterCriterion
字符型
指定過濾的條件。可以是以下運算符:
<(小于)
<=(小于等于)
=(等于)
>=(大于等于)
>(大于)
<>(不等于)


FilterValue
字符型
過濾的值


Handler
字符型
自定義的數據處理器的名稱和參數
MSDFMAP.Handler

InternetTimeout
長整型
在錯誤發生前等待的時間(毫秒為單位)
300000

ReadyState
長整型
控件的當前狀態,可以是以下值:
adcReadyStateComplete(4)表明所有的數據都傳送完畢,或發生了一個錯誤
adcReadyStateInteractive(3)表明數據仍然在傳送中
adcReadyStateLoaded(2)表明控件已被加載并等待數據傳輸


Recordset
記錄集型
數據控件訪問的ADO數據記錄集。該參數只讀


Server
字符型
數據所在的服務器的名稱。為了安全,必須與提供Web頁面的服務器同名。可以是一個標準URL,也可以是機器名稱(如果使用DCOM)


SortColumn
字符型
排序的列名


SortDirection
布爾型
表明排序是否為升序


SourceRecordset
字符型
將控件的基礎記錄集設置為一個現有的記錄集。該屬性只寫


SQL
字符型
獲取數據的SQL字符串


URL
字符型
數據源的URL





主站蜘蛛池模板: 一级做a爱片久久毛片 | 中文字幕第一页在线播放 | 四虎永久在线精品视频播放 | 手机看片国产精品 | 亚洲吹箫 | 小小的日本在线观看中文 | 日本青草 | 香蕉香蕉国产片一级一级毛片 | 欧美视频自拍偷拍 | 最近中文字幕无吗高清免费视频 | 日韩精品免费观看 | 天天狠天天透天干天天怕处 | 色噜噜狠狠在爱丁香 | 天堂网在线最新版www中文网 | 日本aa在线 | 天干天夜啪天天碰 | 亚洲看逼 | 日韩视频在线观看免费 | 亚洲欧美在线精品一区二区 | 天天做天天躁天天躁 | 日日夜夜天天操 | 日韩欧美视频在线一区二区 | 中文字幕在线精品不卡 | 欧美亚洲另类自拍偷在线拍 | 日韩a级毛片免费视频 | 色婷婷综合激情 | 校园激情综合网 | 午夜精品视频在线观看 | 日韩视频中文字幕专区 | 四虎影院永久免费观看 | 午夜黄色福利视频 | 桃色成人精品网站 | 日韩视频免费观看 | 青青青草视频在线观看 | 亚洲日韩中文第一精品 | 天堂v | 伊人久久大香网 | 午夜性刺激免费视频观看不卡专区 | 青草视频在线观看免费网站 | 日韩 亚洲 翔田千里 在线 | 亚洲第一天堂无码专区 |