如何在Xamarin UWP中访问Sqlite数据库文件

时间:2016-07-21 18:54:21

标签: xamarin uwp

我有一个Xamarin项目。在我的UWP项目的根目录中,我存储了一个sqlite文件,该文件具有我的应用程序所需的初始表。我设置了' 构建操作'到' 内容'。我找到的所有示例都在' ApplicationData.Current.LocalFolder.Path '中查找该文件,但是当我运行该应用时,该文件夹中没有任何内容。一切都在Debug文件夹中创建。我应该使用不同的路径进行调试和发布吗?存储如何工作?应用程序是否在UWP中沙盒化?

2 个答案:

答案 0 :(得分:0)

  

我找到的所有示例都在“ApplicationData.Current.LocalFolder.Path”中查找该文件,但是当我运行该应用时,该文件夹中没有任何内容

是的,您设置的sqlite文件只是UWP应用程序的内容,我们需要在第一次运行时以编程方式将其复制到LocalFolder。使用StorageFile.CopyAsync()方法将文件复制到特定位置

请参阅此Sunteen

中的question的回答
  

另一个位置是可以读/写的应用程序数据位置。您可以将数据库文件从安装目录复制到应用程序数据目录以供使用。以下代码示例用于连接本地文件夹中的数据库文件......

答案 1 :(得分:0)

一般来说,我是如何完成的,

  • 确保已安装this

  • 对于Windows应用程序(UWP,WP8,WP8.1等),所有内容文件都应该是 存储在根级别(没有子文件夹。也许有一个解决方法 这是默认的)。对我来说,存储起来非常麻烦 那。因此我创建了一个共享项目来存储sqllite.db和 图像等所有Windows应用程序的共享文件。 设置构建操作=内容并复制到输出目录=不复制

  • 异步方式

    var sqliteFilename = "myworkout.db3";
    
    string     path=Path.Combine(ApplicationData.Current.LocalFolder.Path,sqliteFilename);
    
    var platform = new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT();
                    var task = Task.Run(async () => { await CopyDatabase(); });
                    task.Wait();
    

    var _sqliteConnectionWithLock = new SQLite.Net.SQLiteConnectionWithLock(platform,new SQLite.Net.SQLiteConnectionString(path,false));

    var conn = new SQLiteAsyncConnection(()=> _sqliteConnectionWithLock);

  • 同步代码

    var sqliteFilename =“mydatabase.db3”;

              string path = Path.Combine(ApplicationData.Current.LocalFolder.Path,
      sqliteFilename);
    
              var platform = new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT();
    
                  var task = Task.Run(async () => { await CopyDatabase(); });
              task.Wait();
    
               var conn = new SQLiteConnection(platform,path);