将数组传递给SQL Server存储过程
如何使用C#将数组变量传递给SQL Server存储过程并将数组值插入整行中?将数组传递给SQL Server存储过程
在此先感谢。
SQL Server表:
ID | Product | Description
-------------------------------
8A3H | Soda | 600ml bottle
C#阵列:
string[] info = new string[] {"7J9P", "Soda", "2000ml bottle"};
SQL Server存储过程:
ALTER PROC INSERT
(@INFO_ARRAY ARRAY)
AS
BEGIN
INSERT INTO Products VALUES (@INFO_ARRAY)
END
在SQL Server 2008和更高
创建SQL Server中的类型,像这样:
CREATE TYPE dbo.ProductArray
AS TABLE
(
ID INT,
Product NVARCHAR(50),
Description NVARCHAR(255)
);
改变在SQL Server的过程:
ALTER PROC INSERT_SP
@INFO_ARRAY AS dbo.ProductArray READONLY
AS
BEGIN
INSERT INTO Products SELECT * FROM @INFO_ARRAY
END
然后,你需要创建值的DataTable
对象在C#中传递:
DataTable dt = new DataTable();
//Add Columns
dt.Columns.Add("ID");
dt.Columns.Add("Product");
dt.Columns.Add("Description");
//Add rows
dt.Rows.Add("7J9P", "Soda", "2000ml bottle");
using (conn)
{
SqlCommand cmd = new SqlCommand("dbo.INSERT_SP", conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter dtparam = cmd.Parameters.AddWithValue("@INFO_ARRAY", dt);
dtparam.SqlDbType = SqlDbType.Structured;
}
这看起来几乎与答案相同在我上面发布的链接中。你自己写了这个,还是你改变了这个答案? –
我基于我在这里发现的一篇文章,基于我几周前写的代码编写了这个代码:[link](http://www.codeproject.com/Questions/631284/How-to-pass-an-array- SQL SERVER-stored-pro) – kerbasaurus
我在存储过程中出现错误:“必须声明一个标量变量”@INFO_ARRAY“”@kerbasaurus – user3658439
这里是一种简单的例子:
我已经一直在搜索如何将任何数组传递到SQL Server的所有示例和答案,直到我发现这个linK,下面是我如何将它应用到我的项目中:
- 以下代码将获取数组参数,并插入 --array的值到另一个表
Create Procedure Proc1
@INFO_ARRAY ARRAY nvarchar(max) //this is the array your going to pass from C# code
AS
declare @xml xml
set @xml = N'<root><r>' + replace(@INFO_ARRAY,',','</r><r>') + '</r></root>'
Insert into Products
select
t.value('.','varchar(max)')
from @xml.nodes('//root/r') as a(t)
END
希望你喜欢它
已投票,但应该在评论中添加“ARRAY”? – Panzercrisis
是否有任何理由,为什么你不能只使用多个参数或者你只是寻找一个快捷方式? –
这可能有帮助 - http://stackoverflow.com/questions/11102358/how-to-pass-an-array-into-a-sql-server-stored-procedure?rq=1 –
只是看一个快捷方式。 @DStanley – user3658439