【问题标题】:ADO.NET database accessADO.NET 数据库访问
【发布时间】:2010-12-24 07:02:44
【问题描述】:

我在 VB.NET 中编写了一个程序,该程序所做的一件事就是将记录插入 Microsoft Access 数据库。我的访问数据库的程序的后端被编写为可互换的层。如果我用一个使用 Microsoft SQL Server 数据库的层“交换”这个层,我的程序就会运行。如果我使用 MS Access,它仍然很快,但速度要慢得多。是否有人对如何使用 Microsoft Access 加速 ADO.NET 事务有任何提示或技巧?我真的更愿意在 SQL Server 上使用 MS Access,这样我就可以将我的数据库与我的程序一起分发(而不是连接到一些远程 SQL Server)。有什么建议?另外,当我创建 MS Access 数据库时,我是在 Access 2000 兼容模式下创建的。使用2003兼容模式会更快吗?

提前致谢

【问题讨论】:

  • 您是否考虑过通过 COM 使用 ADO/OLEDB 而不是 ADO.NET?

标签: database ms-access ado.net


【解决方案1】:

MSDN 上有一篇关于如何加速 ADO.NET 的文章:http://msdn.microsoft.com/en-us/library/ms998569.aspx 虽然这篇文章有点尘土飞扬,但它仍然提出了一些好处:)

除此之外,我自己使用 MS Access,发现一些技术,例如缓存数据、选择不使用源方案或优化查询,可以将性能保持在一个不错的水平。

【讨论】:

    【解决方案2】:

    根据我的经验,ADO.NET 并没有针对 MS Access 进行太多优化。在某些情况下,使用较旧的 ADO 或 DAO 接口(在 VB.NET 中通过 COM 可用)可以为您带来大约 20 倍或更多的性能改进。但这一切都取决于您的程序真正执行的 SQL 语句(大量批量更新/插入,或大量具有大型结果集的查询,或大量交互式 LOAD-Transform-Store 循环)。

    【讨论】:

      【解决方案3】:

      虽然您需要安装它,但 SQL Server Express 支持“XCopy 文件部署”,在这种情况下,您部署应用程序所需要做的就是提供一个 .mdf 文件和您的可执行文件。

      详细信息是 MSDN 上的 here

      这确实支持存储过程:我在我们的单元测试中使用它来动态创建一个模拟数据库。

      【讨论】:

        【解决方案4】:

        您是否同时在 Access 中打开了 Access 后端?如果是这样,请在不打开它的情况下尝试您的程序。如果这加快了速度,那么您应该打开数据库连接或记录集(针对记录很少的表)并在处理数据时将其保持打开状态。

        问题在于,如果您针对 Access 数据库文件打开和关闭对象或记录集,而其他人在 Access 数据库文件中,Jet 会浪费大量时间对 LDB 文件进行锁定。所以保持与 Access 数据库文件的永久连接可以解决这个问题。

        【讨论】:

          【解决方案5】:

          SQL Server Compact 3.5 将为您带来同样的好处 - 您可以部署和分发的单个数据库文件(只要您在应用程序中包含运行时程序集)。 与完整的 SQL Server 实例相比,它的查询能力有所降低,但绝对比 Access 引擎快。

          我已将它与具有桌面组件的移动应用程序一起使用,它完成了我需要它做的所有事情。

          【讨论】:

          • 是的,据我所知,唯一的问题是它不支持存储过程,而且我有很多,转换起来很麻烦。
          • 是的,确实没有。如果您除了简单的连接和查询之外还有其他任何东西,我不会推荐它。
          • SQL Server Compact 和 Access/Jet 数据库文件之间是否有明确的速度测试比较?
          【解决方案6】:

          正如您所体验的那样,访问不是最佳的。

          你看过SQL Server Compact Edition。它可以与您的应用程序一起嵌入和分发...并且性能应该比 Access 好得多。

          【讨论】:

          • 是的,据我所知,唯一的问题是它不支持存储过程,而且我有很多,转换起来很麻烦。
          • Access 为何不够理想?
          • 呃,Access 支持存储过程吗?
          • 由于性能原因,访问不是最优的。查询引擎比 SQL Server Compact 慢,您必须通过 ODBC 而不是本地调用来调用 Access,文件大小是有限的,并且您没有存储过程(这对我来说不是一个大问题,但仍然...... .
          • 有一个用于 Access 的 OLEDB 提供程序,它应该是更快的 ODBC。 Jet 现在是一个不错的引擎,只是不要指望它可以处理数百万个事务或与 SQL Server 相同的数据量。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-09
          • 1970-01-01
          • 2011-04-15
          • 1970-01-01
          • 2011-12-28
          • 1970-01-01
          相关资源
          最近更新 更多