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,一经查实,立即删除!

相关文章

不知道输入何时停止_知道何时停止

不知道输入何时停止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…

掌握大数据数据分析师吗?_要掌握您的数据吗? 这就是为什么您应该关心元数据的原因...

掌握大数据数据分析师吗?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.…

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 …

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 …

PHP绘制3D图形

PEAR提供了Image_3D Package来创建3D图像。图像或光线在3D空间中按照X、Y 、Z 坐标定位。生成的图像将呈现在2D空间中&#xff0c;可以存储为 PNG、SVG 格式&#xff0c;或输出到Shell。通过Image_3D可以很方便生成一些简单的3D对象&#xff0c;例如立方体、锥体、球体、文本和…

r语言怎么以第二列绘制线图_用卫星图像绘制世界海岸线图-第二部分

r语言怎么以第二列绘制线图Part I of this blog series is here.本博客系列的第一部分 在这里 。 At the UKHO we are interested in the oceans, the seabed and the coastline — not to mention everything in and on them! In our previous blog, we (the UKHO Data Scien…

JSP基础--动作标签

JSP基础--动作标签 JSP动作标签 1 JSP动作标签概述 动作标签的作用是用来简化Java脚本的&#xff01; JSP动作标签是JavaWeb内置的动作标签&#xff0c;它们是已经定义好的动作标签&#xff0c;我们可以拿来直接使用。 如果JSP动作标签不够用时&#xff0c;还可以使用自定义标…

rcp rapido_Rapido使用数据改善乘车调度

rcp rapidoGiven our last blog post of the series, which can be found here :鉴于我们在该系列中的最后一篇博客文章&#xff0c;可以在这里找到&#xff1a; We thought it would be helpful to explain how we implemented all of the above into an on-ground experimen…

SSRS:之为用户“NT AUTHORITY\NETWORK SERVICE”授予的权限不足,无法执行此操作。 (rsAccessDenied)...

错误信息&#xff1a;为用户“NT AUTHORITY\NETWORK SERVICE”授予的权限不足&#xff0c;无法执行此操作。 (rsAccessDenied)如图&#xff1a;解决方案之检查顺序&#xff1a;1.检查报表的执行服务帐户。使用“ Reporting Services 配置管理器”。2.检查数据库安全 - 登录名 中…

飞机上的氧气面罩有什么用_第2部分—另一个面罩检测器……(

飞机上的氧气面罩有什么用This article is part of a series where I will be documenting my journey on the development of a social distancing feedback system for the blind as part of the OpenCV Spatial Competition. Check out the full series: Part 1, Part 2.本文…

经典网络流题目模板(P3376 + P2756 + P3381 : 最大流 + 二分图匹配 + 最小费用最大流)...

题目来源 P3376 【模板】网络最大流P2756 飞行员配对方案问题P3381 【模板】最小费用最大流最大流 最大流问题是网络流的经典类型之一&#xff0c;用处广泛&#xff0c;个人认为网络流问题最具特点的操作就是建反向边&#xff0c;这样相当于给了反悔的机会&#xff0c;不断地求…

数字经济的核心是对大数据_大数据崛起为数字世界的核心润滑剂

数字经济的核心是对大数据“Information is the oil of the 21st century, and analytics is the combustion engine”.“信息是21世纪的石油&#xff0c;分析是内燃机”。 — Peter Sondergaard, Senior Vice President of Gartner Research.— Gartner研究部高级副总裁Peter…

制作简单的WIFI干扰器

原教程链接:http://www.freebuf.com/geek/133161.htmlgithub 1.准备材料 制作需要的材料有 nodemcu开发版IIC通信 128*64 OLED液晶屏电线按钮开关万能板排针(自选)双面胶(自选)参考2.准备焊接 引脚焊接参考 oled按钮效果3.刷入固件 下载烧录工具:ESP8266Flasher.exe 下载固件:…

Snipaste截图

绘图绘色&#xff0c;描述加图片能更加说明问题的本质。今天推荐一款多功能的截图snipaste... 欣赏绘色 常见报错 解决方案&#xff1a; 下载相关的DLL即可解决&#xff0c; 请根据你操作系统的版本&#xff08;32位/64位&#xff09;&#xff0c;下载并安装相应的微软 Visual …

azure第一个月_MLOps:两个Azure管道的故事

azure第一个月Luuk van der Velden and Rik Jongerius卢克范德费尔登(Luuk van der Velden)和里克 琼格里乌斯( Rik Jongerius) 目标 (Goal) MLOps seeks to deliver fresh and reliable AI products through continuous integration, continuous training and continuous del…

VS2008 开发设计MOSS工作流 URN 注意了

最近学习MOSS 很苦恼&#xff0c;进度也很慢&#xff0c;最近在学习VS2008开发工作流&#xff0c;其中有结合INFOPATH 2007来做, 出现个BUG或者说是设置的问题,整整花了我一天工作时间&#xff0c;是这样的: 在部署的时候关于URN&#xff0c;大部分的教程都是这样的说的&#…