我有一个对象,比如一个音符,我想要保存在表格中的参数(内容,大小,宽度,高度等)。 有了sql字符串updateNotes:
UPDATE NOTES
SET
CONTENT=@content,
POSX=@posX,
POSY=@posY,
COLOR=@color,
ORIENTATION=@orientation,
HEIGHT=@height,
WIDTH=@width,
AUTHOR=@autho
WHERE SESSION =@sid
public void save()
{
SQLiteConnection conn = new SQLiteConnection(connectionString);
foreach (Note note in notes)
{
using (SQLiteCommand comm = new SQLiteCommand(updateNotes, conn))
{
comm.Parameters.AddWithValue("@content", note.getNoteItemContent());
comm.Parameters.AddWithValue("@posX", note.getSvi().Center.X);
comm.Parameters.AddWithValue("@posY", note.getSvi().Center.Y);
comm.Parameters.AddWithValue("@sid", sid);
comm.Parameters.AddWithValue("@color", note.getColor());
comm.Parameters.AddWithValue("@orientation", note.getSvi().Orientation);
comm.Parameters.AddWithValue("@height", note.getSvi().ActualHeight);
comm.Parameters.AddWithValue("@width", note.getSvi().ActualWidth);
comm.Parameters.AddWithValue("@author", note.getAuthor());
try
{
conn.Open();
comm.ExecuteNonQuery();
comm.Parameters.Clear();
}
catch (Exception e) { Microsoft.Surface.UserNotifications.RequestNotification("Database error", "Could not write to the database:" + e.Message); }
finally
{
if (conn != null) { conn.Close(); }
listLoaded = false;
}
}
}
}
上面的方法确实更新了表中的行,但是对于查询产生的所有行都有一个值。
作为一种解决方案,我想先读取音符id然后迭代(i ++),但考虑到某些音符(表中的行表示)可能会被删除,id不一定会跟随连续的编号。
另一种解决方案是在数据库中查询给定会话(sid)的所有行(注释),并将其id存储在数组中,并更新可在数组中找到其ID的注释。
您知道其他任何更优化的解决方案吗?或者你认为我应该使用数组来存储要更新的行的id并应用查询。
谢谢!
答案 0 :(得分:0)
我们似乎已经在问题的评论中解决了这个问题,但只是为了清楚答案(希望能给你一些接受),这里有一个总结:
创建注释对象时,从数据库中选择构成这些注释的数据。除了选择外向数据(如音符颜色和内容)之外,我们还选择每个音符的主键并将其存储为音符对象的属性。
现在,更新注释对象时,可以将其id包含在相应更新语句的where子句中,因此只更新与修改后的注释对应的一行。
很高兴我可以提供一些“启蒙” - 就像你说的那样。