UWP SQLite - 无法找到/创建.db文件

时间:2017-12-31 17:27:21

标签: c# sqlite uwp

我是SQLite的新手,我想在UWP应用中使用它。问题是,我目前有这个连接:

public static void InitializeDatabase()
        {
            using (SqliteConnection db =
                new SqliteConnection("Filename=DatabaseFile.db"))
            {
                db.Open();

                String tableCommand = "CREATE TABLE IF NOT " +
                    "EXISTS MyTable (Primary_Key INTEGER PRIMARY KEY AUTOINCREMENT, " +
                    "Text_Entry NVARCHAR(2048) NULL)";

                SqliteCommand createTable = new SqliteCommand(tableCommand, db);

                createTable.ExecuteReader();
            }
        }

但是我想要一个能够保存所有数据的数据库系统(比如mysql)。这可以用SQLite吗?如何?另外,如果我使用该代码,我现在是否创建了该文件?这怎么可能?

我创建了一个.db文件,其中包含表格(使用this软件)

项目结构:

Project structure

并且已经添加了一些数据,我可以使用该文件,但是如何/在哪里,我没有线索?

3 个答案:

答案 0 :(得分:4)

您提供的代码段将在应用的本地存储文件夹中创建数据库文件,该文件夹通常位于Windows路径C:\Users\[USER_NAME]\AppData\Local\Packages\[PACKAGE_ID]\LocalState(您的应用的PACKAGE_ID列为包名称appxmanifest文件的打包选项卡上。由于这基本上是您的应用程序具有完全读/写访问权限的极少数文件夹之一,因此将数据库文件放在其他位置的选项并不多。

如果您有一个已包含某些表的预定义数据库,并且您希望将其打包为应用程序的一部分,则只需将其添加到项目树中,如屏幕截图中所示,但不要忘记打开其属性并将 Build Action 设置为内容,否则它将不会成为最终应用程序包的一部分:

Set a file's Build Action to "Content"

然后,您需要将此文件复制到应用程序的存储文件夹,然后再创建SQLite连接,例如使用类似的东西:

var file = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///DatabaseFile.db"));
await file.CopyAsync(ApplicationData.Current.LocalFolder);

ms-appx:///前缀告诉文件系统该文件存在于app包的根文件夹中。

在现实生活中的应用程序中,您需要添加一个检查文件是否已经存在(可能只在第一个应用程序启动时复制它!),感知处理等等。

答案 1 :(得分:1)

正如@andreask对答案的补充,也可以直接使用应用程序包中的DB,尽管只是在只读模式下。你可以得到真实的"文件系统路径如下:

var file = await StorageFile.GetFileFromApplicationUriAsync(
              new Uri("ms-appx:///DatabaseFile.db"));
var dbPath = file.Path;

然后正常连接到数据库。但是,任何修改查询都将失败。

答案 2 :(得分:-1)

SQLite不是像MySQL或SQL服务器那样的服务器数据库。数据库在apps目录中创建。由于UWP应用程序在沙箱中运行,因此其他UWP应用程序无法使用它。

相关问题