0

为了避免创建双 SQLite DB,如何检测是否已经有一个?

1) 下面的代码是在 App.xaml.cs 中创建 SQLite DB

2) App.xaml.cs 中的这段代码是创建 SQLite 数据库还是只创建表或两者?

3) 在 MainPage 中,如果创建了 SQLite DB,如何再检查一次。

问题:没有错误信息并且 MainPage 没有显示。

感谢您的帮助。谢谢

 -- 在下面检查 App.xaml.cs 中的 rootFrame

if (rootFrame == null)
{


 //-- 创建前检测

 布尔结果 = 等待 GetIfFileExistsAsync(DBPath);


 如果(结果 == 真)               
 {
      MessageDialog mError = new MessageDialog("DB Created", "DB 创建状态");
     等待 mError.ShowAsync();
     返回;

 }
 别的
  {
    MessageDialog mError = new MessageDialog("未创建数据库", "未创建数据库");
   等待 mError.ShowAsync();

   创建DBNow();

   }

//---- 根帧

}




 私有异步任务 GetIfFileExistsAsync(string strDBPath)
 {
    尝试
     {

     var dbFile = 等待 Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(strDBPath);

      如果(dbFile!= null)
      {
       返回真;
      }
     别的
      {
        返回假;
      }


    }
    捕获(FileNotFoundException)
    {
      返回假;

    }
 }

 私有异步无效 CreateDBNow()
 {

    DBPath = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "customers.sqlite");


   使用 (var db = new SQLite.SQLiteConnection(DBPath))
   {
    // 如果表不存在则创建表
    db.CreateTable();

   }

  MessageDialog mError = new MessageDialog("DB now created", "DB created");
  等待 mError.ShowAsync();


  }


--- 在主页中
如果创建了 SQLite DB,我需要再检查一次。
4

1 回答 1

0

作为最佳实践,开发人员将数据库存储在本地文件夹中,因此下面给出的方便方法将对您有所帮助。WinRT 没有检查文件是否存在的功能。所以这不仅适用于检查数据库文件,而且适用于所有StorageFile.

public async Task<bool> IsDatabaseExistsAsync(string DatabaseNameWithExtension)
{
    try
    {
        var dbFile = await Windows.Storage.ApplicationData.Current.LocalFolder.GetFileAsync(DatabaseNameWithExtension);
        return true;
    }
    catch (Exception)
    {
        return false;
    }
}
于 2013-09-19T10:30:54.137 回答