在C#中读取BerkeleyDB数据库行

时间:2017-12-29 04:51:26

标签: c# berkeley-db

我在从berkeleyDB格式的文件中读取行时遇到了一些麻烦。我已经使用db_dump实用程序来显示文件中的内容并且有很多条目,但是当我尝试通过代码时,我只从光标返回一行(单个键和4个字节的数据) )

DatabaseEntry foundKey = new DatabaseEntry();
DatabaseEntry foundData = new DatabaseEntry();
LockingInfo lockInfo = new LockingInfo();

BTreeCursor cursor = db.DB.Cursor();

while (cursor.MoveNext(foundKey, foundData, lockInfo))
{
    var kvp = cursor.CurrentMultiple;
    var keyString = Encoding.Default.GetString(foundKey.Data);
    var dataString = Encoding.Default.GetString(foundData.Data);
    Console.WriteLine($"{keyString}: {dataString}"); // output: main: 0002
    if(cursor.Count() > 1)
    {
        // count is always 1
        Console.WriteLine($"There are duplicate records.");
    }
}
cursor.Close();
db.DB.Close();
db.Environment.Close();

db_dump输出:

VERSION=3
format=bytevalue
database=main
type=btree
db_pagesize=8192
HEADER=END
 0573262135f0b02634966b36b10c53c58fc6c3a2b8fff9e125be6ac3246..... (hundreds of lines)
DATA=END

知道我可能做错了吗?

1 个答案:

答案 0 :(得分:0)

似乎我必须传递数据库名称才能读取游标中的数据。

打开数据库时,我最初使用的是以下内容:使用游标时只返回数据库头:

db = BTreeDatabase.Open(filename, dbConfig, txn);

当我应该使用时:

db = BTreeDatabase.Open(filename, "main", dbConfig, txn);