使用Winforms应用程序分发Access数据库

时间:2013-01-09 17:47:53

标签: c# winforms ms-access

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

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

我的意图是使用File.Copy复制MDB,但我无法确定文件路径,因为我无法访问代码中的MDB。并且假如它只是打包在.exe中,它可能没有文件路径。

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

2 个答案:

答案 0 :(得分:2)

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

Here is more info on writing an embedded resource to file.

答案 1 :(得分:1)

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

这样,用户就具有完全的读写访问权限,并且能够在没有安全问题的情况下复制文件或复制文件。这些环境变量可通过

获取
  Environment.GetEnvironmentVariable  

您还可以使用注册表设置并读取和写入该特定应用程序的注册表,该应用程序具有简单的DatabaseAvailable密钥,并将其切换为是或否。

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