我使用 Sqlite v1.0.79 和 vs2010 创建了一个简单的 winform 应用程序。
我有一张客户表,想使用 SQLiteDataAdapter 轻松插入、更新和删除记录。所以我不需要输入整个插入、更新和删除语句。
所以我有一个带有静态加载函数的 Customer 类,它返回一个数据集。
private static SQLiteDataAdapter _Adapter;
internal static DataSet Load(long id)
{
var q = "SELECT * FROM Customer WHERE id = {0}".FormatInvariant(id);
var cmd = new SQLiteCommand();
cmd.Connection = [_Connection];
cmd.CommandType = CommandType.Text;
cmd.CommandTimeout = 10;
cmd.CommandText = commandText;
return cmd; _Adapter = new SQLiteDataAdapter();
_Adapter.SelectCommand = cmd;
var ds = new DataSet();
_Adapter.Fill(ds, "Customer");
if (id == 0)
{
ds.AddRow(ds.NewRow());
}
var b = new SQLiteCommandBuilder(_Adapter);
_Adapter.AcceptChangesDuringUpdate = true;
_Adapter.InsertCommand = b.GetInsertCommand();
_Adapter.UpdateCommand = b.GetUpdateCommand();
_Adapter.DeleteCommand = b.GetDeleteCommand();
// Commented out code for note A:
////ds.SetRowValue("lastname", "blaat44");
////_Adapter.Update(ds, "Customer");
return ds;
}
调用 Load 方法后,DataSet 将用于 windows 窗体上的绑定。在一些更改之后,调用 Save 方法,其中应该保存更改。
internal static void Save(DataSet data)
{
//// data.AcceptChanges();
_Adapter.Update(data, "Customer");
}
但是更新后,数据库没有更新任何东西。我错过了什么?我已经在更新之前尝试了 data.AcceptChanges ,但没有任何效果。
顺便提一句。保存方法中的数据集确实具有“正确”值,但更新或插入不起作用....
奇怪的是,如果我在 Load 方法中更改数据集中的一个字段(上面示例中注释 A 处的注释掉的代码),则数据将正确保存。