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

作者:控件中国网   出处:控件中国网   2015-07-22 11:22:24   阅读:3

今天们将谈到的是ASP.NET运用动态构建语句实现高效批量删除,无论你选多少要删除的数据,只需调用试行一次。
 

AD: eDocEngine VCL - PDF控件 —正版、购买、下载、价格、销售、代理、授权、技术支持尽在控件中国网

 

 

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


 


 

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


 

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


 

在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、把构建的语句用参数传入,作为删除条件。


 

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


 

eDocEngine VCL - PDF控件 —正版、购买、下载、价格、销售、代理、授权、技术支持尽在控件中国网

 

Copyright© 2006-2015 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 渝ICP备12000264号 法律顾问:元炳律师事务所
客服软件
live chat