从数据表中删除行,然后不更新数据库

时间:2014-10-21 12:01:42

标签: database dataset sql-server-ce

使用以下语法从数据表中删除行:

Dim expression As String = "FULLTAG = 'ITEMTAG'"
Dim row() As DataRow = MYDataSet.Tables("MYTABLE").Select(expression)
Dim row2 As DataRow = row(0)
row2.Delete()
IWDataSet.Tables("MYTABLE").AcceptChanges()

然后尝试使用以下内容更新相应的数据库文件(.sdf):

Dim MYAdapter As New SqlCeDataAdapter("SELECT * FROM MYTABLE", ConnStr)
SqlCommBuilder.DataAdapter = MYAdapter
MYAdapter.UpdateCommand = SqlCommBuilder.GetUpdateCommand
MYAdapter.Update(MYDataSet, "MYTABLE")
IWDataSet.AcceptChanges()

相应的数据库(.sdf)没有更新,应该删除的行仍然存在于数据库中。

一些建议?

三江源

1 个答案:

答案 0 :(得分:0)

好的,我自己解决了问题。

错误发生在:

IWDataSet.Tables("MYTABLE").AcceptChanges()

方法AcceptChanges()在删除它们之后以永久方式从表中删除行,因此它等效于执行Remove()方法。在更新数据库(.sdf文件)时,以前删除的行不再可用于DataAdapter以从.sdf文件中删除。

以下是正确的代码:

删除行:

IWDataSet.Tables("[MYTABLE]").Rows.Find(MYKEY).Delete()

更新数据库(.sdf文件):

Dim MYAdapter As New SqlCeDataAdapter("SELECT * FROM MYTABLE", ConnStr)
SqlCommBuilder.DataAdapter = MYAdapter
MYAdapter.UpdateCommand = SqlCommBuilder.GetUpdateCommand
MYAdapter.InsertCommand = SqlCommBuilder.GetInsertCommand
MYAdapter.DeleteCommand = SqlCommBuilder.GetDeleteCommand
MYAdapter.Update(MYDataSet, "MYTABLE")
IWDataSet.AcceptChanges()