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