【问题标题】:asp.net stored procedure insert multiple pairs of data into the DBasp.net 存储过程向数据库中插入多对数据
【发布时间】:2013-08-09 21:48:17
【问题描述】:

我有一个接受 int[] (userIDs) 和 int (groupID) 作为参数的方法。然后它运行存储过程并将数据插入到数据库中

For example:
if userIDs=[1,2,3] and groupID=4, 
then I want the following data to be inserted into the DB
userID    groupID
1            4
2            4
3            4 

我有两个解决这个问题的方法。第一个是编写一个将单个记录插入数据库的存储过程。在method()中,我会循环遍历int[]并调用存储过程n次

method()
for (int i =0; i< userID.length; i++){
    // call stored procedure to insert a single record
}

第二种解决方案是将int[]和int作为参数传递给存储过程,并在存储过程中进行循环。

哪种方法更好? (如果它的第二个解决方案更好,有人可以提供在存储过程中处理 int[] 的指导)

【问题讨论】:

    标签: c# asp.net-mvc stored-procedures insert


    【解决方案1】:

    您不想使用 O/R 映射器是否有充分的理由? 您的示例看起来像服务器/代码隐藏,您可以使用实体框架(或其他)插入新值。 如果您不能使用它们,那么我将使用 for (您的帖子中的第二个)方法。但这很危险,因为您不在任何交易中。

    您可以在此处开始您的实体框架调查:http://www.asp.net/entity-framework。 如果您出于任何原因无法使用 EF,请考虑为您的 sql 命令使用事务范围(请参阅http://msdn.microsoft.com/en-us/library/777e5ebh.aspx 开始阅读)

    【讨论】:

    • 谢谢。抱歉,我对 asp-net 很陌生。你能简单解释一下 wat 的 O/R 和背后的服务器/代码吗?
    • 我在回复中添加了一些 O/R 链接。代码隐藏意味着您在服务器上执行代码(例如来自您的控件的事件)。
    【解决方案2】:

    Geeeeeeeeeee一般来说,这种东西的代码速度更快。你最好遍历你的数组,C#端,然后调用一个存储过程来处理你的特定记录。

    现在,细节当然会发生变化,这听起来肯定是一个大人物处理得最好的。将您的 int 数组转换为数据表,然后您就可以拥有一些 real fun...

    【讨论】:

    • 一般来说,这是错误的。如果您执行 n 次,则需要 n 次网络调用和 n 次执行,这几乎总是比一次网络调用和一次执行多次插入要慢。
    • 很公平,但通常我们不只是将数据直接转储到数据库中;通常我们会在数据进入 SQL 之前对其进行处理,这时 SQL 就不能像在代码中处理它那样发挥作用了。因此是“一般”,因此为什么这个特定问题实际上最好在 SQL 端完成
    • 我完全同意你的观点,一些操作(字符串拆分、循环、几乎所有处理单个记录而不是集合的所有操作)在 C# 中编码和维护更容易(也更理智)......
    【解决方案3】:

    如果您所做的只是向数据库添加行,我认为不需要存储过程(除非这是来自 DBA 或策略的要求)。

    只需遍历您的项目并使用 ADO.NET 或 Entity Framework 将条目添加到数据库中。

    【讨论】:

      猜你喜欢
      • 2012-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-28
      相关资源
      最近更新 更多