技术开发 频道

ASP.NET中批量删除:只调用一次存储过程

    【IT168 评论】网站中的批量删除很常见,特别是对在gridview中做批量删除。我们一般的做法是循环到勾选的就调用过程直接删除。如果是上百上千的数据要删除,那就得调用试行上百次。有人认为直接试行语句,何必那么麻烦但是我们可以对它处理的完善点,无论你选多少要删除的数据,只需调用试行一次。

1
 

  底下写的存储过程删除语句与上图无关,上图是常见的在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;  
      }

 

  后续完善:(避免大家犯同样错误)  

0
相关文章