如何附加*.使用可扩展存储引擎API的数据库
本文关键字:引擎 API 数据库 存储 可扩展 何附加 | 更新日期: 2023-09-27 18:10:37
我试图使用Managed Esent API附加到Exchange Server数据库文件,但我得到了下一个错误:"数据库页面上的校验和错误"或JET_errReadVerifyFailure
调用JetAttachDatabase。谁能解释一下这是什么意思以及如何解决它?使用相同的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的消息引擎打开Win7/vista的数据库,你会得到这个错误。
不幸的是,没有办法修复它,而不是升级你的Windows。我是说合法的方式。因为如果你用更新的dll替换你的esent.dll,它就会起作用。但是这是Windows许可所不允许的。
下面是对这个问题的另一个讨论:ESENT分销权