将数组从js(jQuery)发送到sql存储过程的最佳方法是什么?层间传输阵列

将数组从js(jQuery)发送到sql存储过程的最佳方法是什么?层间传输阵列,jquery,asp.net-mvc-3,sql-server-2008,Jquery,Asp.net Mvc 3,Sql Server 2008,层间传输阵列。 将数组从js(jQuery)发送到sql存储过程的最佳方法是什么? 你能分享你的想法吗 这概括了我前面的问题: Js到MVC控制器 将数组从MVC发送到SQL的最佳方法。(尚待讨论) 这是一篇有趣的SQL测试文章。那么[表值参数]呢 我认为最好的方法是将数组作为 如何从MVC(任何c代码)向SP传递数组。在您的例子中,它是一个int[]数组,对吗 public static DataTable ConvertIntArrayToDataTable(IEnumerable

层间传输阵列。

将数组从js(jQuery)发送到sql存储过程的最佳方法是什么? 你能分享你的想法吗

这概括了我前面的问题:

  • Js到MVC控制器

  • 将数组从MVC发送到SQL的最佳方法。(尚待讨论)

  • 这是一篇有趣的SQL测试文章。那么[表值参数]呢


  • 我认为最好的方法是将数组作为

    如何从MVC(任何c代码)向SP传递数组。在您的例子中,它是一个
    int[]
    数组,对吗

    public static DataTable ConvertIntArrayToDataTable(IEnumerable<int> array, bool AllowNull = false)
    {
        var dt = new DataTable();
        dt.Columns.Add(new DataColumn("Value", typeof(int)) { AllowDBNull = AllowNull });
        foreach(var i in array)
          dt.Rows.Add(i));
        return dt;
    }   
    
    创建接受此参数的过程:

    CREATE PROCEDURE YourProc
      @DataArray IntArray READONLY
    AS
    BEGIN
      SELECT Value FROM @DataArray
    END
    
    void CallProc(int[] array)
    {
    // assuming there is exisis already created connection and command named sqlCommand
    
      sqlCommand.CommandText = "YourProc";
      sqlCommand.CommandType = CommandType.StoredProcedure;
      sqlCommand.Parameters.Clear();
      sqlCommand.AddWithValue("@DataArray", ConvertIntArrayToDataTable(array));
      sqlCommand.ExecuteNonQuery();
    }
    
    最后用approvitate参数调用proc:

    CREATE PROCEDURE YourProc
      @DataArray IntArray READONLY
    AS
    BEGIN
      SELECT Value FROM @DataArray
    END
    
    void CallProc(int[] array)
    {
    // assuming there is exisis already created connection and command named sqlCommand
    
      sqlCommand.CommandText = "YourProc";
      sqlCommand.CommandType = CommandType.StoredProcedure;
      sqlCommand.Parameters.Clear();
      sqlCommand.AddWithValue("@DataArray", ConvertIntArrayToDataTable(array));
      sqlCommand.ExecuteNonQuery();
    }
    

    哇,太完美了!清晰易懂。非常感谢你!