ASP.NET運用動態(tài)構(gòu)建語句實現(xiàn)高效批量刪除
網(wǎng)站中的批量刪除很常見,特別是對在gridview中做批量刪除。我們一般的做法是循環(huán)到勾選的就調(diào)用過程直接刪除。這樣的話個人覺得效率不是很高,如果是上百上千的數(shù)據(jù)要刪除,那就得調(diào)用試行上百次。其實我們可以運用動態(tài)構(gòu)建刪除語句進(jìn)行高效批量刪除,無論你選多少要刪除的數(shù)據(jù),只需調(diào)用試行一次。
底下寫的存儲過程刪除語句與上圖無關(guān),上圖是常見的在gridview中做批量刪除。使用存儲過程:
- ---------------------------------------------------------------------------------------
- /* *作 者:lin sen *功能說明:動態(tài)構(gòu)建SQL語句之刪除 *編寫日期:2010年9月27日 **/
- ---------------------------------------------------------------------------------------
- drop procedure proc_DeleteMessagegocreate procedure proc_DeleteMessage(
- @condition
- varchar(500)
- --刪除條件(多個)
- )asbegin
- declare @sql varchar(200)
- --動態(tài)構(gòu)建刪除語句
- select @sql='Delete from MessageInfo where '+@condition
- --試行語句 exec (@sql)endgo
在SQL查詢分析器上調(diào)用該過程:(傳入的條件是唯一標(biāo)識列名和所選中的值)
- exec proc_DeleteMessage 'MessageID=240 or MessageID=241 or MessageID=242...'
在SQL調(diào)用看不太清楚,我們來看下Web中的前臺調(diào)用與試行。
- //刪除按鈕單擊事件
- 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());//選中的唯一標(biāo)識列值
- sb.Append("MessageID=");
- sb.Append(MessageModel.C_ID);
- sb.Append(" or ");
- }
- }
- sb.Append("MessageID=null");
- MessageModel.SQLSTR = sb.ToString();//動態(tài)的條件語句傳給實體
- 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前臺動態(tài)構(gòu)建并調(diào)用過程時我們需要注意幾點:
1、我們勾選的列一般都是主鍵唯一標(biāo)識列,根據(jù)它進(jìn)行刪除。
2、如果你的主鍵是字符串不是整形,那么上面需要改動一下sb.Append("MessageID='");sb.Append(MessageModel.C_ID);
sb.Append("' or ");只是多個單引號。
3、在循環(huán)完后注意加上sb.Append("MessageID=null");結(jié)束。個人認(rèn)為主鍵不可能空的,所以這個條件排除。不加的動態(tài)語句后面多個個or;
但是千萬別在條件中加 or 1=1;那樣不管多少都成立,會被整個數(shù)據(jù)刪除。
4、把構(gòu)建的語句用參數(shù)傳入,作為刪除條件。
以上如有其他高效批量刪除數(shù)據(jù)的方法,希望貼出來和大家一起討論和分享。
原文鏈接:http://www.cnblogs.com/lsyfg/archive/2010/12/28/1919186.html
【編輯推薦】