2016-11-04 53 views
2

在SQLite网站上,C#中的SQLite缺少与VS2015中的“SQLite for Universal Windows Platform”扩展相关的文档。 有没有人见过这个扩展特定的文档?UWP - 检查表是否存在

我想看看我的数据库中是否存在一个表,但找不到一个方法来做到这一点。 这是我在做什么,为什么:

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); 

的文件被创建。所以首先我需要测试它是否存在。我的假设是,如果文件存在,我的表就会存在,因为没有创建文件后没有创建表的情况。 我在所提供的方法范围内是否缺少一些更直接的表测试方法?

谢谢!

PS。我检查了我的问题是否已被回答,但没有找到与此API直接相关的任何内容。

回答

0

您可以使用系统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足够聪明,只有当它还不存在时才能创建表。如果该表已经在数据库中,则该调用将被忽略。

+0

感谢这个!您是否也碰巧有链接到文档?我还没有找到全面的。 – VegasVed

+0

此查询应该在SQLite.org上的SQLite文档中记录(它不是UWP特定的)。但是,对于SQLite.Net上的文档,您可能只剩下相关的文章以及项目的Github页面上提供的内容:-) –

0

通用的解决方案:

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; 
}