System.Data.SQLite.SQLiteException尝试在Windows 8上编写只读数据库

时间:2013-12-24 16:54:58

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

我开发了一个工作正常的应用程序< = Windows 7.它使用带有VB和C#的SQLlite数据库。但是在 Windows 8 (从未在其他Windows操作系统上遇到此特定问题)尝试写入数据库时​​出现问题

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

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

 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上看起来像enter image description here)。
  3. 如何才能使数据库可写?

1 个答案:

答案 0 :(得分:5)

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

为什么不使用Environment.SpecialFolder enum?

所代表的文件夹

您可以将代码更改为此类

 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