SQLite DataAdapter没有更新或插入

时间:2012-05-21 22:16:11

标签: sqlite dataadapter

我使用Sqlite v1.0.79和vs2010创建一个简单的winform应用程序。

我有一个customer表,并希望使用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中注释掉的代码),则数据将被正确保存。

1 个答案:

答案 0 :(得分:0)

我不是专家,对sqlite等有基本的了解,但问题可能是您将数据集传递给save函数,因此适配器正在使用原始数据集的副本。这就是为什么它适用于load方法,因为适配器正在访问原始数据集?

同样这可能是完全喋喋不休,我可能不理解,但我发现有时候未受过教育的答案是朝着正确方向的非常好的推动