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