UWP -检查表是否存在

本文关键字:存在 是否 检查表 UWP | 更新日期: 2023-09-27 18:16:10

在VS2015中可用的"SQLite for Universal Windows Platform"扩展相关的SQLite网站上缺乏c#中SQLite的文档。有没有人看到任何文件具体到这个扩展?

我想看看表是否存在于我的DB,但找不到一个方法来做到这一点。这就是我正在做的事情和原因:

SQLite.Net.SQLiteConnection conn; 
string path = path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "entries.sqlite");
if (!System.IO.File.Exists(path))
{
    conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path);
    conn.CreateTable<Entry>();
}
else
{
     conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path);
}

我这样做是因为当它被执行时:

conn = new SQLite.Net.SQLiteConnection(new SQLite.Net.Platform.WinRT.SQLitePlatformWinRT(), path);

如果文件不存在,则创建该文件。首先我需要测试它是否存在。我的假设是,如果文件存在,那么我的表就存在,因为没有在文件创建后不立即创建表的情况。我是否错过了一些更直接的测试方法所提供的方法范围内的表?

谢谢!

p。我已经检查了我的问题是否得到了回答,但没有发现任何与这个API直接相关的东西。

UWP -检查表是否存在

您可以使用查询系统sqlite_master表来查看具有给定名称的表是否存在:

var tableQuery = "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='Entry';"
bool tableExists = conn.ExecuteScalar<int>( tableQuery ) == 1;

如果表不存在,查询将返回0,如果表存在,查询将返回1。

但是,即使表已经存在,您也不必担心调用conn.CreateTable<Entry>();。SQLite.net非常聪明,只在表还不存在时才创建它。如果表已经在数据库中,这个调用将被忽略。

通解:

public bool TableIsExists<T>(SQLiteConnection conn)
{
    var q = "SELECT name FROM sqlite_master WHERE type='table' AND name=?";
    var cmd = conn.CreateCommand(q, typeof(T).Name);
    return cmd.ExecuteScalar<string>() != null;
}