如何使用cpp从ESE数据库中读取记录

时间:2015-02-11 14:08:34

标签: c++ esent extensible-storage-engine

我已使用 JetOpenDatabase API成功打开ESE数据库。 要读取记录,我打开了“MSysObjects”表,并将当前索引设置为“RootObjects”。

这是我的代码(没有错误处理):

err = ::JetOpenTable(sessionID,dbID,"MSysObjects",NULL,0,0,&tableId);
err = ::JetSetCurrentIndex( sessionID, tableId, "RootObjects" );
err = ::JetMove( sessionID, tableId, JET_MoveFirst, 0 );

读取记录我尝试使用 JetRetrieveColumns 函数从当前记录中检索多个列值。我也尝试了 JetRetrievedColumn 功能,但我没有得到实际结果。

是否有人知道如何使用cpp从现有和未安装的ESE数据库文件中读取记录?

2 个答案:

答案 0 :(得分:1)

esent引擎为您提供错误代码出错的提示。在这里查找: https://msdn.microsoft.com/en-us/library/gg269297(v=exchg.10).aspx

通常,在实际尝试通过 JetRetrieveColumn 读取数据之前,必须准备JET_RETRIEVECOLUMN,方法是选择要检索的列,准备缓冲区/指针等。当然还有更多内容,但你应该对你的问题更具体一点。

答案 1 :(得分:1)

是的,Fotis给出了很好的建议。具体的错误代码非常有价值。由于您正在寻找示例代码,因此一些更全面的示例代码是用C#编写的。

https://managedesent.codeplex.com/SourceControl/latest查看EsentInteropTests。搜索RetrieveColumn,它会让您知道哪个订单要按哪个顺序调用。当然,它不是正确的语言,但你可以轻松翻译。

我假设您使用MSysObjects作为示例,因为每个数据库都有该表。它是供内部使用的,破译起来可能相当神秘。

-Martin