在图层之间传输数组。
将数组从js(jQuery)发送到sql sproc的最佳方法是什么? 你能分享一下你的想法吗?
这概括了我以前的问题:
Js到MVC控制器。
将数组从MVC发送到SQL的最佳方法。 (仍然可供讨论)
这个有趣的SQL帖子供测试。那么[表值参数]呢?
http://www.adathedev.co.uk/2010/02/sql-server-2008-table-valued-parameters.html
答案 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();
}