ASP.NET中批量删除--只调用一次存储过程
2010-12-29 09:17
399 查看
ASP.NET中批量删除--只调用一次存储过程
网站中的批量删除很常见,特别是对在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、把构建的语句用参数传入,作为删除条件。
以上如有其他高效批量删除数据的方法,希望贴出来和大家一起讨论和分享。
相关文章推荐
- ASP.NET 分页存储过程 及 调用
- 【ASP.NET开发】ADO.NET调用带输出参数的存储过程 分类: ASP.NET 2012-09-10 21:16 1261人阅读 评论(1) 收藏
- Asp.net 调用mysql存储过程参数传中文乱码!
- asp.net实现调用带有输出参数的存储过程实例
- asp.net调用带返回值参数的存储过程
- asp.net 调用存储过程
- Asp.Net访问Oracle 数据库 执行SQL语句和调用存储过程
- asp.net调用存储过程的参数
- Asp.Net访问Oracle 数据库 执行SQL语句和调用存储过程
- Asp.Net访问Oracle 数据库 执行SQL语句和调用存储过程
- asp.net中怎样调用存储过程和存储过程的写法
- ASP.NET代码调用SQL Server带DateTime类型参数的存储过程抛出异常问题
- asp.net调用存储过程2
- EXTASPNET C# ASP.NET sql server 调用存储过程超时,解决方法
- Asp.Net访问Oracle 数据库 执行SQL语句和调用存储过程
- asp.net 调用sql存储过程
- ASP.NET调用sql存储过程使用GridView显示
- asp.net中IDataParameter调用存储过程的实现方法
- ASP.NET如何调用MySQL的存储过程