Sqlite v1.0.79 と vs2010 を使用して、単純な winform アプリケーションを作成します。
顧客テーブルがあり、SQLiteDataAdapter を使用してレコードを簡単に挿入、更新、および削除したいと考えています。したがって、insert、update、および delete ステートメント全体を入力する必要はありません。
だから、データセットを返す静的ロード関数を持つ 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 のコメントアウトされたコード)、データが正しく保存されます。