c# - 错误 : "The SqlParameter is already contained by another SqlParameterCollection" when adding a Parameter

标签 c# sql-server

我有一些与我的 SQL 服务器交互的类似功能(选择、调用存储过程等),除了下面的功能外,所有功能都可以使用。每个 SqlConnection 都包含在一个 using block 中,而 SqlCommand 也包含在一个 using block 中。

此代码在尝试添加 @LastUpdated 参数时失败。我尝试了一些我在其他帖子中看到的建议:cmd.Parameters.Clear()、在 using 中包装等,但没有成功。当重复尝试设置发现的相同参数时,解决了一些具有相同错误的帖子。可能我漏掉了,但我已经看了几个小时了,甚至还擦了眼镜。任何方向将不胜感激。

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();
        }
    }
}

最佳答案

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

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

        mycmd.Parameters.Add(nameParam);
    }
}

关于c# - 错误 : "The SqlParameter is already contained by another SqlParameterCollection" when adding a Parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32366211/

相关文章:

sql - 使用以前的非空值填充表中的空值。每列有几个空值?

sql-server - "SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED"不服用?还是我看错了?

sql - 如何聚合描述列?

c# - 引用 C# 变量时如何处理 JavaScript 中的双引号

c# - 使用 Azure 表可以实现这一点吗?

c# - 当应用程序是 C# 中的任务栏时,如何监听快捷方式

c# - 在 Page_Load 期间在设计器中添加的控件为空

c# - 使用 HttpClient 通过 HTTP POST windows phone 8.1 上传图像和字符串

sql - 创建创建数据库和表的 SQL 脚本

c++ - 无法使用 soci 库连接到 SQL Server