五月综合缴情婷婷六月,色94色欧美sute亚洲线路二,日韩制服国产精品一区,色噜噜一区二区三区,香港三级午夜理伦三级三

您現(xiàn)在的位置: 365建站網(wǎng) > 365文章 > 運(yùn)用動(dòng)態(tài)構(gòu)建語(yǔ)句 ASP.NET中高效批量刪除

運(yùn)用動(dòng)態(tài)構(gòu)建語(yǔ)句 ASP.NET中高效批量刪除

文章來(lái)源:365jz.com     點(diǎn)擊數(shù):196    更新時(shí)間:2010-12-28 22:40   參與評(píng)論

網(wǎng)站中的批量刪除很常見(jiàn),特別是對(duì)在gridview中做批量刪除。我們一般的做法是循環(huán)到勾選的就調(diào)用過(guò)程直接刪除。這樣的話個(gè)人覺(jué)得效率不是很高,如果是上百上千的數(shù)據(jù)要?jiǎng)h除,那就得調(diào)用試行上百次。其實(shí)我們可以運(yùn)用動(dòng)態(tài)構(gòu)建刪除語(yǔ)句進(jìn)行高效批量刪除,無(wú)論你選多少要?jiǎng)h除的數(shù)據(jù),只需調(diào)用試行一次。

底下寫的存儲(chǔ)過(guò)程刪除語(yǔ)句與上圖無(wú)關(guān),上圖是常見(jiàn)的在gridview中做批量刪除。使用存儲(chǔ)過(guò)程:

代碼
-----------------------------------------------------------------------
/*

*作 者:lin sen
*功能說(shuō)明:動(dòng)態(tài)構(gòu)建SQL語(yǔ)句之刪除
*編寫日期:2010年9月27日
*
*/
----------------------------------------------------------------------
drop procedure proc_DeleteMessage
go
create procedure proc_DeleteMessage
(
@condition varchar(500) --刪除條件(多個(gè))
)
as
begin
declare @sql varchar(200)
--動(dòng)態(tài)構(gòu)建刪除語(yǔ)句
select @sql='Delete from MessageInfo where '+@condition
--試行語(yǔ)句
exec (@sql)
end
go

在SQL查詢分析器上調(diào)用該過(guò)程:(傳入的條件是唯一標(biāo)識(shí)列名和所選中的值)

exec proc_DeleteMessage 'MessageID=240 or MessageID=241 or MessageID=242...'

在SQL調(diào)用看不太清楚,我們來(lái)看下Web中的前臺(tái)調(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
= "請(qǐng)選擇要?jiǎng)h除信息";
lab_Note.Style.Add(
"color", "red");
}
else
{
MessageModel.C_ID
= Int32.Parse(GV_class.Rows[i].Cells[3].Text.Trim());
//選中的唯一標(biāo)識(shí)列值
sb.Append("MessageID=");
sb.Append(MessageModel.C_ID);
sb.Append(
" or ");
}
}
sb.Append(
"MessageID=null");
MessageModel.SQLSTR
= sb.ToString();//動(dòng)態(tài)的條件語(yǔ)句傳給實(shí)體
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)動(dòng)態(tài)構(gòu)建并調(diào)用過(guò)程時(shí)我們需要注意幾點(diǎn):

1、我們勾選的列一般都是主鍵唯一標(biāo)識(shí)列,根據(jù)它進(jìn)行刪除。

2、如果你的主鍵是字符串不是整形,那么上面需要改動(dòng)一下sb.Append("MessageID='");sb.Append(MessageModel.C_ID);

sb.Append("' or ");只是多個(gè)單引號(hào)。

3、在循環(huán)完后注意加上sb.Append("MessageID=null");結(jié)束。個(gè)人認(rèn)為主鍵不可能空的,所以這個(gè)條件排除。不加的動(dòng)態(tài)語(yǔ)句后面多個(gè)個(gè)or;

但是千萬(wàn)別在條件中加 or 1=1;那樣不管多少都成立,會(huì)被整個(gè)數(shù)據(jù)刪除。

4、把構(gòu)建的語(yǔ)句用參數(shù)傳入,作為刪除條件。

以上如有其他高效批量刪除數(shù)據(jù)的方法,貼出來(lái)和大家一起討論和分享。

如對(duì)本文有疑問(wèn),請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答??! 點(diǎn)擊進(jìn)入論壇

發(fā)表評(píng)論 (196人查看,0條評(píng)論)
請(qǐng)自覺(jué)遵守互聯(lián)網(wǎng)相關(guān)的政策法規(guī),嚴(yán)禁發(fā)布色情、暴力、反動(dòng)的言論。
昵稱:
最新評(píng)論
------分隔線----------------------------

其它欄目

· 建站教程
· 365學(xué)習(xí)

業(yè)務(wù)咨詢

· 技術(shù)支持
· 服務(wù)時(shí)間:9:00-18:00
365建站網(wǎng)二維碼

Powered by 365建站網(wǎng) RSS地圖 HTML地圖

copyright © 2013-2024 版權(quán)所有 鄂ICP備17013400號(hào)