ASP.NET运用动态构建语句实现高效批量删除
创始人
2024-07-19 14:21:56
0

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

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

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

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

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

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

  1.  //删除按钮单击事件          
  2. protected void LBtn_Del_Click(object sender, EventArgs e)          
  3. {              
  4. StringBuilder sb = new StringBuilder();              
  5. for (int i = 0; i < GV_class.Rows.Count; i++)           
  6.  {                  
  7. CheckBox checkbox = (CheckBox)GV_class.Rows[i].FindControl("checkbox");                  
  8. if (checkbox.Checked == false)               
  9.  {                      
  10. lab_Note.Text = "请选择要删除信息";                   
  11.  lab_Note.Style.Add("color", "red");                 
  12.  }                  
  13. else                 
  14.  {                      
  15. MessageModel.C_ID = Int32.Parse(GV_class.Rows[i].Cells[3].Text.Trim());//选中的唯一标识列值                    
  16. sb.Append("MessageID=");                     
  17.  sb.Append(MessageModel.C_ID);                   
  18.  sb.Append(" or ");                 
  19.  }              
  20. }              
  21. sb.Append("MessageID=null");            
  22. MessageModel.SQLSTR = sb.ToString();//动态的条件语句传给实体             
  23.  int j = DeleteClass(MessageModel);              
  24. //.....        }          
  25. ///          
  26.  /// 删除信息          
  27. ///           
  28. ///           
  29. ///           
  30. public int DeleteClass(MessageModel MeModel)        
  31. {              
  32. int rowsAffected;              
  33. SqlParameter[] parameter = { new SqlParameter("@sqlstr", SqlDbType.Int) };             
  34.  parameter[0].Value = MeModel.SQLSTR;           
  35.  DbHelperSQL.RunIntProcName("proc_DeleteMessage", out rowsAffected, parameter);             
  36.  return rowsAffected;      
  37.     } 

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

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

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

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

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

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

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

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

原文链接:http://www.cnblogs.com/lsyfg/archive/2010/12/28/1919186.html

【编辑推荐】

 

 

  1. 详解ASP.NET MVC 3 beta新特性
  2. ASP.NET MVC 3让依赖注入实现得更简单
  3. 详解ASP.NET MVC 3 beta新特性
  4. ASP.NET MVC 3新特性与NuPack功能详解
  5. .NET开发人员应该关注的七个开源项目

相关内容

热门资讯

如何允许远程连接到MySQL数... [[277004]]【51CTO.com快译】默认情况下,MySQL服务器仅侦听来自localhos...
如何利用交换机和端口设置来管理... 在网络管理中,总是有些人让管理员头疼。下面我们就将介绍一下一个网管员利用交换机以及端口设置等来进行D...
各种千兆交换机的数据接口类型详... 千兆交换机有很多值得学习的地方,这里我们主要介绍各种千兆交换机的数据接口类型,作为局域网的主要连接设...
施耐德电气数据中心整体解决方案... 近日,全球能效管理专家施耐德电气正式启动大型体验活动“能效中国行——2012卡车巡展”,作为该活动的...
Windows恶意软件20年“... 在Windows的早期年代,病毒游走于系统之间,偶尔删除文件(但被删除的文件几乎都是可恢复的),并弹...
规避非法攻击 用好路由器远程管... 单位在市区不同位置设立了科技服务点,每一个服务点的员工都通过宽带路由器进行共享上网,和单位网络保持联...
范例解读VB.NET获取环境变... VB.NET编程语言的使用范围非常广泛,可以帮助开发人员处理各种程序中的需求,而且还能对移动设备进行...
20个非常棒的扁平设计免费资源 Apple设备的平面图标PSD免费平板UI 平板UI套件24平图标Freen平板UI套件PSD径向平...