【问题标题】:Getting this error when I try to update my databse from a DevExpress GridView in VB Net当我尝试从 VB Net 中的 DevExpress GridView 更新数据库时出现此错误
【发布时间】:2021-03-02 15:02:30
【问题描述】:

错误状态:[dbo].[PrescriptionPamflet_modified] 触发器中的错误。触发器执行期间引发错误。批处理已中止,用户事务(如果有)已回滚。

我有以下 DevExpress 网格:

当我按下打印按钮时,它应该更新数据库值并打印报告。 当没有更新时一切正常。

  • 注意:我使用 LINQ 设置网格的数据源,inPatientID 是我用来确定我正在处理的患者的主要关键变量。 myDB 是我的数据上下文

  • 注意:网格的数据源来自BindingSourcePrescriptionItems

这是我调用来加载数据的代码:

Dim patientPrescriptions = From prescription In myDB.PrescriptionPamflets
                               Where prescription.PatientID = inPatientID
                               Select prescription

    BindingSourcePrescriptionItems.DataSource = patientPrescriptions

这是打印按钮的代码:

    BindingSourcePrescriptionItems.EndEdit()
    GridViewPerscriptionPamflet.PostEditor()

    Try
        myDB.SubmitChanges()
    Catch ex As Exception
        DevExpress.XtraEditors.XtraMessageBox.Show(ex.Message.ToString, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try



    Dim rpt As New XtraReportPrescriptionPamflet(inPatientID)
    rpt.ShowPreview()
    rpt.BringToFront()
  • 注意:只有PackSizeQuantity 列是可编辑的,因为您不能/不应该更新主键和外键值。 此外,PackSize 的数据类型是 decimalQuantity 的数据类型是 integer,在网格上以及 SQL Server 数据库本身也是如此。

任何帮助将不胜感激。我在网上找到的少数结果表明这是数据类型不匹配,但我的数据类型完全匹配。我不想使用 SQL 来更新数据库,因为我们公司正在转向使用 LINQ 来处理所有事情。

【问题讨论】:

  • 错误告诉你触发器有问题;我会从那里开始。
  • 你在使用 EF 吗?
  • @Larnu 是的,我最近了解了触发器,并注意到我的“CREATE TABLE”脚本存在问题。它导致有两个触发器。我把桌子放下了,现在一切都很好,谢谢。
  • 什么是 EF? @Alex.B

标签: vb.net linq devexpress sql-server-2017 devexpress-gridcontrol


【解决方案1】:

创建了双重触发器。我把它们都删了。删除表并再次创建它。修复了我的问题,此后一直没有。

【讨论】:

  • 如果这些触发器正在执行业务逻辑,那么该逻辑现在就丢失了。#
  • 请展开@Larnu。我对此很陌生
  • 您删除了表,因此删除了触发器。那些触发器现在不存在了......他们在那里是有原因的,不是吗?
  • @Larnu 哦,是的,我原来的“创建表”脚本创建了重复的触发器。但现在它们只被重新创建一次,一切都很好。
最近更新 更多