C# 如何遍历复杂类型对象的列表并传递给调用SQL存储过程的方法

C# 如何遍历复杂类型对象的列表并传递给调用SQL存储过程的方法,c#,arrays,sql-server,json,foreach,C#,Arrays,Sql Server,Json,Foreach,如何循环遍历对象列表,以便将所述对象传递给通过存储过程在SQL db中插入行的方法 在帮助下,我做到了这一点: namespace NA.Controllers { public class NC : ApiController { [Route("AddNote")] [HttpPost] public HttpResponseMessage PostNote(List<Note> items) { //NoteJ

如何循环遍历对象列表,以便将所述对象传递给通过存储过程在SQL db中插入行的方法

在帮助下,我做到了这一点:

namespace NA.Controllers
{
   public class NC : ApiController
   {
      [Route("AddNote")]
      [HttpPost]
    public HttpResponseMessage PostNote(List<Note> items)
    {
        //NoteJson deserializednote = JsonConvert.DeserializeObject<NoteJson>(item);
        //Note notesdata = new Note(item);
        NotesAccept.Models.INoteRepository Repository = new NotesAccept.Models.NoteDataRepository();
        foreach (Note item in items)
        {

        item = Repository.Add(item);

        }
        var response = Request.CreateResponse<List<Note>>(HttpStatusCode.OK, items);
        return response;
    }
   }
}
我仍然是C#的新手,所以我不知道如何做到这一点,特别是因为整个解决方案仍然是来自整个web的“复制和粘贴”,整个web好奇地专注于简单类型的循环。如何使用复杂类型来实现这一点


正如在另一个问题中提到的,这是一个关乎职业生死的问题(我是db开发人员,不是VS专家,尤其是在两天两夜之后)。

在foreach循环中尝试以下内容:

var tempItem = item;
tempItem = Repository.Add(tempItem);

在foreach循环中尝试以下操作:

var tempItem = item;
tempItem = Repository.Add(tempItem);

您可以将其作为xml传递并在sql存储过程中迭代并执行大容量插入,或者如果您使用的sql和.net版本支持它,则可以使用表数据类型。

您可以将其作为xml传递并在sql存储过程中迭代并执行大容量插入,或者如果您使用的sql和.net版本支持它,则可以使用表数据类型

  • 您仍然忘记将该ID从DB分配给该项

  • 你还有

    return item;
    
    在不返回任何内容的方法中(public void Add(Note item))

    所以只需删除返回行

  • 替换

    item = Repository.Add(item);
    
    仅仅

    Repository.Add(item);
    
  • 您仍然忘记将该ID从DB分配给该项

  • 你还有

    return item;
    
    在不返回任何内容的方法中(public void Add(Note item))

    所以只需删除返回行

  • 替换

    item = Repository.Add(item);
    
    仅仅

    Repository.Add(item);
    


  • 我不明白您的问题,您不确定如何将
    传递给函数?也许您应该展示您尝试过的内容,并告诉我们为什么它不起作用。在foreach循环中,如果您使用return response,则只处理第一个值。@CodingGorilla项是Note()数据类的一个实例,该类的定义使我可以反序列化通过传入HTTPPost请求接收的JSON数组并在其中存储值,这些值是我在粘贴存储库中调用的存储过程的参数。在添加foreach之前,我如上所述传递了项。现在Item是迭代变量,但我仍然需要将它(或在添加foreach()之前包含的数据)传递给Add(注意Item)。@VinayPandey使用return返回到添加行的HTTP请求ID。再次说明:这是在添加foreach()之前。你所看到的只是从各种各样的“如何…”粘贴的代码,我几乎不懂。如何将SQL存储过程的输出传递回HTTP请求的响应?您所做的是称为RBAR“逐行”。您需要研究“基于集合”的插入多行的方法。我知道你是个菜鸟…但是相信我,我希望在我还是菜鸟的时候有人抓住我说“没有RBAR”。虽然我不会使用OPENXML,但本文讨论了这种方法。这里有一个比OPENXML更好的方法我不理解您的问题,您不知道如何将
    传递给函数?也许您应该展示您尝试过的内容,并告诉我们为什么它不起作用。在foreach循环中,如果您使用return response,则只处理第一个值。@CodingGorilla项是Note()数据类的一个实例,该类的定义使我可以反序列化通过传入HTTPPost请求接收的JSON数组并在其中存储值,这些值是我在粘贴存储库中调用的存储过程的参数。在添加foreach之前,我如上所述传递了项。现在Item是迭代变量,但我仍然需要将它(或在添加foreach()之前包含的数据)传递给Add(注意Item)。@VinayPandey使用return返回到添加行的HTTP请求ID。再次说明:这是在添加foreach()之前。你所看到的只是从各种各样的“如何…”粘贴的代码,我几乎不懂。如何将SQL存储过程的输出传递回HTTP请求的响应?您所做的是称为RBAR“逐行”。您需要研究“基于集合”的插入多行的方法。我知道你是个菜鸟…但是相信我,我希望在我还是菜鸟的时候有人抓住我说“没有RBAR”。虽然我不会使用OPENXML,但本文讨论了这种方法。这里有一个比OPENXML更好的方法,谢谢您的建议。可能的进展:
    无法隐式地将void类型转换为NA.Models。注意
    感谢您的建议。可能进展:
    无法隐式地将类型void转换为NA.Models。注意
    很抱歉,因为从其他问题粘贴的内容没有注释掉(已经完成)。无论如何,生成并发布的解决方案和测试返回:
    “消息”:“出现错误”,“异常消息”:“对象引用未设置为对象的实例”,“异常类型”:“System.NullReferenceException”,“StackTrace”:“at NotesAccept.Controllers.NotesController.PostNote(列出``1项)\r\n at lambda_方法(闭包,对象,对象[])\r\n位于System.Web.Http.Controllers.ReflectedHttpActionDescriptor.ActionExecutor.c\uu DisplayClass10.b\uu 9(对象实例,对象[]方法参数)\r\n(…)
    因此,请编辑您的帖子以反映您的最新版本-包括PostNote方法更改。哪一行导致异常?如果您不知道,请尝试运行调试器,或在其中放置一些日志以显示崩溃的位置。您也不希望此部分
    var response=Request.CreateResponse(HttpStatusCode.Created,项目);return response;
    要进入foreach循环,您只想在操作方法结束时返回结果。是的,我在前面执行了上述两个更正,但没有更新问题。我急于测试和调试解决方案…现在就尝试-但调试远程服务器上部署的应用程序需要一段时间才能安装…Sorry、 正如从其他问题粘贴的一样,未注释掉(已完成)。无论如何,生成和发布的解决方案以及测试返回:
    “消息”:“出现错误”,“异常消息”:“对象引用未设置为