[英]Reduce number of database calls
我有一個stored-procedure
,該stored-procedure
接受五個參數並在表上執行更新
Update Table
Set field = @Field
Where col1= @Para1 and Col2=@Para and Col3=@Para3 and col4 =@aPara4
從用戶的角度來看,您可以為所有條件參數選擇多個值。 例如,您可以選擇2個需要匹配數據庫表中Col1的選項(需要以@ Para1的形式傳遞)
因此,我將所有選擇的值存儲在單獨的列表中。
目前,我正在使用foreach循環進行更新
foreach (var g in _list1)
{
foreach (var o in _list2)
{
foreach (var l in _list3)
{
foreach (var a in _list4)
{
UpdateData(g, o, l,a);
}
}
}
}
我肯定這不是一個好方法,因為這將調用數據庫調用的號碼。 有什么方法可以忽略循環並執行最少數量的db調用來達到相同的結果?
更新
我正在尋找Table-Valued Parameters
以外的其他方法
一種可能的方法是使用表值參數將每個條件的多個值傳遞給存儲過程。 這將減少代碼中的循環,並且仍應提供所需的功能。
如果我沒有記錯的話,它們是在SQL Server 2008中引入的,所以只要您不必支持2005或更早版本,它們就可以使用。
考慮將Enterprise Library中的MS Data Access Application Block用於UpdateDataSet命令。
本質上,您將構建一個數據表,其中每一行都是一個參數集,然后針對打開的連接執行參數集的“批處理”。
當然,您可以通過構建一個包含多個更新命令的字符串並針對數據庫執行該操作而無需執行此操作。
您可以將查詢帶入此表單:
Update Table Set field = @Field Where col1 IN {} and Col2 IN {} and Col3 IN {} and col4 IN {}
並以這種方式傳遞參數: https : //stackoverflow.com/a/337792/580053
只要您可以自由更新存儲過程的結構; 我建議的方法是使用表值參數而不是多個參數。
可以在以下位置找到服務器和數據庫代碼的一個很好的示例: http : //www.codeproject.com/Articles/39161/C-and-Table-Value-Parameters
為什么要為此使用存儲過程? 我認為您不應該使用SP來執行簡單的CRUD操作。 存儲過程的真正功能是進行繁重的計算等。
表值參數是我的選擇,但是既然您正在尋找其他方法,為什么不采用更簡單的方法,而只是在服務器端代碼上動態構建批量/批量更新查詢並針對數據庫運行它?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.