打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Oracle Berkeley DB 中国研发团队的博客 ? BDB C# API初探

Net framework源代码开放算是微软在开源社区开天辟地了,C#作为其主要载体,承载着微软无限希望。这万里长征的第一步,却引起了开源社区的不少涟漪。作为开源社区首屈一指的数据库,BDB借着东风,乘胜追击,推出了其C# API。在此,笔者抛砖引玉,简述C# API如何使用。

1. 概述

BDB C# API建立在BDB C API的基础上,通过上层C#的接口,调用BDB内核。BDB C# API基于.Net Framework 2.0及以上版本,可运行于32位和64Windows平台,实例开发环境为Microsoft Visual Studio 2005及以上版本。除了特别说明,下文中提到的编译或运行操作均在Microsoft Visual Studio2005中进行。

BDB C# API打包在BDB源代码里(最新代码可从http://www.oracle.com/technology/software/products/berkeley-db/index.html下载)。在BDB的代码中,BDB C# API的代码主要分布于以下目录:

l <db-4.8.24>\csharpC# API源代码;

l <db-4.8.24>\libdb_csharpdb.idb_csharp_wrap.cC# APIC API方法之间的映射;

l <db-4.8.24>\test\scr037C# API的测试代码;

l <db-4.8.24>\examples_csharp:使用C# API的实例。

通过编译BDB C# API,在<db-4.8.24>\build_windows\AnyCPU\{release, debug}将得到相应的C#库。

BDB C# API支持绝大多数BDB的功能。此外,BDB C#API接口清晰明了,并提供了C#用户专用的参考的使用手册,源代码,测试及多种实例。因此,使用BDB C# API,可以轻松地实现一个功能完备的数据库应用。

2. 编译

编译BDB C# API本身需要BDB C的动态库。在BDB的源代码中,C# API的解决方案已包含了BDB C工程,因此,编译该解决方案,无须另外编译和指定BDB C动态库。

进入BDB主目录 <db-4.8.*>\下的build_windows目录,打开该目录下的C# API的解决方案BDB_dotNet.sln。打开后,浏览解决方案,如图1所示。

该解决方案文件包含10个工程,其工程名,内容和相对主目录db\的工程文件路径分别是:

工程名

内容

工程文件路径

db

C API

build_windows\db.vcproj

db_csharp

SWIG生成的封装文件

build_windows\db_csharp.vcproj

db_dotnet

C# API

csharp\db_dotnet.csproj

DotNetTest

C# API测试

test\scr037\DotNetTest.csproj

ex_access

B树存取实例

examples_csharp\ex_access\ex_access.csproj

ex_btrec

使用记录号的b树的实例

examples_csharp\ex_btrec\ex_btrec.csproj

ex_env

环境操作实例

examples_csharp\ex_env\ex_env.csproj

ex_repquote

简单的集群实例

examples_csharp\ex_repquote\ex_repquote.csproj

ex_sequence

序列操作实例

examples_csharp\ex_sequence\ex_sequence.csproj

ex_txn

多线程事务实例

examples_csharp\ex_txn\ex_txn.csproj

上述工程可以在单个工程中编译,亦可在整个BDB C# API的解决方案中编译。

(1) 编译解决方案

BDB C# API解决方案已配置好所有BDB C#动态库所需的库及环境。因此,在配置管理器中选择平台(win32或者x64)和编译模式(debug或者release)后,编译该解决方案,便可生成相应的BDB C动态库,C#动态库以及所有实例的可执行文件。如图2和图3所示,进入配置管理器,选择编译配置、平台及工程项。

(2) 编译单个工程

单独编译表格1中的任一工程,打开其工程文件,编译前,应先编译其依赖项。上述10个工程的工程依赖关系,产生的主要对象及其路径如表格2所示:

工程名

工程依赖

产生对象

Db

build_windows\AnyCPU\{debug, release} \{libdb48.dll, libdb48d.dll}

build_windows\ AnyCPU {debug, release } \{libdb48.lib, libdb48d.lib}

db_csharp

db

build_windows\AnyCPU\{debug, release} \{ libdb_csharp48.dll, libdb_csharp48d.dll }

build_windows\AnyCPU\{debug, release } \{ libdb_csharp48.lib, libdb_csharp48d.lib }

db_dotnet

db, db_csharp

build_windows\AnyCPU\{debug, release } \ libdb_dotnet48.dll

DotNetTest

db, db_csharp, db_dotnet

test\scr037\bin\{debug, release}\DotNetTest.dll

ex_access

db, db_csharp, db_dotnet

build_windows\AnyCPU\{debug, release} \ex_access.exe

ex_btrec

db, db_csharp, db_dotnet

build_windows\AnyCPU\{debug, release} \ex_btrec.exe

ex_env

db, db_csharp, db_dotnet

build_windows\AnyCPU\{debug, release} \ex_env.exe

ex_repquote

db, db_csharp, db_dotnet

build_windows\AnyCPU\{debug, release}\ex_repquote.exe

ex_sequence

db, db_csharp, db_dotnet

build_windows\AnyCPU\{debug, release} \ex_sequence.exe

ex_txn

db, db_csharp, db_dotnet

build_windows\AnyCPU\{debug, release} \ex_txn.exe

3. 运行C# API的单元测试

C# API单元测试基于NUnit框架。NUnit是一个开源的面向所有.Net语言的单元测试框架,提供可视化界面和命令行的支持,可在http://www.nunit.org/index.php下载最新版本。

安装完NUnit后,编译DotNetTest测试工程,在<db-4.8.24>\test\scr037\bin\Debug\得到DotNetTest.dll。在NUnit中运行该测试类库前,需要确定libdb48.dlllibdb_csharp48.dlllibdb_dotnet48.dll都在环境变量或者当前目录下。在NUnit中打开生成的DotNetTest.dll,运行该工程,可得到测试结果。

4. 运行示例程序

BDB C# API解决方案提供了6个实例,它们分别是ex_accessex_btrecex_envex_repquoteex_sequenceex_txn。在解决方案中编译和运行实例工程,在Visual Studio设置该实例工程为启动工程,若依赖的动态链接库已编译,则编译和运行该实例即可。例如,运行ex_txn,编译C#库得到libdb48.dlllibdb_csharp48.dlllibdb_dotnet48.dll,打开ex_txn工程文件,如图4,编译该工程,运行结果如图5所示。

5. 基于BDB C# API的开发

使用BDB C# API进行基于数据库应用程序的开发,需要libdb48.dlllibdb_csharp48.dlllibdb_dotnet48.dll三个动态链接库。首先,在开发的工程中添加libdb_dotnet48.dll的引用,由于libdb_dotnet48.dll需要调用本地代码得到的libdb48d.dlllibdb_csharp48.dll。因此,libdb48d.dlllibdb_csharp48d.dll应放在本工程路径或者环境变量中,以便运行时加载。开发过程中,在代码中添加BDB C# API的命名空间,即“using BerkeleyDB”,便可使用BDB C# API。本文在此举一例子,打开数据库并插入一条Hello World的记录。代码如下:

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml;
using BerkeleyDB;

class Program {
      public static void Main(string[] args) {
             BTreeDatabaseConfig btreeDBConfig = new BTreeDatabaseConfig();
             btreeDBConfig.Creation = CreatePolicy.ALWAYS;
             btreeDBConfig.PageSize = 512;
             using (BTreeDatabase btreeDB = BTreeDatabase.Open(
                 "bdb.db", btreeDBConfig)) {

                    btreeDB.Put(new DatabaseEntry(BitConverter.GetBytes((int)1)),
                                     new DatabaseEntry(ASCIIEncoding.ASCII.GetBytes("Hello World!")));
                    KeyValuePair pair = btreeDB.Get(new DatabaseEntry(BitConverter.GetBytes((int)1)));
                    System.Console.WriteLine(ASCIIEncoding.ASCII.GetString(pair.Value.Data));
             }
      }
}

运行结果显示如下:

BDB是成熟高效的嵌入式引擎,个人认为它提供的C# API在小到手机等消费终端,大至企业级应用都可以使用上BDB这个成熟高效的数据库引擎。更多的信息请参考

http://www.oracle.com/technology/documentation/berkeley-db/db/programmer_reference/csharp.html,欢迎垂询。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
在win10 vs 2015 上编译运行bitcoin v0.1源码 (下)
MFC的秘密:它的静态库和动态库所在何处
深入浅出软件开发技术名词_1
dotNet开发游戏微端
Visual C++运行库DLL介绍(转载)
Hook API to detect memory leak
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服