Visual Studio TableAdapter数据已更改,但属性“has Changes”仍为“false”,因此udate不执行任何操作

pnwntuvh  于 2023-01-17  发布在  其他
关注(0)|答案(1)|浏览(128)

这主要是在标题...我使用VB(显然,见下文),但我是一个完全初学者与视觉工作室。
下面是我正在使用的测试代码(这是一个简单的测试按钮,我设计用来测试其他代码中的问题):

Private Sub Test_Click(sender As Object, e As EventArgs) Handles Test.Click
        Dim FDBdataset As New FDBDataSet()
        Dim FDBTableAdapter As New FDBDataSetTableAdapters.T_PicturesTableAdapter
        For Each row As DataRow In FDBTableAdapter.GetData()
            row.BeginEdit()
            If row("id").ToString = 58672.ToString Then
                row.BeginEdit()
                Console.Write("Previous Value = " & row("ImgFileName").ToString)
                row("ImgFileName") = "Tagada"
                row.EndEdit()
                Console.WriteLine(", Current Row Value = " & row("ImgFileName").ToString & " - HasChanges : " & FDBdataset.HasChanges())
            End If
        Next
        FDBTableAdapter.Update(FDBdataset)

控制台中的输出为:

Previous Value = Aphidecta_obliterata_58672, Current Row Value = Tagada - HasChanges : False

我不明白什么是错的,以及如何纠正它...我会非常感谢这里的一些帮助!
TableAdapter似乎设置正确,我可以从中读取,解析行;显示字段值等...更新数据源设计器正确设置的方法报告。代码运行无误,但不影响DB内容。

8ulbf1ek

8ulbf1ek1#

为什么您会认为FDBdataset有任何更改?您在哪里对它进行了更改?您有以下代码:

For Each row As DataRow In FDBTableAdapter.GetData()

GetData返回一个新的DataTable,所以你对DataTable的修改完全独立于FDBdataset,使用其中一个,但不要同时使用。
根据上面的代码,您不需要DataSet,只需使用GetData返回的DataTable即可:

Dim adapter As New FDBDataSetTableAdapters.T_PicturesTableAdapter
Dim table = FDBTableAdapter.GetData()

For Each row In table
    If row.id = 58672 Then
        row.ImgFileName = "Tagada"
    End If
Next

adapter.Update(table)

注意我也整理了你的代码,如果你要使用一个类型化的DataSet,那就使用它。
如果出于某种原因确实需要DataSet,请对其进行更改,而不是更改不相关的DataTable

Dim data As New FDBDataSet
Dim adapter As New FDBDataSetTableAdapters.T_PicturesTableAdapter

adapter.Fill(data)

For Each row In data.T_Pictures
    If row.id = 58672 Then
        row.ImgFileName = "Tagada"
    End If
Next

adapter.Update(data)

第二个代码片段可能需要一些调整,但我认为它应该工作。
所以,这个故事的寓意是Fill方法填充了一个现有的DataTable,它可以是DataSet的一部分,但不是必须的,而GetData方法创建了一个新的DataTable,填充它并返回它,这个新的DataTable不是任何DataSet的一部分。

相关问题