客戶端的一個(gè)連接(SQLConnection)能夠共享服務(wù)器方法對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)連接。這樣就可以做到一個(gè)客戶端連接唯一關(guān)聯(lián)服務(wù)器端的一條數(shù)據(jù)庫(kù)連接;通過(guò)該共享連接,在客戶端可以直接執(zhí)行數(shù)據(jù)庫(kù)的SQL語(yǔ)句以及存儲(chǔ)過(guò)程,并且可以與服務(wù)器端的調(diào)用方法處于相同的事務(wù)上下文中。
共享連接的實(shí)現(xiàn),是通過(guò)客戶端調(diào)用服務(wù)器的一個(gè)返回TDBXConnection實(shí)例的方法來(lái)實(shí)現(xiàn)的。該返回實(shí)例并不是真正地返回到客戶端,它仍然保留在服務(wù)器端,客戶端隨后提交執(zhí)行的SQL語(yǔ)句或存儲(chǔ)過(guò)程,就是由此實(shí)例來(lái)負(fù)責(zé)完成。為在客戶端實(shí)現(xiàn)上的方便起見,返回TDBXConnection實(shí)例的服務(wù)器端調(diào)用方法可以在客戶端的SQLConnection控件的TDBXPropertyNames.ServerConnection屬性中指定,當(dāng)客戶端執(zhí)行SQLConnection.Open時(shí),就獲得了一個(gè)服務(wù)器端的數(shù)據(jù)庫(kù)共享連接。比如服務(wù)器端提供了這樣一個(gè)函數(shù):function TServerMethods1.GetShareConn: TDBXConnection,ServerConnection屬性就設(shè)置為'TServerMethods1.GetShareConn'。
DataSnap也提供了一個(gè)內(nèi)建方法DSAdmin.GetConnection返回TDBXConnection,客戶端可以直接使用它來(lái)建立共享連接。但此方法要求服務(wù)器端部署dbxconnections.ini文件。在設(shè)計(jì)時(shí),可以在IDE的Data Explorer預(yù)先創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)連接,比如取名為'myoracleconnection'。則客戶端的ServerConnection屬性就設(shè)置為DSAdmin.GetConnection("myoracleconnection")。
客戶端共享連接的使用也是很簡(jiǎn)單的。客戶端SQLConnection控件的Driver屬性是'DataSnap',本來(lái)在客戶端不能直接提交執(zhí)行SQL語(yǔ)句或存儲(chǔ)過(guò)程的,但在建立共享連接之后,就可以把該SQLConnection控件視為已經(jīng)連接到數(shù)據(jù)庫(kù)而不是DataSnap服務(wù)器,我們就可以在客戶端放入TSQLDataSet控件,指定SQL語(yǔ)句或存儲(chǔ)過(guò)程來(lái)執(zhí)行;如果要返回?cái)?shù)據(jù)集,就再放入TDataSetProvider、TClientDataSet等控件來(lái)實(shí)現(xiàn)。這樣一來(lái),就與以前的二層數(shù)據(jù)庫(kù)應(yīng)用開發(fā)非常類似了。
客戶端在使用共享連接提交執(zhí)行SQL語(yǔ)句或存儲(chǔ)過(guò)程的同時(shí),仍然可以通過(guò)該SQLConnection調(diào)用DataSnap服務(wù)器端暴露的服務(wù)器方法。
共享連接這種應(yīng)用形式并不常見,但在某些特殊場(chǎng)合可能有用,比如由客戶端完成數(shù)據(jù)庫(kù)事務(wù)處理操作的時(shí)候。同時(shí),共享連接,也可以減少數(shù)據(jù)庫(kù)的并發(fā)連接數(shù)量,從而有效地降低服務(wù)器的資源使用情況。 |
|
來(lái)自: delphiXE6 > 《DataSnap》