您现在的位置: 365建站网 > 365文章 > 运用动态构建语句 ASP.NET中高效批量删除

运用动态构建语句 ASP.NET中高效批量删除

文章来源:365jz.com     点击数:177    更新时间:2010-12-28 22:40   参与评论

网站中的批量删除很常见,特别是对在gridview中做批量删除。我们一般的做法是循环到勾选的就调用过程直接删除。这样的话个人觉得效率不是很高,如果是上百上千的数据要删除,那就得调用试行上百次。其实我们可以运用动态构建删除语句进行高效批量删除,无论你选多少要删除的数据,只需调用试行一次。

底下写的存储过程删除语句与上图无关,上图是常见的在gridview中做批量删除。使用存储过程:

代码
-----------------------------------------------------------------------
/*

*作 者:lin sen
*功能说明:动态构建SQL语句之删除
*编写日期:2010年9月27日
*
*/
----------------------------------------------------------------------
drop procedure proc_DeleteMessage
go
create procedure proc_DeleteMessage
(
@condition varchar(500) --删除条件(多个)
)
as
begin
declare @sql varchar(200)
--动态构建删除语句
select @sql='Delete from MessageInfo where '+@condition
--试行语句
exec (@sql)
end
go

在SQL查询分析器上调用该过程:(传入的条件是唯一标识列名和所选中的值)

exec proc_DeleteMessage 'MessageID=240 or MessageID=241 or MessageID=242...'

在SQL调用看不太清楚,我们来看下Web中的前台调用与试行。

代码
//删除按钮单击事件
protected void LBtn_Del_Click(object sender, EventArgs e)
{
StringBuilder sb
= new StringBuilder();
for (int i = 0; i < GV_class.Rows.Count; i++)
{
CheckBox checkbox
= (CheckBox)GV_class.Rows[i].FindControl("checkbox");
if (checkbox.Checked == false)
{
lab_Note.Text
= "请选择要删除信息";
lab_Note.Style.Add(
"color", "red");
}
else
{
MessageModel.C_ID
= Int32.Parse(GV_class.Rows[i].Cells[3].Text.Trim());
//选中的唯一标识列值
sb.Append("MessageID=");
sb.Append(MessageModel.C_ID);
sb.Append(
" or ");
}
}
sb.Append(
"MessageID=null");
MessageModel.SQLSTR
= sb.ToString();//动态的条件语句传给实体
int j = DeleteClass(MessageModel);
//.....
}
/// <summary>
/// 删除信息
/// </summary>
/// <param name="MeModel"></param>
/// <returns></returns>
public int DeleteClass(MessageModel MeModel)
{
int rowsAffected;
SqlParameter[] parameter
= { new SqlParameter("@sqlstr", SqlDbType.Int) };
parameter[
0].Value = MeModel.SQLSTR;
DbHelperSQL.RunIntProcName(
"proc_DeleteMessage", out rowsAffected, parameter);
return rowsAffected;
}

在Web前台动态构建并调用过程时我们需要注意几点:

1、我们勾选的列一般都是主键唯一标识列,根据它进行删除。

2、如果你的主键是字符串不是整形,那么上面需要改动一下sb.Append("MessageID='");sb.Append(MessageModel.C_ID);

sb.Append("' or ");只是多个单引号

3、在循环完后注意加上sb.Append("MessageID=null");结束。个人认为主键不可能空的,所以这个条件排除。不加的动态语句后面多个个or;

但是千万别在条件中加 or 1=1;那样不管多少都成立,会被整个数据删除。

4、把构建的语句用参数传入,作为删除条件。

以上如有其他高效批量删除数据的方法,贴出来和大家一起讨论和分享。

如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛

发表评论 (177人查看0条评论)
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
昵称:
最新评论
------分隔线----------------------------

快速入口

· 365软件
· 杰创官网
· 建站工具
· 网站大全

其它栏目

· 建站教程
· 365学习

业务咨询

· 技术支持
· 服务时间:9:00-18:00
365建站网二维码

Powered by 365建站网 RSS地图 HTML地图

copyright © 2013-2024 版权所有 鄂ICP备17013400号