如何在WinRT应用程序中使用SQLite查询参数?

时间:2014-11-01 00:41:46

标签: c# sqlite windows-8 windows-runtime query-parameters

我想在更新sql中使用查询参数,并且有以下代码:

internal static int UpdatePhotosetName(string oldPhotosetName, string newPhotosetName)
{
    String qryUpdateBaseTable = "UPDATE PhotraxBaseData SET photosetName = @newName WHERE photosetName = @oldName";
    int rowsUpdated;
    using (var db = new SQLite.SQLiteConnection(App.DBPath))
    {
        SQLiteCommand cmd = new SQLiteCommand(db);
        cmd.CommandText = qryUpdateBaseTable;
        cmd.Parameters.Add(new SQLiteParameter("@newName"));
        cmd.Parameters.Add(new SQLiteParameter("@oldName"));
        Command.Parameters["@newName"].Value = newPhotosetName;
        Command.Parameters["@oldName"].Value = oldPhotosetName;
        rowsUpdated = cmd.ExecuteNonQuery();
        db.Close();
    }
    return rowsUpdated;
}

...但是在当前上下文中,以下所有内容都被标记为不可用/不存在:

Parameters
SQLiteParameter
Command

我安装了Sqlite-Net(SQLite.cs和SQLiteAsync.cs),以及“SQLite for Windows Runtime(Windows 8.1)”的版本3.8.7.1

我将此代码基于我发现的here,但显然WinRT这样做的方式与更加稳重的方式有很大不同。

如何在WinRT应用程序中使用查询参数?

更新

我认为这不像一些花哨的LINQ那样性感,但确实有效:

internal static int UpdatePhotosetName(string oldPhotosetName, string newPhotosetName)
{
    String qryUpdateBaseTable = String.Format(
        @"UPDATE PhotraxBaseData SET photosetName = '{0}' WHERE photosetName = '{1}'", 
            newPhotosetName, oldPhotosetName);
    int rowsUpdated;
    using (var db = new SQLite.SQLiteConnection(App.DBPath))
    {
        SQLiteCommand cmd = new SQLiteCommand(db);
        cmd.CommandText = qryUpdateBaseTable;
        rowsUpdated = cmd.ExecuteNonQuery();
    }
    return rowsUpdated;
}

没关系;无论如何,我对我的编译器来说太性感了。

更新2

我想人们永远不会太性感;毕竟,我会选择托马斯·莱维斯克(Thomas Levesque)的超精致外观:

    internal static int UpdatePhotosetName(string oldPhotosetName, string newPhotosetName)
    {
        String qryUpdateBaseTable = "UPDATE PhotraxBaseData SET photosetName = ? WHERE photosetName = ?";
        int rowsUpdated;
        using (var db = new SQLite.SQLiteConnection(App.DBPath))
        {
            rowsUpdated = db.Execute(qryUpdateBaseTable, newPhotosetName, oldPhotosetName); // look, ma: no superfluous code!
        }
        return rowsUpdated;
    }

1 个答案:

答案 0 :(得分:2)

db.Execute("UPDATE PhotraxBaseData SET photosetName = ? WHERE photosetName = ?", newName, oldName);