C# 仅当windows App 8.1中存在数据库时,Sqlite net才启动Sqlite连接

C# 仅当windows App 8.1中存在数据库时,Sqlite net才启动Sqlite连接,c#,database,winrt-xaml,sqlite-net,C#,Database,Winrt Xaml,Sqlite Net,我想在我的Windows应用商店应用程序中读取sqlite数据库,如果它存在 通常,要从数据库中读取表,我设置表所在的路径,然后调用SQLiteConnection函数 问题是,当我调用这样一个简单的函数时,为什么数据库不存在 public static async Task<ObservableCollection<Objects>> GetAll() { List<Objects> list; using (var

我想在我的Windows应用商店应用程序中读取sqlite数据库,如果它存在

通常,要从数据库中读取表,我设置表所在的路径,然后调用SQLiteConnection函数

问题是,当我调用这样一个简单的函数时,为什么数据库不存在

public static async Task<ObservableCollection<Objects>> GetAll()
    {
        List<Objects> list;
        using (var db = new SQLiteConnection(dbPath))
        {
            // Activate Tracing
            db.Trace = true;

            list = (from p in db.Table<Objects>()
                            select p).ToList();

        }
公共静态异步任务GetAll()
{
名单;
使用(var db=new-SQLiteConnection(dbPath))
{
//激活跟踪
db.Trace=true;
list=(来自db.Table()中的p)
选择p.ToList();
}
是否创建了数据库

调用
新SQLiteConnection(dbPath)
时,将创建空数据库。 是否可以在不创建连接的情况下打开连接?

如果查看正在使用的构造函数的

public SQLiteConnection (string databasePath, bool storeDateTimeAsTicks = false)
            : this (databasePath, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create, storeDateTimeAsTicks)
{
}
您将看到它传入一个标志,指示SQLite在数据库不存在时创建数据库

为了避免这种情况,只需使用另一个构造函数-

public SQLiteConnection (string databasePath, SQLiteOpenFlags openFlags, bool storeDateTimeAsTicks = false)
像这样-

using (var db = new SQLiteConnection(dbPath, SQLiteOpenFlags.ReadWrite))
请记住,如果数据库不存在,这将引发SQLiteException

另一种可能的解决方案是在打开之前手动检查文件是否存在。

如果您查看正在使用的构造函数的

public SQLiteConnection (string databasePath, bool storeDateTimeAsTicks = false)
            : this (databasePath, SQLiteOpenFlags.ReadWrite | SQLiteOpenFlags.Create, storeDateTimeAsTicks)
{
}
public async Task<bool> IsDbExists(string fileName)
    {
        try
        {
            var item = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
            var db = new SQLiteConnection("Your db path");
            var tb1 = db.GetTableInfo("TableName1");
            var tb2 = db.GetTableInfo("TableName2");
            var tb3 = db.GetTableInfo("TableName3");
            var tb4 = db.GetTableInfo("TableName4");
            if (item == null || tb1.Count == 0 || tb2.Count == 0 || tb3.Count == 0 || tb4.Count == 0)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
        catch
        {
            return false;
        }
    }
您将看到它传入一个标志,指示SQLite在数据库不存在时创建数据库

为了避免这种情况,只需使用另一个构造函数-

public SQLiteConnection (string databasePath, SQLiteOpenFlags openFlags, bool storeDateTimeAsTicks = false)
像这样-

using (var db = new SQLiteConnection(dbPath, SQLiteOpenFlags.ReadWrite))
请记住,如果数据库不存在,这将引发SQLiteException

另一种可能的解决方案是在打开之前手动检查文件是否存在。

public async Task IsDbExists(字符串文件名)
public async Task<bool> IsDbExists(string fileName)
    {
        try
        {
            var item = await ApplicationData.Current.LocalFolder.GetFileAsync(fileName);
            var db = new SQLiteConnection("Your db path");
            var tb1 = db.GetTableInfo("TableName1");
            var tb2 = db.GetTableInfo("TableName2");
            var tb3 = db.GetTableInfo("TableName3");
            var tb4 = db.GetTableInfo("TableName4");
            if (item == null || tb1.Count == 0 || tb2.Count == 0 || tb3.Count == 0 || tb4.Count == 0)
            {
                return false;
            }
            else
            {
                return true;
            }
        }
        catch
        {
            return false;
        }
    }
{ 尝试 { var item=wait ApplicationData.Current.LocalFolder.GetFileAsync(文件名); var db=new-SQLiteConnection(“您的数据库路径”); var tb1=db.GetTableInfo(“TableName1”); var tb2=db.GetTableInfo(“TableName2”); var tb3=db.GetTableInfo(“TableName3”); var tb4=db.GetTableInfo(“TableName4”); 如果(项==null | | tb1.Count==0 | | tb2.Count==0 | | tb3.Count==0 | | tb4.Count==0) { 返回false; } 其他的 { 返回true; } } 接住 { 返回false; } }
公共异步任务IsDbExists(字符串文件名)
{
尝试
{
var item=wait ApplicationData.Current.LocalFolder.GetFileAsync(文件名);
var db=new-SQLiteConnection(“您的数据库路径”);
var tb1=db.GetTableInfo(“TableName1”);
var tb2=db.GetTableInfo(“TableName2”);
var tb3=db.GetTableInfo(“TableName3”);
var tb4=db.GetTableInfo(“TableName4”);
如果(项==null | | tb1.Count==0 | | tb2.Count==0 | | tb3.Count==0 | | tb4.Count==0)
{
返回false;
}
其他的
{
返回true;
}
}
接住
{
返回false;
}
}