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.mzph.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 …