我试图使用 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 esent 引擎打开 Win7/Vista 制作的数据库,则会出现此错误。
不幸的是,没有办法修复它,只能升级您的 Windows。我的意思是合法的方式。 因为如果你只是用更新的替换你的 esent.dll,它就会工作。但 Windows 许可证不允许这样做。
这是对这个问题的另一个讨论: ESENT distribution rights
关于c# - 如何使用可扩展存储引擎 API 附加 *.edb 数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7690225/