vb.net 类型化数据集级联更新

vb.net typed dataset cascade update

提问人:Roberto Hernandez 提问时间:10/20/2023 最后编辑:marc_sRoberto Hernandez 更新时间:10/20/2023 访问量:40

问:

我预计 vb.net 类型化数据集中会出现并发错误,并联更新,我将重新创建重新创建错误所需的所有代码。

首先,在 SQL Server 中创建表和关系:

-- master table
CREATE TABLE Curvas
(
    Desarrollo INT, 
    Prueba VARCHAR(15), 
    PRIMARY KEY (Desarrollo, Prueba) 
);

-- detail table
CREATE TABLE CurvaDetalle
(
    Desarrollo INT, 
    Prueba VARCHAR(15), 
    Segundo INT, 
    Temperatura DECIMAL,  
    PRIMARY KEY (Desarrollo, Prueba, Segundo)
);

-- add the foreign key for the relation master-detail, with the cascade delete and cascade update.
ALTER TABLE CurvaDetalle
    ADD CONSTRAINT FK_CurvaDetalle_Curvas
        FOREIGN KEY (Desarrollo, Prueba) REFERENCES Curvas (Desarrollo, Prueba)
            ON DELETE CASCADE
            ON UPDATE CASCADE;

-- Insert example values
INSERT Curvas Values (1, 'Uno')
INSERT Curvas Values (2, 'Dos')
Insert CurvaDetalle Values (1, 'Uno', 1, 1)
Insert CurvaDetalle Values (1, 'Uno', 2, 10)
Insert CurvaDetalle Values (2, 'Dos', 1, 2)
Insert CurvaDetalle Values (2, 'Dos', 2, 20)

现在,在 Visual Basic.Net 中使用之前创建的 2 个表创建类型化数据集,并将级联更新和级联删除放在关系中。

Typed DataSet

在使用 VB.NET 的 Winforms 中,代码为:

Imports ErrorConcurrencia.DataSet1TableAdapters
Public Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim ds As New DataSet1
        Dim adpCurva As New CurvasTableAdapter
        Dim adpCurvaDetalle As New CurvaDetalleTableAdapter
        Dim TAM As New TableAdapterManager
        TAM.CurvasTableAdapter = adpCurva
        TAM.CurvaDetalleTableAdapter = adpCurvaDetalle
        adpCurva.Fill(ds.Curvas)
        adpCurvaDetalle.Fill(ds.CurvaDetalle)

        Dim row As DataSet1.CurvasRow = ds.Curvas.Rows(0)
        row.Prueba = "Modificada"
        TAM.UpdateAll(ds)
    End Sub
End Class

TAM 的最后一行正在生成错误:updateAllTableAdapterManager

Infracción de simultaneidad: UpdateCommand afectó a 0 de los 1 registros esperados.

并发冲突:UpdateCommand 影响了 1 条预期记录中的 0 条。

我认为主表的第一次更新会更新数据库中的详细信息表,因为 SQL Sever 级联更新,然后 vb.net 尝试更新详细信息表时,发现 SQL Server 更改了详细信息表并给出并发错误。

但我不知道如何绕过这种行为,并允许数据源中的级联更新。

sql-server vb.net 数据集 表适配器

评论

0赞 nbk 10/20/2023
tableAdapter 应仅链接一个表
0赞 Roberto Hernandez 10/20/2023
TableAdapterManager 类可确保根据数据库中定义的外键约束以正确的顺序进行更新。使用数据绑定控件时,数据绑定体系结构会创建一个名为 tableAdapterManager 的 TableAdapterManager 类的成员变量。

答: 暂无答案