我有一个用C#编写的Windows 10 UWP应用程序。我正在使用SQLite在本地存储我的数据。我遇到的问题是永远不会使用此代码保存和/或检索文件。它应该工作,但我不知道什么是错的。
dbExists总是计算为false,所以我在这里缺少什么?
private SQLiteConnection localConn;
private string dbPath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "myDatabase.db");
public async void DBInit()
{
bool dbExists = false;
try
{
var store = await ApplicationData.Current.LocalFolder.GetFileAsync(dbPath);
dbExists = true;
}
catch { dbExists = false; }
if (!dbExists)
{
using (localConn = new SQLiteConnection(new SQLitePlatformWinRT(), dbPath))
{
// Create table
localConn.CreateTable<MyTable>();
}
}
else // CURRENTLY NOT FIRING!!
{}
}
答案 0 :(得分:2)
请考虑使用以下代码创建和访问数据库文件:
StorageFile notesFile = await storageFolder.CreateFileAsync(dbPath, CreationCollisionOption.OpenIfExists);
如果新文件不存在,则会创建新文件,并在创建文件时检索它。
请查看我的博客文章,了解有关UWP数据存储的更多信息: https://mobileprogrammerblog.wordpress.com/2016/05/23/universal-windows-10-apps-data-storage/
答案 1 :(得分:1)
我认为你错过了这段重要的代码:
SQLiteConnection.CreateFile("mydatabase.sqlite");
首先执行此操作,然后创建引用(现在)创建的文件的连接实例。
另外,我建议您使用.sqlite扩展名命名数据库,以便团队的其余部分和传入的开发人员,然后查看db文件工件,可以立即告诉这是一个sqlite数据库中。
编辑: 该方法是一种静态方法。所以你会像这样使用它......
using System.Data.SQLite; namespace sqlite_sample { class Program { static void Main(string[] args) { SQLiteConnection.CreateFile("sample.db"); } } }
以下不工作:
var conn = SQLiteConnection(...);
conn.CreateFile(dbPath); //<-- static methods can't be invoked at the instance level...