为存储过程查询传递ARRAY时出错

时间:2017-03-08 06:54:48

标签: c# sql asp.net stored-procedures

Iam尝试将数组传递给方法,然后将其用于存储过程

protected void Button1_Click(object sender, EventArgs e)
{
    string[] names = new string[3] { "Matt", "Joanne", "Robert" };
    string User = "Employee";
    mav.AccessType(names,User);
}

方法:

   public void AccessType(String[] ARR, String Userty)
{
    SysCon.Open();
    SqlCommand cmdC = new SqlCommand("sp_AccessTypes", SysCon);
    cmdC.CommandType = CommandType.StoredProcedure;
    cmdC.Parameters.AddWithValue("@ARRAY", ARR);
    cmdC.Parameters.AddWithValue("@USER", Userty);
    cmdC.ExecuteNonQuery();
    SysCon.Close();
}

STORED PROC

ALTER PROCEDURE [dbo].[sp_AccessType] 
-- Add the parameters for the stored procedure here
@ARRAY AccessType1 Readonly,
@USER nvarchar(50)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;


INSERT INTO tbl_samplednd1(UserType,parameter1) SELECT * FROM @ARRAY
END

它出错了:

  

从对象类型System.String []到已知托管不存在映射   提供者原生类型。

如何解决?谢谢

1 个答案:

答案 0 :(得分:0)

MS SQL Server不支持将数组作为SP参数提供。 正如您在评论中所说,@ARRAY参数也不是数组,它是用户定义的表类型。

因此,您应该在.net代码中准备一个System.Data.DataTable并将其作为参数传递。

你可以在这个问题中找到一个很好的例子:

How to pass table value parameters to stored procedure from .net code

您的DataTable应至少包含两行,其中包含填充表UserType的{​​{1}}和parameter1列的信息