本文爲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