我想在更新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;
}
没关系;无论如何,我对我的编译器来说太性感了。
我想人们永远不会太性感;毕竟,我会选择托马斯·莱维斯克(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;
}
答案 0 :(得分:2)
db.Execute("UPDATE PhotraxBaseData SET photosetName = ? WHERE photosetName = ?", newName, oldName);