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 []到已知托管不存在映射 提供者原生类型。
如何解决?谢谢
答案 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
列的信息