我是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软件)
项目结构:
并且已经添加了一些数据,我可以使用该文件,但是如何/在哪里,我没有线索?
答案 0 :(得分:4)
您提供的代码段将在应用的本地存储文件夹中创建数据库文件,该文件夹通常位于Windows路径C:\Users\[USER_NAME]\AppData\Local\Packages\[PACKAGE_ID]\LocalState
(您的应用的PACKAGE_ID列为包名称在appxmanifest
文件的打包选项卡上。由于这基本上是您的应用程序具有完全读/写访问权限的极少数文件夹之一,因此将数据库文件放在其他位置的选项并不多。
如果您有一个已包含某些表的预定义数据库,并且您希望将其打包为应用程序的一部分,则只需将其添加到项目树中,如屏幕截图中所示,但不要忘记打开其属性并将 Build Action 设置为内容,否则它将不会成为最终应用程序包的一部分:
然后,您需要将此文件复制到应用程序的存储文件夹,然后再创建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应用程序无法使用它。