簡體   English   中英

將許多值傳遞給SQL Server存儲過程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM