0

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 のコメントアウトされたコード)、データが正しく保存されます。

4

1 に答える 1

0

私は専門家ではなく、sqlite などの基本的な理解がありますが、データセットを保存機能に渡しているため、アダプターが元のデータセットのコピーを使用している可能性があります。アダプターが元のデータセットにアクセスしているため、load メソッドで機能するのはなぜですか?

繰り返しますが、これはおそらく完全なせせらぎであり、理解できないかもしれませんが、教育を受けていない答えが正しい方向への非常に良いプッシュであることが時々わかりました

于 2012-12-27T23:35:10.840 に答える