将数组从js(jQuery)发送到sql sproc的最佳方法是什么?阵列之间传输的数组

时间:2012-02-02 10:54:49

标签: jquery asp.net-mvc-3 sql-server-2008

在图层之间传输数组。

将数组从js(jQuery)发送到sql sproc的最佳方法是什么? 你能分享一下你的想法吗?

这概括了我以前的问题:

  1. Js到MVC控制器。

    https://stackoverflow.com/a/9109671/1145224

  2. 将数组从MVC发送到SQL的最佳方法。 (仍然可供讨论)

  3. 这个有趣的SQL帖子供测试。那么[表值参数]呢?

    http://www.adathedev.co.uk/2010/02/sql-server-2008-table-valued-parameters.html

1 个答案:

答案 0 :(得分:1)

我认为最好的方法是将数组作为Table-Valued Parameter

发送

如何从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;
}   

您还必须实施User Defined Table Type

CREATE TYPE IntArray AS TABLE
(
  Value int not null
)

创建接受此参数的过程:

CREATE PROCEDURE YourProc
  @DataArray IntArray READONLY
AS
BEGIN
  SELECT Value FROM @DataArray
END

最后用适当的参数调用proc:

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();
}