更新表中每行的不同值(sqlite)

时间:2010-07-08 12:41:51

标签: c# sql sqlite

我有一个对象,比如一个音符,我想要保存在表格中的参数(内容,大小,宽度,高度等)。 有了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并应用查询。

谢谢!

1 个答案:

答案 0 :(得分:0)

我们似乎已经在问题的评论中解决了这个问题,但只是为了清楚答案(希望能给你一些接受),这里有一个总结:

创建注释对象时,从数据库中选择构成这些注释的数据。除了选择外向数据(如音符颜色和内容)之外,我们还选择每个音符的主键并将其存储为音符对象的属性。

现在,更新注释对象时,可以将其id包含在相应更新语句的where子句中,因此只更新与修改后的注释对应的一行。

很高兴我可以提供一些“启蒙” - 就像你说的那样。