网站中的批量删除很常见,特别是对在gridview中做批量删除。我们一般的做法是循环到勾选的就调用过程直接删除。这样的话个人觉得效率不是很高,如果是上百上千的数据要删除,那就得调用试行上百次。其实我们可以运用动态构建删除语句进行高效批量删除,无论你选多少要删除的数据,只需调用试行一次。
创新互联建站是一家从事企业网站建设、做网站、成都网站建设、行业门户网站建设、网页设计制作的专业网站制作公司,拥有经验丰富的网站建设工程师和网页设计人员,具备各种规模与类型网站建设的实力,在网站建设领域树立了自己独特的设计风格。自公司成立以来曾独立设计制作的站点成百上千家。
底下写的存储过程删除语句与上图无关,上图是常见的在gridview中做批量删除。使用存储过程:
- ---------------------------------------------------------------------------------------
- /* *作 者:lin sen *功能说明:动态构建SQL语句之删除 *编写日期:2010年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);
- //..... }
- ///
- /// 删除信息
- ///
- ///
- ///
- 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运用动态构建语句实现高效批量删除
转载来于:http://www.shufengxianlan.com/qtweb/news17/486867.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联