c# - 如何使用可扩展存储引擎 API 附加 *.edb 数据库?

标签 c# database exchange-server jet

我试图使用 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 方法中,我只设置了 SystemPathTempPath 参数。可能我需要设置任何其他参数来解决我的问题?或者我的 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/

相关文章:

c# - 在 Outlook 2007 中获取当前用户的电子邮件地址

c# - 您对一组编码标准或最佳实践有什么好的建议/链接可以遵循吗?

mysql - 使用 Google Dart 进行数据库查询?

c# - 对象无法序列化,因为它没有无参数构造函数

java - Spring Cassandra 存储库 - 如何使用空集群键进行搜索

java - postgresql hibernate 插入时出现异常

PHP:Microsoft Exchange 问题,PHP 中没有电子邮件正文

c# - 获取具有相同名称的所有属性

c# - ASP.NET登录控件连接字符串错误: Keyword not supported: 'metadata'

c# - 如何确保在每个循环上创建一个新的 Person?