6

前段时间我问了一个问题,关于哪个本地数据库适合我的情况。我需要从 .NET 代码和 VB6 访问数据库。压倒性的反应是 SQLite。但是,我决定放弃 SQLite,因为它的唯一 OLE DB 提供程序会为我的软件的每个部署副本收取版税。它还需要在每台 PC 上运行激活程序。

在评估其他选项(SQL Server Compact 版本 - 几乎没有功能的 OLE DB 提供程序,Firebird - 不想为另一个驱动程序付费等......)之后,我得出结论,唯一可行的选择是使用 .由 Microsoft Access(或 Jet 引擎)创建的 MDB 文件。

自 90 年代后期以来我就没有使用过它,所以我有以下问题想问那些有经验的人。

  1. 他们是否解决了数据库不时损坏的问题。
  2. 是通过 ADO.NET OLEDB Provider 从 c# 访问 MDB 还是有本机解决方案(我似乎找不到它)。
  3. Access 中真正糟糕的 SQL 编辑器是否有可行的替代方案?

谢谢。

4

7 回答 7

7

而不是“返回”到 Access,我会坚持使用 SQLite 并使用 System.Data.SQLite 提供程序在 .NET 代码中访问 SQLite 数据。

然后,我将创建一个简单的 COM 互操作 .NET 类以供 VB6 使用,该类包含任何所需的 SQLite 数据访问功能。最后,只需像 VB6 项目中的标准 COM 对象一样引用和使用它。

我对 Access 的了解可能有点过时并且受到不良经历的影响,但在合理的情况下,我会在诉诸 Access 路线之前尝试大多数其他选择。

于 2009-03-25T06:24:49.620 回答
5

您是否考虑过SQL Server 2008 Express Edition(与 SQL Server CE 相反)?

1) 就我个人而言,我发现大多数情况下,Access DB 损坏是由于代码没有自行清理,或者涉及到有故障的网卡。

2)

string connectionString = @“Provider = Microsoft.Jet.OLEDB.4.0; " + 
                          @"Data Source = C:\data\northwind.mdb; " +
                          @"User Id = guest; Password = abc123”


using (OleDbConnection oleDbConnection = New OleDbConnection())
{
    oleDbConnection.ConnectionString = connectionString;

    oleDbConnection.Open();

    ...
}

3) SQL Server 2008 速成版

于 2009-03-25T06:19:18.853 回答
4

MDB 损坏主要是由于数据库打开时客户端计算机、文件服务器和网络中发生的故障。如果您将 MDB 放在文件共享上,这始终存在风险,如果在本地硬盘驱动器上并由一个用户使用,则问题要少得多。

我不希望 SQLite 有任何不同,甚至更糟。

定期运行 JetComp.exe(Microsoft 下载)将修复许多问题并压缩索引表等。无论您使用什么,备份都很重要。

您根本不需要 MS Access 即可使用 Jet MDB。有一些第三方工具用于设计数据库模式和进行交互式查询,包括命令行和 GUI。

于 2009-03-25T17:40:48.543 回答
2

由于 MDB 格式或多或少已被弃用,因此您 90 年代后期的知识是最新的。请参阅此 MSDN 页面

于 2009-03-25T09:00:15.770 回答
1

您还可以尝试SQL Anywhere,它可以在各种操作系统上运行并且占用空间小。为我工作:)

于 2009-03-25T06:56:47.517 回答
1

AngryHacker 问道:

Q1。他们是否解决了数据库不时损坏的问题。

呃,什么?

在正确维护的环境中正确部署的正确设计的应用程序中从来没有任何损坏问题。我已经 3 或 4 年没有看到 MDB 损坏了,而且我有几十个应用程序在许多不同类型的操作环境中被许多客户全职使用。

我认为大多数遭受腐败的人都是那些试图在许多用户之间共享 MDB 文件的人(无论是拆分还是未拆分)。由于您没有考虑使用 Access,因此这不是真正的问题。

Q2。是通过 ADO.NET OLEDB Provider 从 c# 访问 MDB 还是有本机解决方案(我似乎找不到它)。

本机解决方案是 DAO,但那是 COM,所以您可能不想使用它。从 C# 开始,我会说 OLEDB 是你最好的选择,但这不是我的专业领域,所以对它持保留态度。我相信 Michael Kaplan 报告说 Jet ADO/OLEDB 提供程序是线程安全的,而 DAO 不是。不过,这并不意味着他推荐 ADO/OLEDB 而不是 DAO,但他的评论也来自 Access 上下文,而不是 C#。

Q3。Access 中真正糟糕的 SQL 编辑器是否有可行的替代方案?

当您实际上不使用 Access 时,为什么要使用它?您可以使用任何您喜欢的 SQL 编辑器,只要您测试您编写的 SQL 是否与 Jet 的 SQL 方言兼容。

一方面,我不知道 Access 的 SQL 编辑器有什么问题(除了无法设置字体大小),但是,我使用 QBE 编写了很多 SQL,甚至都没有看SQL 视图。

于 2009-03-26T04:29:06.350 回答
1

要回答您关于 Access 中非常糟糕的 SQL 编辑器的问题 - 我完全同意。字体很臭,MSAccess 总是严重地重新格式化查询,它有时会添加破坏我的 SQL 的元字符,最后但最糟糕的是,如果它无法解析 SQL,它不会让你访问它!

我的解决方案是使用外部代码。我使用 DAO 来实例化 MSAccess,然后可以使用 QueryDefs 集合直接编辑查询。它可以让你做大多数事情——创建、重命名、编辑等。但是有一些事情你不能这样做——例如,你无权访问查询元数据(描述、隐藏等)。

外部代码也很棒,因为您可以构建一套测试用例,指定预期的返回值等。

于 2009-07-24T14:25:32.113 回答