【问题标题】:Clearing the existing collection and adding but still says - The SqlParameter is already contained by another SqlParameterCollection清除现有集合并添加但仍然说 - SqlParameter 已被另一个 SqlParameterCollection 包含
【发布时间】:2015-03-26 05:18:36
【问题描述】:

我无法弄清楚这段代码有什么问题。我正在清除所有参数,然后添加它们,但它仍然给我错误提示“SqlParameter 已包含在另一个 SqlParameterCollection 中。”

请帮忙

            using (SqlConnection m_Connection = Class_SetApplicationEnviroment.Get_Sql_Connection())
            {
                m_Connection.Open();


                SqlCommand oSqlCommand = new SqlCommand(m_spName, m_Connection);
                oSqlCommand.CommandType = CommandType.StoredProcedure;

                if (m_Parameters.Length > 0)
                {
                    //SQLDataAdapter.SelectCommand.Parameters.Clear();
                    oSqlCommand.Parameters.Clear();

                    foreach (SqlParameter oParam in m_Parameters)
                    {
                        if (oParam != null)
                        {
                            // Check for derived output value with no value assigned
                            if ((oParam.Direction == ParameterDirection.InputOutput ||
                                 oParam.Direction == ParameterDirection.Input) &&
                                (oParam.Value == null))
                            {
                                oParam.Value = null;
                            }
                            oSqlCommand.Parameters.Add(oParam);
                            //SQLDataAdapter.SelectCommand.Parameters.Add(oParam);
                        }
                    }
                }

                //Execute the Stored Procedure
                //SQLDataAdapter.Fill(myTable);
                strReturnValue = oSqlCommand.ExecuteNonQuery().ToString();

                m_Connection.Close();
            }
        }

【问题讨论】:

  • 你的例外说明了一切。
  • 我猜这是你没有找到的重复:stackoverflow.com/questions/7837762/… 问题不是参数已经在这个命令的参数集合中,而是在不同的地方。
  • 检查 m_parameters 中的内容?我的猜测是那里有一个重复。
  • @Jeremy:那么异常不会是“已经被另一个包含”,而是“已经包含在这个”。跨度>
  • 我确实检查了参数是否返回任何重复项。它没有返回任何重复项。但它发生在正在添加的第一个参数(清除参数之后)。

标签: sql sql-server sql-server-2008 c#-4.0


【解决方案1】:

我可以看到您的 m_Parameters 是您班级中参数的私有集合。

当你实例化这个类并第一次运行这段代码时,你创建了一个命令,并将这个集合的参数添加到一个新创建的命令Parameters集合中。

在第二次运行时,您创建了一个新的不同命令,并尝试将参数添加到新的新命令中。而且,由于您的参数已经附加到旧命令的集合中,您会收到错误。

您可以创建一个命令作为类的成员,将参数附加到它的集合中,并根据需要多次重复使用它。或者,您可以为每个命令执行创建一个新的参数集合。 也许(我不确定)如果您在关闭连接后运行此行oSqlCommand.Parameters.Clear();,它们将被“释放”并可以在下一次执行时使用。你可以先试试这个

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 2011-09-11
    • 1970-01-01
    • 2019-04-10
    • 2012-06-14
    相关资源
    最近更新 更多