我试图使用托管的esent api附加到exchange服务器数据库文件,但在调用jetattachdatabase时出现下一个错误:“数据库页上的校验和错误”或JET_errReadVerifyFailure
。有谁能解释一下这意味着什么以及如何修复它吗?该数据库使用相同的API成功地从C++应用程序中附加。
代码:
int pageSize;
Api.JetGetDatabaseFileInfo(fileName, out pageSize, JET_DbInfo.PageSize);
SystemParameters.DatabasePageSize = pageSize;
JET_INSTANCE jetInstance;
string jetInstanceName = Guid.NewGuid().ToString("N");
Api.JetCreateInstance(out jetInstance, jetInstanceName);
try
{
SetSystemParameters(jetInstance, fileName, jetInstanceName);
Api.JetInit(ref jetInstance);
JET_SESID jetSessionId;
Api.JetBeginSession(jetInstance, out jetSessionId, "admin", "password");
try
{
Api.JetAttachDatabase(jetSessionId, fileName, AttachDatabaseGrbit.ReadOnly);
}
finally
{
Api.JetEndSession(jetSessionId, EndSessionGrbit.None);
}
}
finally
{
Api.JetTerm(jetInstance);
}
在
SetSystemParameters
方法中,我只设置SystemPath
和TempPath
参数。我可能需要设置其他参数来解决我的问题吗?或者我的esent.dll
版本比需要的旧…现在我的esent.dll
版本在system32
文件夹中是5.1.2600.5512
。谢谢。
最佳答案
我遇到了同样的问题。你的猜测是对的,这是因为版本不同。如果试图打开由winxp esent引擎生成的win7/vista数据库,则会出现此错误。
不幸的是,没有办法修复它,而不是升级你的Windows。我指的是法律途径。
因为如果你只是用新的来回复你的esent.dll,它就会工作。但Windows许可证不允许这样做。
下面是关于这个问题的另一个讨论:
ESENT distribution rights
关于c# - 如何使用可扩展存储引擎API附加* .edb数据库?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7690225/