以下方法(即函数)可以实现对表记录的删除操作
//删除新闻类别(连同其下的新闻及新闻评论一起删除)
public bool delete(category ca)
{
bool flag = false;
string sql = "delete from category where ";
SqlParameter[] paras = new SqlParameter[]{
new SqlParameter("@tid",ca.Id),
};
int res = sqlhelper.executenoquery(sql, paras);
if (res > 0)
{
flag = true;
}
return flag;
}
但如果有几个表相关联时,由于有外键记录,就会出错,如:
当想删除表:category中的记录时,如果表:news还有它的外键记录时就会出错,同样当想删除表:news中的记录时,如果表:commonte还有它的外键记录时也会出错。新闻类别对应许多新闻,新闻又对应许多新闻评论,要删除新闻类别得先删除其下对应的所有新闻,要删除新闻得先删除其下的所有新闻评论。那么如何解决这样的问题呢?方法好多,其中用触发器可以解决,如下图的触发器就可以解决:
如我们在文本框中输入要删除的category的id为11,在临时表里就能找出11
触发器的源码如下:
USE [xinwen]
GO
/****** 对象: Trigger [dbo].[trigcategorydel] 脚本日期: 05/26/2010 12:27:11 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- 作者:无声岁月
-- 创建日期: 2010年5月26日
-- 说明: 删除类别触发器
ALTER TRIGGER [dbo].[trigcategorydel]
ON [dbo].[category]
instead of DELETE
AS
BEGIN
declare @caid int
--查找要删除的ID
select @caid=id from deleted
--删除与之相关联的评论
delete commonte where newsid in(select id from news where )
--删除与之相关联的新闻
delete news where
--删除要删除的新闻类别
delete category where
END
有关触发器的建立不是很难,本空间里有过介绍,感兴趣的可以找来看看