本文为SequoiaDB社区用户贡献的文档教程,帮助你们快速入门SequoiaDB适配C#,并进行简单的开发。git
经过如下网址: https://www.visualstudio.com/zh-hans/free-developer-offers/ 下载最新版本的Microsoft Visual Studio 2017版本。github
使用如下命令建立一个离线安装版本:数据库
下载时间比较长,彻底下载以后,在目录下执行vs_setup.exe浏览器
在开始菜单中找到Visual Studio的启动程序。分布式
方法一: 利用安装包自带的sequoiadb.dllide
从sdb的安装路径下,找到自带的sequoiadb.dll文件。这个dll动态连接库支持.NETFramework v4.0版本。函数
方法二:利用sdb开源的代码编译本身的sequoiadb.dll。能够经过工程中设置依赖的.NETFrameWork的版本,这个方法应对特殊的应用需求。学习
从github上下载 sdb driver for C#,以下图:spa
用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#的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的链接和集合操做。
/****************************************************************************** * * Name: DEMO.cs * Description: This program demostrates how to use the C#.Net Driver * This program will also populate some testing data and create * indexes * Notice: * Please add reference of 'sequoiadb.dll' in your project. * * ****************************************************************************/ // Please import namespace SequoiaDB and SequoiaDB.Bson using SequoiaDB; using SequoiaDB.Bson; using System; namespace Sample { class DEMO { //链接到一个数据库 public static void Connect(Sequoiadb sdb) { try { // connect to database sdb.Connect(); } catch (Exception e) { Console.WriteLine("Failed to connect to database at {0}:{1}", sdb.ServerAddr.Host, sdb.ServerAddr.Port); Console.WriteLine(e.Message); Environment.Exit(0); } } // 断开数据库的链接。 public static void Disconnect(Sequoiadb sdb) { sdb.Disconnect(); } // 得到一个集合空间,若是这个集合空间不存在,建立一个。 public static CollectionSpace GetCollecitonSpace(Sequoiadb sdb, string csName) { CollectionSpace cs = null; try { cs = sdb.GetCollecitonSpace(csName); //用到了SequoiaDB的SequoiaDB对象的根据集合空间名称得到集合空间对象。 } catch (BaseException e) { // verify whether the collection space exists if ("SDB_DMS_CS_NOTEXIST" == e.ErrorType) { // 建立集合空间。 cs = CreateCollecitonSpace(sdb, csName); } else { Console.WriteLine("Failed to get collection space {0},ErrorType = {1}", csName, e.ErrorType); Environment.Exit(0); } } catch (Exception e) { Console.WriteLine(e.Message); Environment.Exit(0); } return cs; } // 得到集合。集合不存在的时候,建立一个新的集合。 public static DBCollection GetColleciton(CollectionSpace cs, string cName) { DBCollection dbc = null; try { dbc = cs.GetCollection(cName); } catch (BaseException e) { // verify whether the collection space exists if ("SDB_DMS_CS_NOTEXIST" == e.ErrorType) { cs = CreateCollecitonSpace(cs.SequoiaDB, cs.Name); dbc = GetColleciton(cs, cName); } // verify whether the collection exists else if ("SDB_DMS_NOTEXIST" == e.ErrorType) { // if the collection does not exist, we are going to create one dbc = CreateColleciton(cs, cName); } else { Console.WriteLine("Failed to get collection {0},ErrorType = {1}", cName, e.ErrorType); Environment.Exit(0); } } catch (Exception e) { Console.WriteLine(e.Message); Environment.Exit(0); } return dbc; } //建立集合空间 public static CollectionSpace CreateCollecitonSpace(Sequoiadb sdb, string csName) { CollectionSpace cs = null; int pageSize = SDBConst.SDB_PAGESIZE_DEFAULT; //这里利用SDB的接口中一个常量。 try { cs = sdb.CreateCollectionSpace(csName, pageSize); } catch (BaseException e) { // verify whether the collection space exists if ("SDB_DMS_CS_EXIST" == e.ErrorType) cs = GetCollecitonSpace(sdb, csName); // invalid page size argument else if ("SDB_INVALIDARG" == e.ErrorType) { Console.WriteLine("Failed to create collection space {0}, invalid page size {1}", csName, pageSize); Environment.Exit(0); } else { Console.WriteLine("Failed to create collection space {0},ErrorType = {1}", csName, e.ErrorType); Environment.Exit(0); } } catch (Exception e) { Console.WriteLine(e.Message); Environment.Exit(0); } return cs; } // 建立并返回一个集合对象 public static DBCollection CreateColleciton(CollectionSpace cs, string cName) { DBCollection dbc = null; try { dbc = cs.CreateCollection(cName); } catch (BaseException e) { // verify whether the collection space exists if ("SDB_DMS_CS_NOTEXIST" == e.ErrorType) { cs = CreateCollecitonSpace(cs.SequoiaDB, cs.Name); dbc = CreateColleciton(cs, cName); } // verify whether the collection space exists else if ("SDB_DMS_EXIST" == e.ErrorType) dbc = GetColleciton(cs, cName); else { Console.WriteLine("Failed to create collection {0},ErrorType = {1}", cName, e.ErrorType); Environment.Exit(0); } } catch (Exception e) { Console.WriteLine(e.Message); Environment.Exit(0); } return dbc; } //建立一条JSON记录 static BsonDocument CreateChineseRecord() { BsonDocument obj = new BsonDocument(); try { obj.Add("姓名", "杰克"); obj.Add("年龄", 70); obj.Add("id", 2001); // an embedded bson object BsonDocument phone = new BsonDocument { {"0", "1808835242"}, {"1", "1835923246"} }; obj.Add("电话", phone); } catch (Exception e) { Console.WriteLine("Failed to create record."); Console.WriteLine(e.Message); Environment.Exit(0); } return obj; } //主函数 public static void Main(string[] args) { if (args.Length != 1) { Console.WriteLine("Please give the database server address <IP:Port>"); Environment.Exit(0); } // The database server address string sdbIP = args[0]; // The collection space name string csName = "SAMPLE"; // The collection name string cName = "employee"; BsonDocument insertor = CreateChineseRecord(); Sequoiadb sdb = new Sequoiadb(sdbIP); //构造SequoiaDB对象 Connect(sdb); CollectionSpace cs = GetCollecitonSpace(sdb, csName); DBCollection dbc = GetColleciton(cs, cName); try { BsonValue id = dbc.Insert(insertor); //集合对象的插入记录的API接口,插入集合中一条记录,而后返回这个记录的oid. Console.WriteLine("Successfully inserted chinese records, object ID = {0}", id.ToString()); } catch (BaseException e) { Console.WriteLine("Failed to insert chinese record, ErrorType = {0}", e.ErrorType); Environment.Exit(0); } catch (Exception e) { Console.WriteLine(e.Message); Environment.Exit(0); } Disconnect(sdb); //在开发中,若是不须要对数据库进行操做,必定要断开和数据库的链接来较少资源消耗。 } } }
|
在Visual Studio中,建立一个新的项目应用:
在项目中,新建一个带表单(Form)的窗口,以下图:
项目中引入Sequoiadb.dll的两种方式,
第一种,把sequoiadb.dll放入工程文件的目录,以下图
第二种,在项目工程中,添加引用squoiadb.dll的路径。
生成的应用能够以下:
示例代码下载连接:
https://github.com/haides/SequoiaDB-Csharp-Sample