2

我有一个 C# 应用程序,它可以读取和写入 Access 数据库。每个用户有一个数据库文件。我的目的是在启动时检查用户的“我的文档”文件夹中是否存在 MDB,如果未找到 MDB,则将模板 MDB 复制到该文件夹​​。

我已经将模板 MDB 添加到我的项目中,并将其放在我调用的自己的文件夹中Packaged。但是,我无法Packaged从代码中引用此文件夹,因为它没有出现在 IntelliSense 中。

我的意图是File.Copy用来复制 MDB,但我无法确定文件路径,因为我无法在代码中访问 MDB。如果它只是打包在.exe中,大概它不会有文件路径?

如果可能的话,我宁愿不分发单独的 MDB,实现这一目标的最佳方法是什么?

4

2 回答 2

2

过去我通过使 MDB 成为嵌入式资源并根据需要将其写入磁盘(如果它不存在)来完成此操作。

这是有关将嵌入式资源写入文件的更多信息。

于 2013-01-09T17:57:50.017 回答
1

您几乎必须使用模板 MDB 的环境路径之一。像 ApplicationData 或 Documents and Settings\Username\Local Settings\ 或其他之一。本地用户数据是用户特定数据的最佳方式。在最开始的代码中,第一次运行时判断该文件是否存在。如果存在则复制模板,如果不存在则不复制。

这样,用户就拥有完整的读写访问权限以及复制文件或复制文件的能力,而不会出现安全问题。这些环境变量可以通过

  Environment.GetEnvironmentVariable  

您还可以有一个注册表设置并读取和写入该特定应用程序的注册表,该应用程序具有一个简单的 DatabaseAvailable 键,并切换它是或否。

您也可以将 MDB 作为资源嵌入,然后根据需要编写它。

于 2013-01-09T18:01:25.893 回答