c# - 使用表名列表删除 SQLite 表

标签 c# sqlite windows-8.1

我正在尝试通过使用列表中的表名来删除一组表,然后获取每个字符串的类型并将其删除:

List<string> models = new List<string> { "WebBrowser", "Notebook", "Members"};

foreach (string mod in models)
{

    Type type = Type.GetType(mod));
    using (var dbConn = new SQLiteConnection(app.DBPath))
    {
        dbConn.RunInTransaction(() =>
        {
            dbConn.DropTable<type>();
            //dbConn.DropTable<WebBrowser>();
            dbConn.Dispose();
            dbConn.Close();
        });
    }
}

问题:我不能用这种方式删除表,DropTable 需要类的名称(例如 WebBrowser )而我不知道我不想单独删除每个表(即 dbConn.DropTable< WebBrowser >();),因为我有超过 50 个表要删除。

错误:“找不到类型或命名空间名称‘type’”。 (这个错误是预料之中的,因为我的命名空间中没有类“类型”。

最佳答案

您可以在 SQLite 中使用 SQL 命令删除表。您需要做的就是每次迭代您的集合并构建一个 SQL 字符串,然后执行它

List<string> models = new List<string> { "WebBrowser", "Notebook", "Members"};

foreach (string mod in models)
{
    using (var dbConn = new SQLiteConnection(app.DBPath))
    {
        SQLiteCommand command = new SQLiteCommand(dbConn);
        command.CommandText = string.Format("DROP TABLE {0};", mod);
        command.ExecuteNonQuery();
    }
}

我不确定这种语法是否完全适合您的情况(我只在 Windows 8.1 中使用过 sqlite-net),但一般方法是合理的

关于c# - 使用表名列表删除 SQLite 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27721183/

相关文章:

c# - 以最佳方式捕获站点上的所有异常

java - 如何在android中的数据库中添加多行?

SQLite 查询查找主键

c# - 另一个未更新的 MVVM 可见性属性

c# - 是否可以有一个函数接受任意数量、任意类型的变量?

c# - ASP.NET Core 中的 WCF 跟踪

c# - 是否可以保证枚举的 ToString 的值是多少?

python - 如何将 Django 项目的数据库引擎从 Sqlite 切换到 MySQL?

sqlite - 将 Windows 8 商店应用程序迁移到 8.1 sqlite 问题

c# - 使用 MVVM 模式在页面之间导航 C# Windows 8.1