ASP.NET中運用動態構建語句高效大量刪除解析

來源:互聯網
上載者:User

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、把構建的語句用參數傳入,作為刪除條件。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.