2015-10-26 77 views
0

我開始重構我的代碼,以在我的asp.net應用程序中使用「最佳」實踐。For循環中的SQL參數?

我正在做的一個重要的重構是改變我在我的應用程序上使用SQL(ado.net)的方式。我已經更改了所有查詢,我根據用戶輸入檢索信息,這些查詢通過存儲過程來完成,並通過採用輸入參數來減少應用程序的負載並將數據庫項目保留在數據庫級別。我也在改變一個插入語句,我允許用戶在數據庫上使用Paramaters,而不是直接從字符串列表中取出。

但是,我發現自己現在總共重複我的代碼23次。我的代碼尖叫某種循環,但我想不出如何去做。我看過foreach循環,但它不起作用。

我附上了我的代碼。你們能幫助我嗎?給我一個正確的循環,以便使用最佳實踐並使用它的一個例子(請不要爲我編寫代碼,因爲我想了解它),但請告訴我循環是如何工作的。

代碼:

com.Parameters.AddWithValue("@H0", list[0]); 
com.Parameters.AddWithValue("@H1", list[1]); 
com.Parameters.AddWithValue("@H2", list[2]); 
com.Parameters.AddWithValue("@H3", list[3]); 
com.Parameters.AddWithValue("@H4", list[4]); 
com.Parameters.AddWithValue("@H5", list[5]); 
com.Parameters.AddWithValue("@H6", list[6]); 
com.Parameters.AddWithValue("@H7", list[7]); 
com.Parameters.AddWithValue("@H8", list[8]); 
com.Parameters.AddWithValue("@H9", list[9]); 
com.Parameters.AddWithValue("@H10", list[10]); 
com.Parameters.AddWithValue("@H11", list[11]); 
com.Parameters.AddWithValue("@H12", list[12]); 
com.Parameters.AddWithValue("@H13", list[13]); 
com.Parameters.AddWithValue("@H14", list[14]); 
com.Parameters.AddWithValue("@H15", list[15]); 
com.Parameters.AddWithValue("@H16", list[16]); 
com.Parameters.AddWithValue("@H17", list[17]); 
com.Parameters.AddWithValue("@H18", list[18]); 
com.Parameters.AddWithValue("@H19", list[19]); 
com.Parameters.AddWithValue("@H20", list[20]); 
com.Parameters.AddWithValue("@H21", list[21]); 
com.Parameters.AddWithValue("@H22", list[22]); 
com.Parameters.AddWithValue("@H23", list[23]); 
+0

你可能想看看[表值paramters(https://msdn.microsoft.com/en-us/library/bb510489.aspx),允許你通過一個數據列表到存儲過程。 – juharr

回答

4

我會用一個正常的for循環是這樣的:

for(int index = 0; index < list.Length; index++) 
{ 
    com.Parameters.AddWithValue("@H" + index.ToString(), list[index]); 
} 

但是,我會建議你儘可能地do not useAddWithValue有意想不到的後果。相反,做這樣的事情:

com.Parameters.Add("@H" + index.ToString(), SqlDbType.Int).Value = list[index]; 
+0

謝謝你的回答。在閱讀該文章之後,我還會着眼於使用「添加」。雖然,我看到某個地方.Add與AddWithValue相比過時了嗎? – Paul

+1

不知道你在哪裏閱讀,如果你找到鏈接,請分享,因爲我敢肯定它是錯誤的! – DavidG

1

這應該做到這一點,假設列表是一個List,而不是一個數組

for(int i = 0 ; i < list.Count ; i++) 
{ 
    com.Parameters.AddWithValue(string.Format("@H{0}",i),list[i]); 
} 
+0

謝謝你的回答。這就像DavidG的回答一樣按預期工作。 – Paul