[英]Passing many values to a SQL Server stored procedure
我目前有此功能(請參見下文),可將答案和相關內容(例如注釋)添加到50個左右的問題中。 我試圖通過將數據庫更改為存儲過程來確保數據庫的安全,以便可以從用戶中刪除寫許可權。 這是正確的方法嗎?
我應該使用表值參數嗎? 還是應該調用存儲過程50次? 前者感覺很對,但是盡管我認為效率低下,但后者在代碼上看起來會更好。
或者...有更好的方法/方法嗎?
int AddAnswersToTable()
{
var Cmd = Db.NewCommand();
var Str = new StringBuilder("INSERT INTO answers (qu_id,answer,notes) VALUES");
int i = 1;
string Join = string.Empty;
foreach (var Qu in Page)
{
Str.Append(Join);
Str.Append("(");
Str.Append((Name = "@qu_id" + i) + ",");
Cmd.Parameters.AddWithValue(Name, Qu.QuId);
Str.Append((Name = "@ans" + i) + ",");
Cmd.Parameters.AddWithValue(Name, Qu.Answer.Truncate(499));
Str.Append((Name = "@notes" + i) + ",");
Cmd.Parameters.AddWithValue(Name, Qu.Notes.Truncate(499));
Str.Append(")");
Join = ",";
i++;
}
return Cmd.ExecuteNonQuery(Str.ToString());
}
提前致謝。
存儲過程是否正確是一個宗教問題。 我相信是FWIW。
調用該過程50次比較簡單,但本質上這兩種方法都不對。
我沒有使用表值參數,所以我不能說這是否可行。 但是另一個選擇是使用SqlDataAdapter進行批量更新。 通過設置“ UpdateBatchSize”屬性,您可以一次發送多個值/行。
您可以在MSDN上閱讀有關它的信息: http : //msdn.microsoft.com/zh-cn/library/aadf8fk2%28v=vs.100%29.aspx
這是使用存儲過程的文章: http : //www.dotnetspider.com/resources/4467-Multiple-Inserts-Single-Round-trip-using-ADO-NE.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.