当前位置:   article > 正文

【入门教程】使用C#开发SequoiaDB的应用

【入门教程】使用C#开发SequoiaDB的应用


本文为SequoiaDB社区用户贡献的文档教程,帮助大家快速入门SequoiaDB适配C#,并进行简单的开发。

 

安装Microsoft Visual Studio 2017

 

通过以下网址: https://www.visualstudio.com/zh-hans/free-developer-offers/  下载最新版本的Microsoft Visual Studio 2017版本。

 

使用以下命令创建一个离线安装版本:

vs_community.exe --layout c:\vs2017offline --lang en-US zh-CN

 

 

下载时间比较长,完全下载之后,在目录下执行vs_setup.exe

 

 

在开始菜单中找到Visual Studio的启动程序。

 

 


调试SequoiaDB自带的Sample Code

方法一: 利用安装包自带的sequoiadb.dll

从sdb的安装路径下,找到自带的sequoiadb.dll文件。这个dll动态链接库支持.NETFramework v4.0版本。

 

 

方法二:利用sdb开源的代码编译自己的sequoiadb.dll。可以通过工程中设置依赖的.NETFrameWork的版本,这个方法应对特殊的应用需求。

从github上下载 sdb driver for C#,如下图:

 

用Visual Studio 打开工程项目:

 

在Visual Studio工程界面内,右键选择driver工程,重新编译生成。

 

 

在输出的目录下找到生成的动态编译库:

 

 

下载SequoiaDB自带的sample代码:

 

 

打开Visual Studio的开发者命令行:

 

 

切换到sdb示例代码的目录下,执行自带的编译程序:

 

已经将示例中的cs源代码文件,编译成.exe的执行文件。

 

可以试着执行这些.exe执行文件:

 

按照 Insert.exe  BulkInsert.exe  Find.exe  Aggregate.exe的顺序执行看看。

 


了解SequoiaDB的C#接口

通过前两步搭建了一个可以使用SequoiaDB的C#的学习环境。下面我们来看看SequoiaDB都提供了哪些C#的API,我们在C#开发过程中,可以通过API可以对SequoiaDB进行哪些操作呢。

 

获得SequoiaDB的C#的参考文档,可以通过以下三种方式获得。

 

第一种: 通过官网的在线文档,可以获得最新,最全面的帮助文档。网址如下:

http://doc.sequoiadb.com/cn/SequoiaDB

图中示例为SDB的2.8版本,请根据使用的响应版本进行切换。

 

 

第二种: 在安装目录下,找到doc目录下的SequoiaDB_usermanuals_v2.8.chm的文档,可以离线查看SequoiaDB的所有帮助文档。

 

第三种:在Visual Studio中,利用对象浏览器,查看引用的Sequoiadb.dll中的接口参数。使用这个方法,需要参考第四部分,创建Windows桌面应用的介绍,把sequoiadb.dll引入到项目工程中。

 

 

 

然我们来看看C#的API结构。

 

SequoiaDB : SDB的基本操作。这是SDB的系统配置主要关心的各种API集合。

SequoiaDB.Bson:SDB中BSON的数据类型操作 。对SDB中的数据进行操作,这个命名空间中的API接口,是最常用到的。

SequoiaDB.Bson.IO:SDB中BSON引擎进行文档读写操作

SequoiaDB.Bson.Serialization.*:数据的序列化。

 

 

针对SequoiaDB命名空间,看看又细分为哪些API定义类。

BaseException:异常的根类,在项目应用中,可以使用这个类捕获系统的异常事件。

CollectionSpace:集合空间。这是SDB集合空间对象的创建删除操作。

ConfigOptions:SDB系统配置参数对象,主要是变量参数。

DataCenter:

DBCollection:集合对象的操作。类似于数据库的表操作,这是开发中最经常用到的对象了。

DBCursor:数据指针。集合中记录的指针操作。

DBLob:SDB独特的特点,针对非结构化数据的块操作。

DBQuery:SDB查询语句,需要构建特定查询条件。

Domain:SDB域操作

Logger:可以引用的日志方法。

Node:针对特定节点的连接操作API接口

ReplicaGroup:复制分区组对象的操作接口。

SDBConst:SDB数据库的一些静态常量。可以通过这些变量获得SDB的一些内置变量值。

SDBConst.NodeStatus:SDB状态常量。主要用来显示SDB活动状态。

Sequoiadb:SDB数据库对象操作接口,在进行数据库配置的时候比较常用到的类。

ServerAddress:SDB是分布式数据库,利用这个对象来设定连接节点的地址信息。

 

以下的示例代码,最基本的SDB的连接和集合操作。

  1. /******************************************************************************
  2. *
  3. * Name: DEMO.cs
  4. * Description: This program demostrates how to use the C#.Net Driver
  5. * This program will also populate some testing data and create
  6. * indexes
  7. * Notice:
  8. * Please add reference of 'sequoiadb.dll' in your project.
  9. *
  10. * ****************************************************************************/
  11. // Please import namespace SequoiaDB and SequoiaDB.Bson
  12. using SequoiaDB;
  13. using SequoiaDB.Bson;
  14. using System;
  15. namespace Sample
  16. {
  17. class DEMO
  18. {
  19. //连接到一个数据库
  20. public static void Connect(Sequoiadb sdb)
  21. {
  22. try
  23. {
  24. // connect to database
  25. sdb.Connect();
  26. }
  27. catch (Exception e)
  28. {
  29. Console.WriteLine("Failed to connect to database at {0}:{1}", sdb.ServerAddr.Host, sdb.ServerAddr.Port);
  30. Console.WriteLine(e.Message);
  31. Environment.Exit(0);
  32. }
  33. }
  34. // 断开数据库的连接。
  35. public static void Disconnect(Sequoiadb sdb)
  36. {
  37. sdb.Disconnect();
  38. }
  39. // 获得一个集合空间,如果这个集合空间不存在,创建一个。
  40. public static CollectionSpace GetCollecitonSpace(Sequoiadb sdb, string csName)
  41. {
  42. CollectionSpace cs = null;
  43. try
  44. {
  45. cs = sdb.GetCollecitonSpace(csName); //用到了SequoiaDB的SequoiaDB对象的根据集合空间名称获得集合空间对象。
  46. }
  47. catch (BaseException e)
  48. {
  49. // verify whether the collection space exists
  50. if ("SDB_DMS_CS_NOTEXIST" == e.ErrorType)
  51. {
  52. // 创建集合空间。
  53. cs = CreateCollecitonSpace(sdb, csName);
  54. }
  55. else
  56. {
  57. Console.WriteLine("Failed to get collection space {0},ErrorType = {1}", csName, e.ErrorType);
  58. Environment.Exit(0);
  59. }
  60. }
  61. catch (Exception e)
  62. {
  63. Console.WriteLine(e.Message);
  64. Environment.Exit(0);
  65. }
  66. return cs;
  67. }
  68. // 获得集合。集合不存在的时候,创建一个新的集合。
  69. public static DBCollection GetColleciton(CollectionSpace cs, string cName)
  70. {
  71. DBCollection dbc = null;
  72. try
  73. {
  74. dbc = cs.GetCollection(cName);
  75. }
  76. catch (BaseException e)
  77. {
  78. // verify whether the collection space exists
  79. if ("SDB_DMS_CS_NOTEXIST" == e.ErrorType)
  80. {
  81. cs = CreateCollecitonSpace(cs.SequoiaDB, cs.Name);
  82. dbc = GetColleciton(cs, cName);
  83. }
  84. // verify whether the collection exists
  85. else if ("SDB_DMS_NOTEXIST" == e.ErrorType)
  86. {
  87. // if the collection does not exist, we are going to create one
  88. dbc = CreateColleciton(cs, cName);
  89. }
  90. else
  91. {
  92. Console.WriteLine("Failed to get collection {0},ErrorType = {1}", cName, e.ErrorType);
  93. Environment.Exit(0);
  94. }
  95. }
  96. catch (Exception e)
  97. {
  98. Console.WriteLine(e.Message);
  99. Environment.Exit(0);
  100. }
  101. return dbc;
  102. }
  103. //创建集合空间
  104. public static CollectionSpace CreateCollecitonSpace(Sequoiadb sdb, string csName)
  105. {
  106. CollectionSpace cs = null;
  107. int pageSize = SDBConst.SDB_PAGESIZE_DEFAULT; //这里利用SDB的接口中一个常量。
  108. try
  109. {
  110. cs = sdb.CreateCollectionSpace(csName, pageSize);
  111. }
  112. catch (BaseException e)
  113. {
  114. // verify whether the collection space exists
  115. if ("SDB_DMS_CS_EXIST" == e.ErrorType)
  116. cs = GetCollecitonSpace(sdb, csName);
  117. // invalid page size argument
  118. else if ("SDB_INVALIDARG" == e.ErrorType)
  119. {
  120. Console.WriteLine("Failed to create collection space {0}, invalid page size {1}", csName, pageSize);
  121. Environment.Exit(0);
  122. }
  123. else
  124. {
  125. Console.WriteLine("Failed to create collection space {0},ErrorType = {1}", csName, e.ErrorType);
  126. Environment.Exit(0);
  127. }
  128. }
  129. catch (Exception e)
  130. {
  131. Console.WriteLine(e.Message);
  132. Environment.Exit(0);
  133. }
  134. return cs;
  135. }
  136. // 创建并返回一个集合对象
  137. public static DBCollection CreateColleciton(CollectionSpace cs, string cName)
  138. {
  139. DBCollection dbc = null;
  140. try
  141. {
  142. dbc = cs.CreateCollection(cName);
  143. }
  144. catch (BaseException e)
  145. {
  146. // verify whether the collection space exists
  147. if ("SDB_DMS_CS_NOTEXIST" == e.ErrorType)
  148. {
  149. cs = CreateCollecitonSpace(cs.SequoiaDB, cs.Name);
  150. dbc = CreateColleciton(cs, cName);
  151. }
  152. // verify whether the collection space exists
  153. else if ("SDB_DMS_EXIST" == e.ErrorType)
  154. dbc = GetColleciton(cs, cName);
  155. else
  156. {
  157. Console.WriteLine("Failed to create collection {0},ErrorType = {1}", cName, e.ErrorType);
  158. Environment.Exit(0);
  159. }
  160. }
  161. catch (Exception e)
  162. {
  163. Console.WriteLine(e.Message);
  164. Environment.Exit(0);
  165. }
  166. return dbc;
  167. }
  168. //创建一条JSON记录
  169. static BsonDocument CreateChineseRecord()
  170. {
  171. BsonDocument obj = new BsonDocument();
  172. try
  173. {
  174. obj.Add("姓名", "杰克");
  175. obj.Add("年龄", 70);
  176. obj.Add("id", 2001);
  177. // an embedded bson object
  178. BsonDocument phone = new BsonDocument
  179. {
  180. {"0", "1808835242"},
  181. {"1", "1835923246"}
  182. };
  183. obj.Add("电话", phone);
  184. }
  185. catch (Exception e)
  186. {
  187. Console.WriteLine("Failed to create record.");
  188. Console.WriteLine(e.Message);
  189. Environment.Exit(0);
  190. }
  191. return obj;
  192. }
  193. //主函数
  194. public static void Main(string[] args)
  195. {
  196. if (args.Length != 1)
  197. {
  198. Console.WriteLine("Please give the database server address <IP:Port>");
  199. Environment.Exit(0);
  200. }
  201. // The database server address
  202. string sdbIP = args[0];
  203. // The collection space name
  204. string csName = "SAMPLE";
  205. // The collection name
  206. string cName = "employee";
  207. BsonDocument insertor = CreateChineseRecord();
  208. Sequoiadb sdb = new Sequoiadb(sdbIP); //构造SequoiaDB对象
  209. Connect(sdb);
  210. CollectionSpace cs = GetCollecitonSpace(sdb, csName);
  211. DBCollection dbc = GetColleciton(cs, cName);
  212. try
  213. {
  214. BsonValue id = dbc.Insert(insertor); //集合对象的插入记录的API接口,插入集合中一条记录,然后返回这个记录的oid.
  215. Console.WriteLine("Successfully inserted chinese records, object ID = {0}", id.ToString());
  216. }
  217. catch (BaseException e)
  218. {
  219. Console.WriteLine("Failed to insert chinese record, ErrorType = {0}", e.ErrorType);
  220. Environment.Exit(0);
  221. }
  222. catch (Exception e)
  223. {
  224. Console.WriteLine(e.Message);
  225. Environment.Exit(0);
  226. }
  227. Disconnect(sdb); //在开发中,如果不需要对数据库进行操作,一定要断开和数据库的连接来较少资源消耗。
  228. }
  229. }
  230. }

 

 

 

 

 


创建桌面应用示例

 

在Visual Studio中,创建一个新的项目应用:

 

 

在项目中,新建一个带表单(Form)的窗口,如下图:

 

 

 

项目中引入Sequoiadb.dll的两种方式,

 

第一种,把sequoiadb.dll放入工程文件的目录,如下图

 

 

 

 

第二种,在项目工程中,添加引用squoiadb.dll的路径。

 

 

生成的应用可以如下:

 

 

 

 

 

示例代码下载链接:

 

https://github.com/haides/SequoiaDB-Csharp-Sample





产品特性
解决方案与案例 
数据库下载 
技术文档 

微信客服:
sequoiadb111





 



声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/615790
推荐阅读
相关标签
  

闽ICP备14008679号