【问题标题】:Building my project sets the database to read only?构建我的项目将数据库设置为只读?
【发布时间】:2013-05-18 18:17:06
【问题描述】:

我在 Visual Studio 中使用 VB 开发了一个连接到 .db 数据库的程序。 当我调试它时,它工作正常,因为我计算机上的数据库未设置为只读(我通过右键单击文件并转到属性进行检查)。

我使用标准的 Visual Studio 设置项目来构建它,并且设置项目中数据库的只读属性设置为 false。 但是,当我构建项目并将其安装在另一台机器上时,数据库以某种方式设置为只读,并且出现错误“尝试编写只读数据库”

有人知道我将如何解决这个问题吗? 谢谢

编辑:嗯,我刚刚检查了数据库和其他程序文件添加到的文件夹被标记为“只读(仅适用于文件夹中的文件)”。因此,虽然数据库未标记为只读,但文件夹是。也许是因为它在程序文件夹中?

【问题讨论】:

  • 您的应用程序是安装在 c:\program files 还是 c:\program files (x86) 并且您的数据库在同一个文件夹中?
  • 安装到 c:\program files 的程序和数据库在同一个文件夹中,我认为这是问题所在。我一直在网上阅读,数据库应该在 AppData 文件夹中还是类似的地方?
  • 是的,问题出在此文件夹中。因为操作系统不允许在那里写文件。您可以更改数据库文件的位置。我会给你一个可能的解决方案作为答案
  • 当我在设置中添加一个文件夹时,我右键单击文件系统位,唯一的选项是“添加一个特殊文件夹”,它为我提供了一长串不同类型的文件夹,我可以从中选择,你知道我应该选择哪种类型吗?
  • OK,选择Custom Folder,然后将属性 DefaultLocation 设置为自定义字符串 [CommonAppDataFolder]。我会在答案中更好地解释

标签: database visual-studio-2010 visual-studio sqlite installation


【解决方案1】:

出于安全原因,文件夹C:\PROGRAM FILESC:\PROGRAM FILES (x86) 由操作系统(Vista 及更高版本)配置,以阻止写入操作。
可以使用Environment.SpecialFolder 枚举的参数CommonApplicationData 调用Environment.GetSpecialFolder 来检索用于写入应用程序范围数据(设置或数据库数据文件)的推荐文件夹。

Visual Studio 2010 中使用的标准设置工具没有预定义的文件夹直接指向此 CommonApplicationData,但是您可以使用解决方法:

  • 右键单击文件系统,选择Add a Special Folder 和 然后Custom folder
  • 为文件系统树中的新文件夹命名
  • 将属性DefaultLocation 设置为[CommonAppDataFolder]
  • 右键单击新文件夹为您的应用程序创建一个子文件夹 添加文件夹自定义文件夹
  • 使用此文件夹添加您的数据库文件。

在此之后,不要忘记更改您的应用程序 ConnectionString 并将其指向文件的新位置。在 C# 中,您可以编写这样的代码

string commonData = ENvironment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData);
string pathToDBFile = Path.Combine(commonData, "MyAppDir", "MyDB.sqlite");

【讨论】:

  • 对我来说,它现在对用户来说是只读的,但对于管理员来说,它是一个普通文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
  • 1970-01-01
  • 2017-07-18
  • 1970-01-01
  • 2019-03-20
  • 2013-08-02
相关资源
最近更新 更多