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位和64位Windows平台,实例开发环境为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>\csharp:C# API源代码; l <db-4.8.24>\libdb_csharp:db.i和db_csharp_wrap.c,C# API和C API方法之间的映射; l <db-4.8.24>\test\scr037:C# 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\的工程文件路径分别是:
上述工程可以在单个工程中编译,亦可在整个BDB C# API的解决方案中编译。 (1) 编译解决方案 BDB C# API解决方案已配置好所有BDB C#动态库所需的库及环境。因此,在配置管理器中选择平台(win32或者x64)和编译模式(debug或者release)后,编译该解决方案,便可生成相应的BDB C动态库,C#动态库以及所有实例的可执行文件。如图2和图3所示,进入配置管理器,选择编译配置、平台及工程项。
(2) 编译单个工程 单独编译表格1中的任一工程,打开其工程文件,编译前,应先编译其依赖项。上述10个工程的工程依赖关系,产生的主要对象及其路径如表格2所示:
3. 运行C# API的单元测试 C# API单元测试基于NUnit框架。NUnit是一个开源的面向所有.Net语言的单元测试框架,提供可视化界面和命令行的支持,可在http://www./index.php下载最新版本。 安装完NUnit后,编译DotNetTest测试工程,在<db-4.8.24>\test\scr037\bin\Debug\得到DotNetTest.dll。在NUnit中运行该测试类库前,需要确定libdb48.dll,libdb_csharp48.dll,libdb_dotnet48.dll都在环境变量或者当前目录下。在NUnit中打开生成的DotNetTest.dll,运行该工程,可得到测试结果。
4. 运行示例程序 BDB C# API解决方案提供了6个实例,它们分别是ex_access,ex_btrec,ex_env,ex_repquote,ex_sequence,ex_txn。在解决方案中编译和运行实例工程,在Visual Studio设置该实例工程为启动工程,若依赖的动态链接库已编译,则编译和运行该实例即可。例如,运行ex_txn,编译C#库得到libdb48.dll,libdb_csharp48.dll,libdb_dotnet48.dll,打开ex_txn工程文件,如图4,编译该工程,运行结果如图5所示。 5. 基于BDB C# API的开发 使用BDB C# API进行基于数据库应用程序的开发,需要libdb48.dll,libdb_csharp48.dll和libdb_dotnet48.dll三个动态链接库。首先,在开发的工程中添加libdb_dotnet48.dll的引用,由于libdb_dotnet48.dll需要调用本地代码得到的libdb48d.dll和libdb_csharp48.dll。因此,libdb48d.dll,libdb_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,欢迎垂询。 |
|
来自: goodwangLib > 《BDB》