обновить разные значения для каждой строки в таблице (sqlite) - PullRequest
0 голосов
/ 08 июля 2010

У меня есть объект, скажем, заметка, параметры которой я хочу сохранить в таблице (содержимое, размер, ширина, высота и т. Д.). При наличии строки 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;
                }
            }
        }
    }

Приведенный выше метод действительно обновляет строки в таблице, но с одним значением для всех строк, которые являются результатом запроса.

В качестве решения я подумал сначала прочитать идентификатор заметки, а затем выполнить итерацию (i ++), но, учитывая, что некоторые заметки (представленные в виде строк в таблице) могут быть удалены, идентификатор не обязательно будет следовать за последовательной нумерацией.

Другим решением было запросить в базе данных все строки (заметки) для данного сеанса (sid) и сохранить их идентификатор в массиве и обновить примечания, идентификатор которых можно найти в массиве.

Знаете ли вы о каком-либо другом, более оптимизированном решении? Или вы считаете, что я должен использовать массив для хранения идентификаторов строк, которые нужно обновить, и применить запрос.

Спасибо!

1 Ответ

0 голосов
/ 13 июля 2010

Похоже, мы решили эту проблему в комментариях к вопросу, но для ясности ответа (и, мы надеемся, дадим вам что-то принять), вот краткое изложение:

При создании объектов заметок данные, составляющиеэти заметки выбраны из базы данных.Помимо выбора внешних данных, таких как цвет и содержание заметки, мы также выбираем первичный ключ каждой заметки и сохраняем его как свойство объекта заметки.

Теперь, когда объект заметки обновляется,вы можете включить его идентификатор в предложение where для соответствующего оператора update и, следовательно, обновлять только одну строку, соответствующую измененной заметке.

Рад, что я мог бы дать некоторое «просветление» - как вы выразились.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...