在 C# 中读取 BerkeleyDB 数据库行
Posted
技术标签:
【中文标题】在 C# 中读取 BerkeleyDB 数据库行【英文标题】:Reading BerkeleyDB database rows in C# 【发布时间】:2017-12-29 04:51:25 【问题描述】:我在读取 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】:看来我必须传递数据库名称才能读取游标中的数据。
打开数据库的时候,我原来是用下面这个,在使用游标的时候只返回数据库头:
db = BTreeDatabase.Open(filename, dbConfig, txn);
我应该在什么时候使用:
db = BTreeDatabase.Open(filename, "main", dbConfig, txn);
【讨论】:
以上是关于在 C# 中读取 BerkeleyDB 数据库行的主要内容,如果未能解决你的问题,请参考以下文章