Каковы наилучшие способы отправки массивов из js (jQuery) в sql sproc?Передача массива между слоями - PullRequest
2 голосов
/ 02 февраля 2012

Массив, передающий между слоями.

Каковы наилучшие способы отправки массивов из 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 Ответ

1 голос
/ 02 февраля 2012

Я думаю, что лучший способ - это отправить массив как Табличный параметр

Как передать массив в SP из MVC (любой код c #).В вашем случае это массив 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 TYPE IntArray AS TABLE
(
  Value int not null
)

Создать процедуру, которая принимаетэтот параметр:

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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...