【入門教程】使用C#開發SequoiaDB的應

 

本文爲SequoiaDB社區用戶貢獻的文檔教程,幫助你們快速入門SequoiaDB適配C#,並進行簡單的開發。git

 

安裝Microsoft Visual Studio 2017

 

經過如下網址: https://www.visualstudio.com/zh-hans/free-developer-offers/  下載最新版本的Microsoft Visual Studio 2017版本。github

 

使用如下命令建立一個離線安裝版本:數據庫

 

下載時間比較長,徹底下載以後,在目錄下執行vs_setup.exe瀏覽器

 

在開始菜單中找到Visual Studio的啓動程序。分佈式

 

 

 

 

 

調試SequoiaDB自帶的Sample Code

方法一: 利用安裝包自帶的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#的學習環境。下面咱們來看看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

 

 

相關文章
相關標籤/搜索