public bool UpdateTable(DataTable srcTable, string tableName)
{ bool isok = false; try { foreach (DataRow myRow in srcTable.Rows) { foreach (DataColumn myColumn in srcTable.Columns) { Console.Write(myRow[myColumn] + "|" + myRow[myColumn].GetType() + "|"); } Console.WriteLine(); } command.CommandText = "SELECT * FROM " + tableName; SQLiteDataAdapter oda = new SQLiteDataAdapter(command); SQLiteCommandBuilder ocb = new SQLiteCommandBuilder(oda); oda.SelectCommand = command; oda.InsertCommand = ocb.GetInsertCommand(); oda.DeleteCommand = ocb.GetDeleteCommand(); oda.UpdateCommand = ocb.GetUpdateCommand(); oda.Update(srcTable); isok = true; } catch (Exception ex) {} return isok; }上面的这段代码用一个datagridview读取数据然后修改,然后更新,能够成功。
但是自定义一个datatable,然后想用它来将datatable中的数据写入一个表,就会出问题。
这两天同样在处理这个问题,搞了半天,最终发现了,第二种情况不能更新的原因:
oda.Update(srcTable); 问题就在这个方法中ado.net中的DataAdapter 的Update(datatable)方法都是一种处理流程,获取datatable中的变化记录(增删改)然后分别对增、删、改的每一条记录进行插入、删除、修改。当datatable不是从数据源表获取而来,而是自定义的(从其他数据源获取,或者干脆手动建的,从空的datagridview修改后得到的),就没有上面的相对的删除和修改的概念了(也许有吧,但是这个增加、删除、修改中有些是不被update接受的)。update设计的时候就是从最优的角度出发的,只更新发生变化的部分。对自定义的datatable,update把它当作你要写入的数据源中读出的数据表来处理,使用的时候就会出 无更新,只更新插入的,更新失败等 问题。