将许多值传递给 SQL Server 存储过程

本文关键字:SQL Server 存储过程 许多 值传 | 更新日期: 2023-09-27 18:35:35

我目前有这个功能(见下文),它可以将答案和相关内容(例如注释)添加到 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());
}

提前谢谢。

将许多值传递给 SQL Server 存储过程

我没有

使用表值参数,所以我不能说这是否是要走的路。但另一种选择是使用 SqlDataAdapter 进行批量更新。通过设置"UpdateBatchSize"属性,您可以一次发送多个值/行。

您可以在 MSDN: http://msdn.microsoft.com/en-us/library/aadf8fk2%28v=vs.100%29.aspx 上阅读有关它的信息

下面是一篇使用存储过程的文章:http://www.dotnetspider.com/resources/4467-Multiple-Inserts-Single-Round-trip-using-ADO-NE.aspx

存储过程是否是正确的方法是一个宗教问题。我相信是的,FWIW。

调用该过程 50 次更简单,但这两种方法本身都没有错。