我正在尝试实现CRUD功能以与本地SQLite数据库(名称空间Microsoft.Data.Sqlite)一起使用并遵循MVVM模式(John Shew’s Blog)。
我遇到一个问题,即更新功能无法对列表视图中新添加的项目起作用。添加到列表视图的任何新项目都需要重新加载,然后用户才能编辑其数据并在数据库中进行更改更新。之前加载到列表视图中的项目仍可以编辑,这些更改将反映在列表视图和数据库中。
我研究过使用async / await,Task Async Programming,切换所有List<>到ObservableCollections<>,仍然无效。我查看了很多帖子,现在来到stackoverflow寻求帮助。
我不确定要发布什么代码,因为我只想提供适用于诊断的内容,而不是产生太多的噪音/杂乱。请告诉我,我会提供。
public static void InitializeDatabase()
{
using (SqliteConnection db =
new SqliteConnection("Filename=TestDB.db"))
{
db.Open();
string tableCommand = "CREATE TABLE IF NOT " +
"EXISTS Student (Id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"Name NVARCHAR(2048) NULL," +
"Email NVARCHAR(2048) NULL)";
SqliteCommand createTable = new SqliteCommand(tableCommand, db);
createTable.ExecuteReader();
db.Close();
}
}
public static void Write(Student student)
{
using (SqliteConnection db = new SqliteConnection("Filename=TestDB.db"))
{
db.Open();
SqliteCommand insertCommand = new SqliteCommand
{
Connection = db,
CommandText = "INSERT INTO Student VALUES (NULL, @Name, @Email)"
};
insertCommand.Parameters.AddWithValue("@Name", student.Name = "");
insertCommand.Parameters.AddWithValue("@Email", student.Email = "");
insertCommand.ExecuteReader();
db.Close();
}
}
public static void Update(Student student)
{
using (SqliteConnection db = new SqliteConnection("Filename=TestDB.db"))
{
db.Open();
SqliteCommand insertCommand = new SqliteCommand
{
Connection = db,
CommandText = "UPDATE Student SET Name=@Name, Email=@Email WHERE Id=@Id";
};
insertCommand.Parameters.AddWithValue("@Name", ((object)student.Name) ?? DBNull.Value);
insertCommand.Parameters.AddWithValue("@Email", ((object)student.Email) ?? DBNull.Value);
insertCommand.Parameters.AddWithValue("@Id", ((object)student.Id) ?? DBNull.Value);
insertCommand.ExecuteNonQuery();
db.Close();
}
}