c# - 引用和读取 .sqlite 数据库文件 (C#/UWP)

标签 c# sqlite uwp

我想做的就是使用我存储在应用程序的 Assets 文件夹中的 .sqlite 数据库文件 (/Assets/CommonCore.sqlite)。我正在尝试建立连接,并且尝试了一些不同的操作:

    SQLite.Net.SQLiteConnection conn;

    public MainPage()
    {
        this.InitializeComponent();

        conn = new SQLite.Net.SQLiteConnection("Data Source=Assets/CommonCore.sqlite");

但这会引发异常“不包含采用 1 个参数的构造函数”。

    string path;
    SQLite.Net.SQLiteConnection conn;

    public MainPage()
    {
        this.InitializeComponent();

        path = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "CommonCore.sqlite");

        conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path);

但它引用了文件夹“\AppData\Local\Packages\8ed84aca-896d-4286-ba91-e52316db2e89_dzc2ymb8n4xk4\LocalState\CommonCore.sqlite”,这显然不是我需要的文件。

我确信我错过了一些愚蠢的事情。

最佳答案

在 UWP 应用中,您可以访问的文件夹是有限的:

  • 用户使用 FileOpenPicker 或 FolderPicker 指定的所有文件
  • FutureAccessList 或 MostRecentlyUsedList 中的文件。 FutureAccessList 可以在 list 文件(例如文档、图片、视频文件夹)中声明。但是,用户必须允许访问这些文件夹。
  • 通过文件扩展名关联或通过共享打开的文件。
  • 应用程序安装目录。
  • 应用程序数据位置。
  • 在某些情况下可移动设备。

Source

在您的情况下,您试图写入应用程序数据位置。但是,每次安装应用程序时,此文件夹都是空的。

另一种方法是从安装文件夹中读取 sqlite 数据库。将项目中的文件添加到此文件夹很容易。为此,您首先必须声明要打包哪些文件。这意味着将它们添加到安装文件夹中。首先,在工作目录中创建一个子文件夹(您可以在其中找到 AppxManifest.xml 的文件夹)。这不是必需的,但更干净。我将我的文件夹命名为“数据”。

接下来您可以检查您是否正确执行了此操作。在 Visual Studio 中打开您的项目,然后单击解决方案资源管理器中的“显示所有文件”按钮。

'Show all files' button

之后,您应该能够在解决方案资源管理器中看到新文件夹及其内容。您现在可以右键单击该文件夹并选择“包含在项目中”。

Include in project

最后,您应该打开文件的属性(例如数据文件夹中的 db.sqlite)并将构建操作设置为内容。

Set content

现在您可以使用以下代码连接到数据库:

public class Database
{
    string path;
    SQLite.Net.SQLiteConnection conn;

    public Database()
    {
        path = Path.Combine(Windows.ApplicationModel.Package.Current.InstalledLocation.Path, "Data", "Questions.sqlite");
        conn = new SQLite.Net.SQLiteConnection(new
           SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path);
    }
}

关于c# - 引用和读取 .sqlite 数据库文件 (C#/UWP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35229172/

相关文章:

c# - 使用 Josh Smith 的 WPF MVVM 演示应用程序实现 ListView 筛选器

c# - RestSharp 请求 momentapp 的 restful api

c# - 将 MySQL 查询转换为 Sqlite (SUBSTRING_INDEX)

c# - 用于 UWP 应用程序的 Prism 与 mvvm 光

c# - 如何跟踪 Outlook 服务器上的邮件

sql - 如何更快地创建索引

sql - 多行插入查询问题寻找更有效的方法

c# - uwp:如何在 x:DataType 之外的 DataTemplate 内绑定(bind)数据?

c# - UWP XAML 中的全局样式

c# - 使用 LINQ 在运行时从数据库中获取数据