【问题标题】:Datatable insert trigger数据表插入触发器
【发布时间】:2016-02-26 14:37:31
【问题描述】:

我想在数据集表上实现 sql 插入触发器。

我的应用有两个数据集表:

-- Table: Artikli -- IDB - int,autoincrement Sifra - int, primary key Naziv - string Cena - double PS - string

-- Table: PodArtikli -- IDB - int,autoincrement,primary key Sifra - int Naziv - string Cena - double Kolicina - int Ukupno - computed column (Cena*Kolicina) Pakovanje - double Jed.Mere - string PLU - string, unique Cena_Po_Meri - computed column (1000/Pakovanje * Cena)

这些表通过外键约束关联,其中父表为Artikli,子表为PodArtikli,列Sifra。 我希望,当将新行添加到Artikli 时,自动在PodArtikli 表中添加新行,Sifra,NazivCena 值来自Artikli 表中添加的行。

数据集表中的数据显示在 DataGridView 中。 在按钮btnizmene 的点击事件上,我有以下代码:

Dim novirow As DataRow = dspetrovac.Artikli.NewRow
novirow("Sifra") = grdpodaci.Item(1, grdpodaci.CurrentRow.Index).Value
novirow("Naziv") = grdpodaci.Item(2, grdpodaci.CurrentRow.Index).Value
novirow("Cena") = grdpodaci.Item(3, grdpodaci.CurrentRow.Index).Value
novirow("PS") = grdpodaci.Item(4, grdpodaci.CurrentRow.Index).Value

【问题讨论】:

  • 触发器通常在数据库中实现,尽管 DataTable 确实有一些事件。如果 DGV 绑定到数据源,则不必手动将数据穿梭到 newRow 项中
  • 我也尝试过 TableNewRow 事件,但没有。

标签: vb.net ado


【解决方案1】:

您无法在 .NET DataTable 中编写触发器,但您可以使用 DataTable 事件实现类似的功能。例如,您可以采取RowChanging事件并采取更改行,查看是否添加了行,然后使用该行中的数据将新行插入到子表中

Private Sub Row_Changing(ByVal sender As Object, ByVal e As DataRowChangeEventArgs)
    If e.Action = DataRowAction.Add Then 
        Dim newChild as DataRow = childTable.NewRow()
        ' Get new row fr here and insert values 
        newChild("field") = e.Row("field")
        . . . . . . . 
        childTable.Rows.Add(newChild)
    End If
 End Sub

【讨论】:

  • 感谢这个想法。而不是 Row_Changing 我使用 Row_Changed 因为在 Row_Changing 事件中尚未实际添加行,并且引发异常 InvalidConstraintException 表示子表中具有列“Sifra”值的行在父表中不存在。非常感谢。
  • @Gruja82 这很好。这正是我的尝试——引导你走向正确的方向。 rowchangedrowChanging - 只是技术性,您需要根据您的软件构建和执行流程进行锻炼。享受吧。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-20
相关资源
最近更新 更多