Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.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触发器在使用C#时未触发?_C#_Sql_Visual Studio - Fatal编程技术网

Sql触发器在使用C#时未触发?

Sql触发器在使用C#时未触发?,c#,sql,visual-studio,C#,Sql,Visual Studio,我正在开发库存管理系统。我想在插入一个表之后更新两个表,所以我使用SQL after insert trigger完成了更新,但是这个触发器不是从C#触发的,C#是我应用程序的前端。我不知道如何从C#触发。有人能帮我吗,因为我必须来提交这个项目星期天? 这是我的SQL触发器 CREATE TRIGGER tbl_Sales_ForInsert ON SALES FOR INSERT AS BEGIN DECLARE @ITEMMODEL varchar(100) SELE

我正在开发库存管理系统。我想在插入一个表之后更新两个表,所以我使用SQL after insert trigger完成了更新,但是这个触发器不是从C#触发的,C#是我应用程序的前端。我不知道如何从C#触发。有人能帮我吗,因为我必须来提交这个项目星期天? 这是我的SQL触发器

CREATE TRIGGER tbl_Sales_ForInsert
ON SALES 
FOR INSERT
AS
BEGIN



  DECLARE @ITEMMODEL varchar(100)
      SELECT @ITEMMODEL = @ITEMMODEL FROM inserted
      update SALES set PROFIT=TOTAL_PRICE - (SELECT QUANTITY FROM SALES WHERE ITEM_MODEL=@ITEMMODEL) * (SELECT RATE FROM ITEM_DETAILS WHERE ITEM_MODEL=@ITEMMODEL) WHERE ITEM_MODEL=@ITEMMODEL
      UPDATE ITEM_DETAILS SET QUANTITY=QUANTITY-(SELECT QUANTITY FROM SALES WHERE ITEM_MODEL=@ITEMMODEL) WHERE ITEM_MODEL=@ITEMMODEL
      UPDATE ITEM_DETAILS SET AMOUNT = AMOUNT - (SELECT RATE FROM ITEM_DETAILS WHERE ITEM_MODEL=@ITEMMODEL) * (SELECT QUANTITY FROM SALES WHERE ITEM_MODEL=@ITEMMODEL) where ITEM_MODEL=@ITEMMODEL
    END

不管客户端是什么,触发器都应该触发。您应该尝试使用Sql分析器分析正在执行的Sql。另外,尝试直接在ManagementStudio中执行TSQL代码,看看会发生什么。

一种方法是首先在SQL数据库中测试触发器。使用脚本创建触发器(看起来是正确的),然后向Sales表中添加一些数据,并查看Sales和item_details表中的数据是否已更新。一旦您知道触发器工作正常且填充正确,就可以调用C#将新记录插入到您的销售表中。在Sales表中插入新行后,触发器将自动触发

问题是SELECT语句中的@ITEMMODEL。我写道:

 SELECT @ITEMMODEL = ITEM_MODEL FROM inserted

现在工作正常。

如果您在服务器中插入新记录,该触发器也会正常触发?如果您手动插入,我会检查您的触发器是否触发。不要试图同时尝试所有事情。隔离问题,然后继续。可能会影响其他人的是,出于性能原因,默认情况下BulkCopy不会触发触发器。