Warensoft Unity3D通信庫使用向導4-SQL SERVER訪問組件使用說明

Warensoft Unity3D通信庫使用向導4-SQL SERVER訪問組件使用說明

(作者:warensoft,有問題請聯系warensoft@163.com)

在前一節《warensoft unity3d通信庫使用向導3-建立WarensoftDataService》中已經說明如何配置Warensoft Data Service,從本節開始,將說明如果利用Warensoft Unity3D通信庫中的SQL SERVER組件和Warensoft Data Service交互以實現Unity3D 直接訪問SQL SERVER。我們首先對Warensoft.Communication.Client.DataClient命名空間中的類及其成員進行說明:

  1. 命名空間及類型說明

命名空間: Warensoft.Unity.Communication.Client.DataClient

DataContext

該類通過Http協議對SqlServer連接進行管理.該類包含了所連接數據庫中的所有數據表的影射,另外還提供了對這些表數據的增、刪、改、查等功能。

DataEntity

數據實體類,代表一條數據記錄

DataEntitySet

數據實體集合類,代表一個數據表

DataProperty

數據屬性類,代表一個數據行中的數據列(字段)

DataPropertySet

數據屬性集合類,代表一個數據行中所有的數據列(字段)

DataQuery

該類為SQL SERVER數據查詢提供了許多構建方法,利用該類構建出來的查詢,會被傳送到Warensoft DataService服務器,并且被解析成數據庫可以識別的SQL語句

DataContext類
  • 該類結構圖如下所示:

  • 公開屬性說明:
    • SchemaLoaded:該屬性用于說明,當前連接所對應的數據庫中的表結構(Schema)是否已經加載完畢,如果已經加載完畢,可以利用DataContext實現對數據庫的增、刪、改、查。如果想實現表結構加載完畢的自動通知,請注冊SchemaLoadCompleted事件。
    • ServiceUrl:該屬性用于獲取對應的Warensoft Data Service的服務地址。
    • Tables:用于獲取該連接中所有表的集合,用戶可以通過表名(字符串)方式對數據表進行索引。
  • 公開事件說明
    • Error:當數據連接或查詢出現錯誤時觸發
    • SchemaLoadCompleted:當數據連接中的數據表結構加載完畢時觸發。當該事件觸發時,DataContext只加載數據表結構,其中不包含數據。該事件是在某一次Update中觸發的,因此,對于Unity3D是線程安全的。
  • 公開方法說明
    • DataContext(string url):構造方法,其中參數用于指明Warensoft Data Service中的服務地址。注意:該類型的構造請不要直接在代碼中通過new方式構造,應當使用UnityCommunicationManager.CreateDataContext方法。
    • SaveChanges():用于保存所有的增、刪、改操作,數據同步策略為"客戶端優先(后來者優先)"。如果希望指明數據同步策略,請使用其重載形式。
    • SaveChanges(RefreshMode mode):用于保存所有的增、刪、改操作。其中的參數為RefreshMode枚舉類型,用于指明數據同步策略,其中包括兩種可選策略1.RefreshMode.ClientWins, 客戶端優先(后來者優先),2.RefreshMode.StoreWins,服務器優先(先來都優先)
DataEntity類
  • 該類結構圖如下所示:

  • 公開屬性說明
    • Properties:用于獲取該實體(數據行)中所有的字段(數據列)的集合。該集合類型可以通過["字段名"]形式進行索引并取出某一個字段對應的值。
    • State:用于獲取該實體(數據行)的修改狀態,該狀態通過一個EntityState枚舉類型來表示,該枚舉中包括Changed,Added,Deleted,Unchanged四個值。
    • TableName:用于獲取該實體現在表的表名。
    • this[string column]:索引器,用于通過指定字段名來直接取出該字段對應的值。
  • 公開方法說明
    • DataEntity():構造方法,該類的構造方法不可用,如果要創建一個新添加的數據實體,請使用DataEntitySet.NewEntity()方法
    • AcceptChanges():用于確定對該實體的修改,該方法被調用后,該實體的State屬性會被重置為Unchanged,在相關聯的DataContext的SaveChanges方法被調用時,不會對該實體進行提交。
    • Delete():將該實體的State置為Deleted,如果某一個實體的Delete()方法被調用后,該實體并不會立即被從內存中移除,但是不會出現在該實體所在數據表的可用行集合中,直到該實體所在的DataContext的SaveChanges方法被成功調用后,該實體才會從內存中移除。

    ?

DataEntitySet類
  • 該類結構圖如下所示:

  • 公開屬性說明
    • Count:獲取該實體集所代表的數據表中,所擁有的數據實體(數據行)的數量。
    • Entities:用于獲取該實體集(數據表)中所有的實體對象(數據行)。
    • TableName:用于獲取該實體集(數據表)所對應的數據表的表名。
  • 公開方法說明
    • AcceptChanges():將該實體集(數據表)中所有的實體(數據行)的State重置為Unchanged。
    • Add(DataEntity item):將新建立的數據實體,添加到該實體集(數據表)中,其中參數item必須是由該實體集實例的NewEntity()方法所創建的,否則會拋出異常。新加入的實體的State會被標記為Added。此操作將只影響客戶端內存數據,當該實體集所在的DataContext的SaveChanges方法被調用后,數據才會被真正插入到數據庫中。
    • Clear():清空該實體集中所有的數據。該操作只影響客戶端內存數據,當該實體集所在的DataContext的SaveChanges方法被調用后,數據庫不會產生任何影響。
    • Contains(DataEntity item):判斷該實體集中是否已經包含指定項。
    • LoadAsync(Action fillAsyncCallback):異步加載實體集中的數據實體(數據行)。其中參數fillAsyncCallback是異步加載完畢后的回調方法。請謹慎使用該方法,因為該方法會將對應服務器數據表中所有的數據都加載到客戶端中,建議使用其重載形式,并進行帶有條件的異步加載。
    • LoadAsync(Action fillAsyncCallback,DataQuery query):異步加載實體集中的數據實體(數據行)。其中參數fillAsyncCallback是異步加載完畢后的回調方法,參數query為本次加載時的查詢條件。
    • NewEntity():該方法用于創建一個新的DataEntity實例,該DataEntity實例,與該實體集具備相同數據表結構。
DataProperty類
  • 該類結構圖如下所示:

  • 公開屬性說明
    • ColumnName:用于獲取該字段名稱。
    • IsPrimaryKey:指示該字段是否為主鍵
    • Value:用于獲取該字段對應的值。
    • OriginalValue:用于獲取該字段修改之前的原始值,該字段在初始化時,Value與OriginalValue的值相同,如果該字段的值發生改變,則Value改變,OriginalValue值保持不變,直到DataContext的SaveChanges方法被成功調用后,OriginalValue的值才會與Value的值相同。

    ?

DataPropertySet類
  • 該類結構圖如下所示:

  • 公開屬性說明
    • Count:屬性集合(字段集合)中所擁有的屬性的數量。
    • this[int index]:索引,通過序號對指定屬性進行查找
    • this[string columnName]:索引,通過字段名對指定屬性進行查找
  • 分開方法說明
    • 所有方法均為內部使用,不公開

    ?

DataQuery類
  • 該類結構圖如下所示:

  • 公開屬性說明
    • 所有屬性均為內部使用,不公開
  • 公開方法說明
    • static And(DataQuery q1,DataQuery q2):該靜態方法用于對兩個查詢進行And操作。
    • static Or(DataQuery q1,DataQuery q2):該靜態方法用于對兩個查詢進行Or操作。
    • EqualsTo<T>(string key,T value):關鍵字key等于值value,其中類型參數用于指明對應的字段的數據類型。
    • NotEqualsTo<T>(string key,T value) :關鍵字key不等于值value,其中類型參數用于指明對應的字段的數據類型。
    • GreaterThan<T>(string key,T value) :關鍵字key大于值value,其中類型參數用于指明對應的字段的數據類型。
    • GreaterThanOrEqualsTo<T>(string key,T value) :關鍵字key大于等于值value,其中類型參數用于指明對應的字段的數據類型。
    • SmallerThan<T>(string key,T value) :關鍵字key小于值value,其中類型參數用于指明對應的字段的數據類型。
    • SmallerThanOrEqualsTo<T>(string key,T value) :關鍵字key小于等于值value,其中類型參數用于指明對應的字段的數據類型。
    • OrderBy(string key) :按照指定關鍵字進行升序排序。
    • OrderByDescending(string key):按照指定關鍵字進行降序排序。
    • Skip(int count):在查詢時,按照count的值跨過指定行數。
    • Take(int count):在查詢時,從查詢結果集中取count條記錄。相當于SQL SERVER中的TOP操作。
  • 目前DataQuery中支持查詢的數據類型
    • Guid
    • byte
    • short
    • int
    • long
    • ushort
    • uint
    • ulong
    • double
    • float
    • decimal
    • bool
    • string
如何利用DataQuery構建復合查詢

DataQuery可以用于構建常見的SQL查詢,具備做法請參考下面代碼:

?

//查找Customers表中所有CustomerID為ALFKI的記錄this.context.Tables["Customers"].LoadAsync(() =>{//加載完畢

},(new DataQuery()).EqualsTo("CustomerID","ALFKI"));//查找Customers表中所有CustomerID不是ALFKI的記錄this.context.Tables["Customers"].LoadAsync(() =>{//加載完畢

}, (new DataQuery()).NotEqualsTo("Country", "US"));//查找Products表中所有UnitPrice大于10的記錄this.context.Tables["Products"].LoadAsync(() =>{//加載完畢

}, (new DataQuery()).GreaterThan("UnitPrice",10f));//查找Products表中所有UnitPrice小于等于10的記錄this.context.Tables["Products"].LoadAsync(() =>{//加載完畢

}, (new DataQuery()).SmallerThanOrEqualsTo("UnitPrice", 10f));//查找Products表中所有UnitPrice小于等于10的記錄//返回的結果集按ProductID進行升序排序this.context.Tables["Products"].LoadAsync(() =>{//加載完畢

}, (new DataQuery()).SmallerThanOrEqualsTo("UnitPrice", 10f).OrderBy("ProductID"));//查找Products表中所有UnitPrice小于等于10的記錄//返回的結果集按ProductID進行降序排序this.context.Tables["Products"].LoadAsync(() =>{//加載完畢

}, (new DataQuery()).SmallerThanOrEqualsTo("UnitPrice", 10f).OrderByDescending("ProductID"));//查找Products表中所有UnitPrice大于10的記錄//跨過前10條記錄再取前5條記錄//該查詢方法可以用于分頁操作this.context.Tables["Products"].LoadAsync(() =>{//加載完畢

}, (new DataQuery()).GreaterThan("UnitPrice", 10f).Skip(10).Take(5));//獲取Products表中所有Discontinued為true 并且UnitPrice大于20的記錄this.context.Tables["Products"].LoadAsync(() =>{//加載完畢

},(new DataQuery()).EqualsTo("Discontinued", true).GreaterThan("UnitPrice", 20f));//And操作示例//獲取Products表中所有Discontinued為true 并且UnitPrice大于20的記錄//該And操作與前一個示例的查詢過程等效this.context.Tables["Products"].LoadAsync(() =>{//加載完畢

},DataQuery.And((new DataQuery()).EqualsTo ("Discontinued",true),(new DataQuery()).GreaterThan("UnitPrice",20f)));//Or操作示例//獲取Customers表中,CustomerID為ALFKI或者Warensoft的所有記錄//該操作將返回兩條記錄this.context.Tables["Customers"].LoadAsync(() =>{//加載完畢

},DataQuery.Or((new DataQuery()).EqualsTo("CustomerID", "ALFKI"),(new DataQuery()).EqualsTo("CustomerID", "Warensoft")));

?

?

?

轉載于:https://www.cnblogs.com/warensoft/archive/2012/04/27/2472865.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/391852.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/391852.shtml
英文地址,請注明出處:http://en.pswp.cn/news/391852.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

01-gt;選中UITableViewCell后,Cell中的UILabel的背景顏色變成透明色

解決方案有兩種方法一 -> 新建一個UILabel類, 繼承UILabel, 然后重寫 setBackgroundColor: 方法, 在這個方法里不做任何操作, 讓UILabel的backgroundColor不發生改變.寫在最后, 感謝參考的出處:不是謝志偉StackOverflow: UITableViewCell makes labels background clear whe…

leetcode 703. 數據流中的第 K 大元素(堆)

設計一個找到數據流中第 k 大元素的類&#xff08;class&#xff09;。注意是排序后的第 k 大元素&#xff0c;不是第 k 個不同的元素。 請實現 KthLargest 類&#xff1a; KthLargest(int k, int[] nums) 使用整數 k 和整數流 nums 初始化對象。 int add(int val) 將 val 插…

不知道輸入何時停止_知道何時停止

不知道輸入何時停止In predictive analytics, it can be a tricky thing to know when to stop.在預測分析中&#xff0c;知道何時停止可能是一件棘手的事情。 Unlike many of life’s activities, there’s no definitive finishing line, after which you can say “tick, I…

移動認證_如何在移動設備上實施安全的生物特征認證

移動認證by Kathy Dinh凱西丁(Kathy Dinh) 如何在移動設備上實施安全的生物特征認證 (How to implement secure Biometric Authentication on mobile devices) A quick search for React Native biometric authentication would give you several tutorials. That was the fir…

[Luogu1890]gcd區間

原題鏈接https://www.luogu.org/problem/show?pid1890 暴力中的暴力。 對于每一組詢問l..r&#xff0c;我們先循環暴力枚舉l..r中最大值到1&#xff0c;再暴力循環l..r的每一個數&#xff0c;判斷前一重循環能否整除后一重&#xff0c;如果全部都能&#xff0c;則可判定它就是…

Android Studio自定義模板 做開發竟然可以如此輕松 后篇

###1.概述 最近有很多人反饋&#xff0c;有些哥們不喜歡看文字性的東西&#xff0c;還有一些哥們根本就不知道我在搞啥子&#xff0c;那么以后我就采用博客加視頻的方式&#xff0c;我們可以選擇看視頻講解&#xff1a;http://pan.baidu.com/s/1i5uh2uD   內涵段子項目資料及…

ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked.

ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. 解決方案&#xff1a; 異步更新&#xff08;建議使用&#xff09;強制進行變更檢測&#xff0c;但是會觸發子組件的變更檢測&#xff0c;再次導致父組件屬性改變Parent.Component.…

leetcode 119. 楊輝三角 II

給定一個非負索引 k&#xff0c;其中 k ≤ 33&#xff0c;返回楊輝三角的第 k 行。 在楊輝三角中&#xff0c;每個數是它左上方和右上方的數的和。 示例: 輸入: 3 輸出: [1,3,3,1] 解題思路 因為楊輝三角的下層由上一層決定&#xff0c;所以只需要保存上一層的元素&#x…

掌握大數據數據分析師嗎?_要掌握您的數據嗎? 這就是為什么您應該關心元數據的原因...

掌握大數據數據分析師嗎?Either you are a data scientist, a data engineer, or someone enthusiastic about data, understanding your data is one thing you don’t want to overlook. We usually regard data as numbers, texts, or images, but data is more than that.…

react 使用 mobx_如何使用React和MobX狀態樹構建基于狀態的路由器

react 使用 mobxby Miles Till由Miles Till 如何使用React和MobX狀態樹構建基于狀態的路由器 (How to build a state-based router using React and MobX State Tree) Introducing mobx-state-tree-routerMobx狀態樹路由器簡介 If you want to skip ahead to the finished ex…

docker在Centos上的安裝

Centos6安裝docker 系統&#xff1a;centos6.5 內核&#xff1a;3.10.107-1(已升級)&#xff0c;docker對RHEL/Centos的最低內核支持是2.6.32-431&#xff0c;epel源的docker版本推薦內核為3.10版本。 內核升級可參考&#xff1a;https://www.jslink.org/linux/centos-kernel-u…

Lambda表達式的前世今生

Lambda 表達式 早在 C# 1.0 時&#xff0c;C#中就引入了委托&#xff08;delegate&#xff09;類型的概念。通過使用這個類型&#xff0c;我們可以將函數作為參數進行傳遞。在某種意義上&#xff0c;委托可理解為一種托管的強類型的函數指針。 通常情況下&#xff0c;使用委托來…

matplotlib柱狀圖、面積圖、直方圖、散點圖、極坐標圖、箱型圖

一、柱狀圖 1.通過obj.plot() 柱狀圖用bar表示&#xff0c;可通過obj.plot(kindbar)或者obj.plot.bar()生成&#xff1b;在柱狀圖中添加參數stackedTrue&#xff0c;會形成堆疊圖。 fig,axes plt.subplots(2,2,figsize(10,6)) s pd.Series(np.random.randint(0,10,15),index …

微信支付商業版 結算周期_了解商業周期

微信支付商業版 結算周期Economics is an inexact science, finance and investing even more so (some would call them art). But if there’s one thing in economics that you can consistently count on over the long run, it’s the tendency of things to mean revert …

leetcode 448. 找到所有數組中消失的數字

給定一個范圍在 1 ≤ a[i] ≤ n ( n 數組大小 ) 的 整型數組&#xff0c;數組中的元素一些出現了兩次&#xff0c;另一些只出現一次。 找到所有在 [1, n] 范圍之間沒有出現在數組中的數字。 您能在不使用額外空間且時間復雜度為O(n)的情況下完成這個任務嗎? 你可以假定返回…

前端初學者開發學習視頻_初學者學習前端開發的實用指南

前端初學者開發學習視頻by Nikita Rudenko通過尼基塔魯登科(Nikita Rudenko) 初學者學習前端開發的實用指南 (A practical guide to learning front end development for beginners) I started my coding journey in spring 2018, a bit less than one year ago. I earned som…

weblogic啟動失敗案例(root啟動引起的權限問題)

weblogic的一個domain啟動失敗&#xff0c;在日志中有如下信息提示&#xff1a; **************************************************** To start WebLogic Server, use a username and ** password assigned to an admin-level user. For ** server administration, us…

HTTP請求示例

HTTP請求格式當瀏覽器向Web服務器發出請求時&#xff0c;它向服務器傳遞了一個數據塊&#xff0c;也就是請求信息&#xff0c;HTTP請求信息由3部分組成&#xff1a;l 請求方法URI協議/版本l 請求頭(Request Header)l 請求正文下面是一個HTTP請求的例子&#xff1a;GET/sa…

Bootstrap——可拖動模態框(Model)

還是上一個小項目&#xff0c;o(╥﹏╥)o&#xff0c;要實現點擊一個div或者button或者一個東西然后可以彈出一個浮在最上面的彈框。網上找了找&#xff0c;發現Bootstrap的Model彈出框可以實現該功能&#xff0c;因此學習了一下&#xff0c;實現了基本彈框功能&#xff08;可拖…

mfcc中的fft操作_簡化音頻數據:FFT,STFT和MFCC

mfcc中的fft操作What we should know about sound. Sound is produced when there’s an object that vibrates and those vibrations determine the oscillation of air molecules which creates an alternation of air pressure and this high pressure alternated with low …