繁体   English   中英

过程或函数指定了太多参数

[英]Procedure or function has too many arguments specified

关于这个例外,关于SO有很多问题。 但是它们都不对我有用。

这是我的存储过程:

CREATE PROCEDURE HolidayStandardMappingInsert 
    @HolidayID bigint,
    @StandatdID smallint
AS
BEGIN
    INSERT INTO HolidayStandardMapping VALUES(@HolidayID,@StandatdID)
END
GO

这是我的代码:

int StdId = 0;
                SqlCommand cmdS = new SqlCommand("HolidayStandardMappingInsert", conn);
                cmdS.CommandType = CommandType.StoredProcedure;


                for (int i = 0; i < cblStandard.Items.Count; i++)
                {
                    if (cblStandard.Items[i].Selected == true)
                    {
                        if (StdId == 0)
                            StdId = Convert.ToInt32(cblStandard.Items[i].Value);
                        else
                            StdId = Convert.ToInt32(cblStandard.Items[i].Value);
                        cmdS.Parameters.AddWithValue("@HolidayID", NewRecordID);
                        cmdS.Parameters.AddWithValue("@StandatdID", StdId);
                        if (conn.State == ConnectionState.Open)
                        {
                            conn.Close();
                        }
                        conn.Open();
                        int res = cmdS.ExecuteNonQuery();
                        if (res > 0)
                        {

                        }
                    }
                }

告诉我缺少了什么?

您正在使用同一个SqlCommnad object进行多次插入,因此还存在previously添加的parameters

因此,要么在循环内创建一个新的SqlCommnad object ,要么clear prevoius参数。

这样可以Clear以前添加的参数。

cmdS.Parameters.Clear();

您正在循环添加参数。 因此,在第二次迭代之后,您的命令具有4个参数。

每次在循环中添加cmdS.Parameters.AddWithValue。 因此,在第一次迭代之后,它已经有2个参数。

进入循环之前,需要通过cmdS.Parameters.Clear()清除命令参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM