使用删除触发器删除gridview

时间:2012-08-18 08:53:09

标签: c# asp.net sql-server

我正在使用触发器概念,当删除表中的一行时,同一行将被插入到另一个表中。现在问题是我正在使用删除命令字段从网格视图中删除该行。当我删除行时,我无法获取已删除行的值,使其存储在另一个表中。该行已插入,但全部为空。

现在我需要知道如何将已删除行中的值复制到另一个表中以便插入。

尽快寻求帮助

谢谢。

这是触发器

这不是我的触发功能。

CREATE TRIGGER tgrfortrash ON [dbo].[Proj_details] 
AFTER DELETE
AS
    declare @proj_id varchar(10);
    declare @proj_name varchar(100);
    declare @front_end varchar(15);
    declare @back_end varchar(15);
    declare @proj_path varchar(100);

    select @proj_id=d.Proj_id from deleted d;   
    select @proj_name=d.Proj_name from deleted d;   
    select @front_end=d.Front_end from deleted d;
    select @back_end=d.Back_end from deleted d;

insert into Trash_details
(Proj_id,Proj_name,Front_end,Back_end,Proj_path) 
    values(@proj_id,@proj_name,@front_end,@back_end,@proj_path);

3 个答案:

答案 0 :(得分:1)

你可以在删除触发器时使魔术表起作用并获得整个删除的行

这是

的陈述
SELECT * FROM deleted -- this statement in trigger return you deleted row 

修改

为什么要为每个值使用变量,你可以像这样写

 INSERT INTO Trash_details(Proj_id,Proj_name,Front_end,Back_end,Proj_path) 
       Select Proj_id,Proj_name,Front_end,Back_end,Proj_path From deleted

不需要变量

答案 1 :(得分:0)

您的触发器应该是这样的吗?这可以帮助您多个用户尝试删除

CREATE TRIGGER tgrfortrash ON [dbo].[Proj_details] 
AFTER DELETE
AS
Begin Try
    Set NoCount ON
    Set Xact_Abort ON
    Begin Tran
       INSERT INTO Trash_details(Proj_id,Proj_name,Front_end,Back_end,Proj_path) 
       Select Proj_id,Proj_name,Front_end,Back_end,Proj_path From deleted
    Commit Tran
End Try
Begin Catch
    Rollback Tran
End Catch

答案 2 :(得分:0)

从datagidview中删除行时,将执行事件UserDeletingRow。 DataGridViewRowCancelEventArgs为您提供正在删除的行。您可以从那里获取值,将它们放在表格中。