错误:SqlParameter已经包含在另一个sqlparametercollection中.添加参数时

本文关键字:sqlparametercollection 添加 参数 另一个 SqlParameter 包含 错误 | 更新日期: 2023-09-27 18:10:53

我有几个类似的函数与我的SQL服务器交互(选择,调用存储过程等),除了下面的一个之外,它们都可以工作。每个SqlConnection都包含在using块中,SqlCommand也包含在using块中。

当尝试添加@LastUpdated参数时,此代码失败。我尝试了一些我在其他帖子中看到的建议:cmd.Parameters.Clear(),包装使用等,但没有运气。当重复尝试设置发现的相同参数时,解决了一些具有相同错误的帖子。我可能没注意到这一点,但我已经仔细看了几个小时了,甚至还把杯子擦干净了。如有任何指示,不胜感激。

private void _AddCartItem(bool hasEventInCart, _EventCart cartContents, ref int cartItemId)
{
    using (SqlConnection sqlConnection = new SqlConnection(_striMISConnection))
    {
        sqlConnection.Open();
        using (SqlCommand cmd = sqlConnection.CreateCommand())
        {
            SqlParameter param = new SqlParameter();
            cmd.Parameters.Clear();
            // add/update CartItem
            if (hasEventInCart)
            {
                // Update item
                cmd.CommandText = "SProc2Insert @CartItemId, @ID, 'Event', @Created, @LastUpdated";
                param.ParameterName = "@CartItemId";
                param.Value = cartItemId;
                cmd.Parameters.Add(param);
            }
            else
            {
                // add item
                cmd.CommandText = "SProc2Update @ID, 'Event', @Created, @LastUpdated";
            }
            cmd.CommandType = CommandType.Text;
            param.ParameterName = "@Created";
            param.Value = DateTime.Now.ToString();
            cmd.Parameters.Add(param);
            param.ParameterName = "@LastUpdated";
            param.Value = DateTime.Now.ToString();
            **cmd.Parameters.Add(param);**
            param.ParameterName = "@ID";
            param.Value = this.ID;
            cmd.Parameters.Add(param);
            if (hasEventInCart)
            {
                cmd.ExecuteNonQuery(); // do the update
            }
            else
            {
                cartItemId = (int)cmd.ExecuteScalar();
                foreach (var currentCartEvent in cartContents.CartEvents)
                {
                    if (currentCartEvent.EventCode == this.EventCode)
                    {
                        currentCartEvent.CartItemID = cartItemId;
                    }
                }
            }
            cmd.Parameters.Clear();
        }
    }
}

错误:SqlParameter已经包含在另一个sqlparametercollection中.添加参数时

我有同样的问题,你可以用下面的代码解决它:

if (SqlParams != null && SqlParams.Count > 0)
{ 
    foreach (SqlParameter spp in SqlParams )
    {
        SqlParameter nameParam = new SqlParameter(spp.ParameterName, spp.SqlValue);
        mycmd.Parameters.Add(nameParam);
    }
}

首先,如果要调用存储过程,则需要将CommandType设置为CommandType.StoredProcedure,而不是Text:

cmd.CommandType = CommandType.StoredProcedure;

,并且只使用存储过程名称作为命令查询:

cmd.CommandText = "dbo.SProc2Update";

第二,我不会只使用一个SqlParameter实例,然后一遍又一遍地添加它——我只会直接使用.Add()方法——并且停止将所有日期/时间转换为字符串!使用适当的原生数据类型—DateTime—并在您的Parameters.Add()调用中指定:

cmd.Parameters.Add("@Created", SqlDbType.DateTime).Value = DateTime.Now;
cmd.Parameters.Add("@LastUpdated", SqlDbType.DateTime).Value = DateTime.Now;

我是这样做的:

        ILease lease = (ILease)_SqlParameterCollection.InitializeLifetimeService();
        if (lease.CurrentState == LeaseState.Initial)
        {
            lease.InitialLeaseTime = TimeSpan.FromMinutes(5);
            lease.SponsorshipTimeout = TimeSpan.FromMinutes(2);
            lease.RenewOnCallTime = TimeSpan.FromMinutes(2);
            lease.Renew(new TimeSpan(0, 5, 0));
相关文章:
  • 没有找到相关文章