【问题标题】:System.Data.SQLite.SQLiteException Attempt to write a read-only database on Windows 8System.Data.SQLite.SQLiteException 尝试在 Windows 8 上编写只读数据库
【发布时间】:2013-12-25 06:41:24
【问题描述】:

我开发了一个运行良好的应用程序 Windows 8 上(在其他 Windows 操作系统上从未遇到过此特定问题)尝试写入数据库时​​出现问题

System.Data.SQLite.SQLiteException: Attempt to write a read-only database

我在 Windows 8 电脑上创建了数据库文件,例如:

 Try
     If (Not File.Exists(System.Environment.CurrentDirectory & "\MY_DB.db")) Then
                Dim conn = New SQLite.SQLiteConnection("Version=3;New=True;Compress=False;Read Only=False;Data Source=" & System.Environment.CurrentDirectory & "\MY_DB.db")
                conn.Open()
                '...DO STUFF  
                conn.Close()
                conn.Dispose()
                conn = Nothing
     End If

 Catch ex As Exception
            'Throw ex
            Return False
 End Try

但是没有用。

所以基本上我已经尝试过了:

  1. 在创建 db 文件时添加了 Read Only=False 但不起作用。
  2. 数据库所在的文件夹必须具有写入权限,以及实际的数据库文件。这样做了,但没有用(在 Windows 7 上看起来像 )。

如何使数据库可写?

【问题讨论】:

  • 我也遇到了同样的问题,是文件夹权限问题。您是否尝试向“所有人”组授予修改和写入权限?
  • 为什么通过 System.Environment.CurrentDirectory 访问数据库?如果用户打开文件对话框(将当前目录更改为选择),这将不起作用。 db 应该放在应用程序数据中,而不是放在程序中。
  • 实际上,数据库只是用于日志问题,这是存在的原因,但是当尝试编写任何事件时,我会收到此错误...

标签: c# database vb.net sqlite windows-8.1


【解决方案1】:

我不知道您打电话时的当前目录是什么,但我会确保将我的数据库放在一个文件夹中,每个用户都设计有读/写权限。

为什么不使用Environment.SpecialFolder 枚举所代表的文件夹?

你可以把你的代码改成这样的

 Try
      Dim appFolder = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData)
      appFolder = Path.Combine(appFolder, "MyAppDatabaseFolder")
      If Not Directory.Exists(appFolder) Then
           Directory.CreateDirectory(appFolder)
      End If
      Dim myDB = Path.Combine(appFolder, "MY_DB.db")
      If (Not File.Exists(myDB)) Then
          .....
      End If
 Catch ex As Exception
      'Throw ex
      Return False
 End Try

【讨论】:

  • 有没有办法按照@Mark PM的建议以编程方式授予文件夹权限并授予“所有人”组修改和写入权限?
  • 您可以查看this question 并检查它是否适合您。但是我建议避免这条路。遵循操作系统制定的规则。使用SpecialFolder.CommonApplicationData 定义为所有用户存储应用程序数据的文件夹(文件数据库是一个完美的例子)。使用不同的文件夹是可能的,但是,为什么要与操作系统开始斗争呢?在某种程度上,你会失去一些东西(肯定会失去纠正问题所需的时间)
猜你喜欢
  • 2011-01-20
  • 2014-12-07
  • 1970-01-01
  • 2023-03-09
  • 2021-11-07
  • 2020-08-17
  • 2021-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多