Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server触发器没有';从ASP.NET网页插入记录时不会激发_Asp.net_Sql Server_Triggers - Fatal编程技术网

SQL Server触发器没有';从ASP.NET网页插入记录时不会激发

SQL Server触发器没有';从ASP.NET网页插入记录时不会激发,asp.net,sql-server,triggers,Asp.net,Sql Server,Triggers,我有个棘手的问题。我正在用ASP.NET开发一个web应用程序,数据库是SQL Server Express 2005。我编写了一个触发器,在插入或更新记录时更新另一个表的列值 这两张桌子是空的 InvtVendorInvoices(触发器在此表中,触发器名称为Onater_VendorInvoices) InvtMaster(此表的冒号“invtAmtOthers”值从InvtVendor上的触发器更新) 当我从InvtVendorInvoices表中的SQL Server Managemen

我有个棘手的问题。我正在用ASP.NET开发一个web应用程序,数据库是SQL Server Express 2005。我编写了一个触发器,在插入或更新记录时更新另一个表的列值

这两张桌子是空的

  • InvtVendorInvoices(触发器在此表中,触发器名称为Onater_VendorInvoices)

  • InvtMaster(此表的冒号“invtAmtOthers”值从InvtVendor上的触发器更新)

  • 当我从InvtVendorInvoices表中的SQL Server Management Studio Express插入或更新记录时,InvtMaster表中的“invtAmtOthers”列值正在成功更新。但是,当我从.aspx网页插入或更新记录时,触发器不会触发。有趣的是,尝试从网页插入的记录在InvtVendorInvoices表中被插入或更新,但触发器没有触发,InvtMaster表中的“invtAmtOther”列保持不变

    我在互联网上做了很多搜索,但找不到解决方案

    请帮我摆脱困境

    我们将非常感谢您的帮助

    我拥有的数据库表是…

    USE [Stone]
    GO
    /****** Object:  Table [dbo].[InvtMaster]    Script Date: 12/10/2009 22:19:18 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[InvtMaster](
     [invtID] [int] IDENTITY(1,1) NOT NULL,
     [invtDate] [datetime] NULL,
     [invtSupID] [int] NULL,
     [invtRefNo] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
     [invtRefDate] [datetime] NULL,
     [invtPOID] [int] NULL,
     [invtCurID] [int] NULL,
     [invtPayTermsID] [int] NULL,
     [invtLocationID] [int] NULL,
     [invtNotesPrinted] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
     [invtNotesInternal] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
     [invtAmtMaterial] [money] NULL CONSTRAINT [DF_MaterialInventoryMaster_invtAmtTotal]  DEFAULT ((0)),
     [invtAmtFreight] [money] NULL,
     [invtAmtOthers] [money] NULL CONSTRAINT [DF_MaterialInventoryMaster_invtAmtOthers]  DEFAULT ((0)),
     [invtStatusID] [int] NULL CONSTRAINT [DF_MaterialInventoryMaster_invtStatusID]  DEFAULT ((0)),
     [invtWflStatusID] [int] NULL CONSTRAINT [DF_MaterialInventoryMaster_invtWflStatusID]  DEFAULT ((0)),
     [invtOwnerID] [int] NULL,
     CONSTRAINT [PK_InvtMaster] PRIMARY KEY CLUSTERED 
    (
     [invtID] ASC
    )WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    
    
    USE [Stone]
    GO
    /****** Object:  Table [dbo].[InvtMaster]    Script Date: 12/10/2009 22:23:36 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[InvtMaster](
     [invtID] [int] IDENTITY(1,1) NOT NULL,
     [invtDate] [datetime] NULL,
     [invtSupID] [int] NULL,
     [invtRefNo] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
     [invtRefDate] [datetime] NULL,
     [invtPOID] [int] NULL,
     [invtCurID] [int] NULL,
     [invtPayTermsID] [int] NULL,
     [invtLocationID] [int] NULL,
     [invtNotesPrinted] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
     [invtNotesInternal] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
     [invtAmtMaterial] [money] NULL CONSTRAINT [DF_MaterialInventoryMaster_invtAmtTotal]  DEFAULT ((0)),
     [invtAmtFreight] [money] NULL,
     [invtAmtOthers] [money] NULL CONSTRAINT [DF_MaterialInventoryMaster_invtAmtOthers]  DEFAULT ((0)),
     [invtStatusID] [int] NULL CONSTRAINT [DF_MaterialInventoryMaster_invtStatusID]  DEFAULT ((0)),
     [invtWflStatusID] [int] NULL CONSTRAINT [DF_MaterialInventoryMaster_invtWflStatusID]  DEFAULT ((0)),
     [invtOwnerID] [int] NULL,
     CONSTRAINT [PK_InvtMaster] PRIMARY KEY CLUSTERED 
    (
     [invtID] ASC
    )WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    
    USE [Stone]
    GO
    /****** Object:  Trigger [dbo].[OnAlter_VendorInvoice]    Script Date: 12/10/2009 22:25:38 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:  Farooq
    -- Create date: 10-Dec-09
    -- Description: When the Inventory Invoice Is Created, the total amout for all the additional cost is calculated and updated in the invtAmtOthers field in the InvtMaster Table
    -- =============================================
    CREATE TRIGGER .[dbo].[OnAlter_VendorInvoice] 
       ON  .[dbo].[InvtVendorInvoices] 
       AFTER INSERT,UPDATE
    AS 
    BEGIN
     -- SET NOCOUNT ON added to prevent extra result sets from
     -- interfering with SELECT statements.
     SET NOCOUNT ON;
    
        -- Insert statements for trigger here
     declare @invtID int;
     declare @value float;
    
     select @invtID=invInvtID from inserted;
    
     --The ISNULL is used to convert the NULL returned value to ZERO
     select @value=ISNULL(sum(invAmtTotal),0) from InvtVendorInvoices where invInvtID=@invtID;
     --select @value=sum(invAmtTotal) from InvtVendorInvoices where invInvtID=@invtID;
    
     update InvtMaster set invtAmtOthers=@value where invtID=@invtID;
    
    END
    
    触发器我有…

    USE [Stone]
    GO
    /****** Object:  Table [dbo].[InvtMaster]    Script Date: 12/10/2009 22:19:18 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[InvtMaster](
     [invtID] [int] IDENTITY(1,1) NOT NULL,
     [invtDate] [datetime] NULL,
     [invtSupID] [int] NULL,
     [invtRefNo] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
     [invtRefDate] [datetime] NULL,
     [invtPOID] [int] NULL,
     [invtCurID] [int] NULL,
     [invtPayTermsID] [int] NULL,
     [invtLocationID] [int] NULL,
     [invtNotesPrinted] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
     [invtNotesInternal] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
     [invtAmtMaterial] [money] NULL CONSTRAINT [DF_MaterialInventoryMaster_invtAmtTotal]  DEFAULT ((0)),
     [invtAmtFreight] [money] NULL,
     [invtAmtOthers] [money] NULL CONSTRAINT [DF_MaterialInventoryMaster_invtAmtOthers]  DEFAULT ((0)),
     [invtStatusID] [int] NULL CONSTRAINT [DF_MaterialInventoryMaster_invtStatusID]  DEFAULT ((0)),
     [invtWflStatusID] [int] NULL CONSTRAINT [DF_MaterialInventoryMaster_invtWflStatusID]  DEFAULT ((0)),
     [invtOwnerID] [int] NULL,
     CONSTRAINT [PK_InvtMaster] PRIMARY KEY CLUSTERED 
    (
     [invtID] ASC
    )WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    
    
    USE [Stone]
    GO
    /****** Object:  Table [dbo].[InvtMaster]    Script Date: 12/10/2009 22:23:36 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[InvtMaster](
     [invtID] [int] IDENTITY(1,1) NOT NULL,
     [invtDate] [datetime] NULL,
     [invtSupID] [int] NULL,
     [invtRefNo] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
     [invtRefDate] [datetime] NULL,
     [invtPOID] [int] NULL,
     [invtCurID] [int] NULL,
     [invtPayTermsID] [int] NULL,
     [invtLocationID] [int] NULL,
     [invtNotesPrinted] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
     [invtNotesInternal] [ntext] COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
     [invtAmtMaterial] [money] NULL CONSTRAINT [DF_MaterialInventoryMaster_invtAmtTotal]  DEFAULT ((0)),
     [invtAmtFreight] [money] NULL,
     [invtAmtOthers] [money] NULL CONSTRAINT [DF_MaterialInventoryMaster_invtAmtOthers]  DEFAULT ((0)),
     [invtStatusID] [int] NULL CONSTRAINT [DF_MaterialInventoryMaster_invtStatusID]  DEFAULT ((0)),
     [invtWflStatusID] [int] NULL CONSTRAINT [DF_MaterialInventoryMaster_invtWflStatusID]  DEFAULT ((0)),
     [invtOwnerID] [int] NULL,
     CONSTRAINT [PK_InvtMaster] PRIMARY KEY CLUSTERED 
    (
     [invtID] ASC
    )WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    
    USE [Stone]
    GO
    /****** Object:  Trigger [dbo].[OnAlter_VendorInvoice]    Script Date: 12/10/2009 22:25:38 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    -- =============================================
    -- Author:  Farooq
    -- Create date: 10-Dec-09
    -- Description: When the Inventory Invoice Is Created, the total amout for all the additional cost is calculated and updated in the invtAmtOthers field in the InvtMaster Table
    -- =============================================
    CREATE TRIGGER .[dbo].[OnAlter_VendorInvoice] 
       ON  .[dbo].[InvtVendorInvoices] 
       AFTER INSERT,UPDATE
    AS 
    BEGIN
     -- SET NOCOUNT ON added to prevent extra result sets from
     -- interfering with SELECT statements.
     SET NOCOUNT ON;
    
        -- Insert statements for trigger here
     declare @invtID int;
     declare @value float;
    
     select @invtID=invInvtID from inserted;
    
     --The ISNULL is used to convert the NULL returned value to ZERO
     select @value=ISNULL(sum(invAmtTotal),0) from InvtVendorInvoices where invInvtID=@invtID;
     --select @value=sum(invAmtTotal) from InvtVendorInvoices where invInvtID=@invtID;
    
     update InvtMaster set invtAmtOthers=@value where invtID=@invtID;
    
    END
    
    ASPX网页在按钮点击事件上有以下插入记录代码

    Dim cmd As New SqlCommand
        cmd.CommandText = "INSERT INTO InvtVendorInvoices (invSupID,invInvtID,invRefNo,invDesc,invDate,invDateDue,invAmtTotal,invNotesInternal) VALUES (@invSupID,@invInvtID,@invRefNo,@invDesc,@invDate,@invDateDue,@invAmtTotal,@invNotesInternal)"
        cmd.Connection = DataHelper.GetConnection
    
        cmd.Parameters.Add("@invSupID", SqlDbType.Int).Value = e.NewValues("invSupID")
        cmd.Parameters.Add("@invInvtID", SqlDbType.Int).Value = lblInvtID.Text
        cmd.Parameters.Add("@invRefNo", SqlDbType.NVarChar).Value = e.NewValues("invRefNo")
        cmd.Parameters.Add("@invDesc", SqlDbType.NText).Value = e.NewValues("invDesc")
        cmd.Parameters.Add("@invDate", SqlDbType.DateTime).Value = e.NewValues("invDate")
        cmd.Parameters.Add("@invDateDue", SqlDbType.DateTime).Value = e.NewValues("invDateDue")
        cmd.Parameters.Add("@invAmtTotal", SqlDbType.Money).Value = e.NewValues("invAmtTotal")
        cmd.Parameters.Add("@invNotesInternal", SqlDbType.NText).Value = e.NewValues("invNotesInternal")
    
        cmd.Connection.Open()
        cmd.ExecuteNonQuery()
    

    你怎么知道扳机没响?也许触发器确实触发了,但是更新没有找到任何满足条件的记录,其中invtID=@invtID?可能是您从ManagementStudio尝试的测试值在InvtMaster中有相应的记录,但当ASP页面运行代码时,没有记录

    我已经解决了这个问题。。。实际上,在父网页中有一个回调面板,它也在更新invtAmtOthers Column。在插入/更新记录后正在执行回调

    您好,我已经用InvtMaster中的一条记录测试了我的逻辑,当我在InvtVendorInvoices表中插入一条记录时,我试图通过该记录的invtID。毫无疑问,有一个错误的invtID。此外,如果我们正在更新现有记录,则将在正在更新的表“InvtVendorInvoices”中正确更新该值,但应在InvtMaster表中更新该值的触发器根本不会更新。但是,如果我从SQL Management Studio更新InvtVendorInvoices记录,则其工作正常。我可以看到InvtMaster表中的记录正确更新。为了禁用触发器执行,会话必须非常长。如果在触发器中添加RAISERROR(),则在ASP调用中是否会抛出该错误?如果是,您有证据表明触发器已执行,但更新未完成。嗨,雷姆斯,谢谢您的宝贵建议。我已经在触发器中添加了RAISEERROR(),但是网页逻辑执行时没有抛出任何异常。。。请建议…要禁用触发器,必须明确使用禁用触发器,请参阅。确保您没有犯任何错误,比如更新不同的表(连接字符串指向不同的db)或类似的错误。