【问题标题】:Understanding 'The SqlParameter is already contained by another SqlParameterCollection'了解“SqlParameter 已被另一个 SqlParameterCollection 包含”
【发布时间】:2018-07-03 08:43:46
【问题描述】:

我有以下代码:

SqlParameter invidParam = new SqlParameter("@invid",obj.INVID);
SqlParameter prodParam = new SqlParameter("@prod", obj.PROD);
SqlParameter descrParam = new SqlParameter("@descr", obj.DESCR);      
SqlParameter qtyParam = new SqlParameter("@qty", 1);

if(SessionHelper.TryGetSession("curUser",out User user))
{
    SqlParameter useridParamCheck = new SqlParameter("@userid", user.Username);

    var queryResult = db.Database.SqlQuery<int>("EXEC CheckIfAlreadyInPR#invid#userid @invid, @userid", invidParam, useridParamCheck);
    var qty = queryResult.FirstOrDefault();

    if (qty == 0)
    {
        SqlParameter useridParamInsert = new SqlParameter("@userid", user.Username);
        var insertResult = db.Database.ExecuteSqlCommand("InsertIntoPR @invid, @prod, @descr, @userid, @qty", invidParam, prodParam, descrParam, useridParamInsert, qtyParam);
    }
    else if (qty > 0)
    {
        SqlParameter qtyParameter = new SqlParameter("@newqty", (qty + 1));
        SqlParameter userIdParamUpdate = new SqlParameter("@userid", user.Username);

        var updateResult = db.Database.ExecuteSqlCommand("UpdatePRQty#invid#userid#newqty @invid,@userid,@newqty",invidParam,userIdParamUpdate,qtyParameter);
    }
}

我的程序运行并在var insertResult = db... 行遇到异常

我试图了解哪个 SqlParameter 已包含在另一个集合中。是不是因为前面的存储过程调用中已经使用了参数@userid

我用不同的变量名声明了SqlParameter("@userid") 3 次:

useridParamCheck, useridParamInsert, userIdParamUpdate

这是否因为使用了名称 @userid 而导致错误?如果我使用@userid1@userid2@userid3 会解决问题吗?还是已经包含的SqlParameter 是我在上面声明的其他一些SQL 参数?

谢谢

【问题讨论】:

标签: c# asp.net sql-server stored-procedures


【解决方案1】:

我将建议invidparam 是您的问题参数,因为它是我能看到的唯一使用两次的参数。在db.Database.SqlQuery&lt;int&gt;("EXEC CheckIfAlreadyInPR#invid#userid @invid, @userid", invidParam, useridParamCheck); 中一次,在db.Database.ExecuteCommand() 的两个实例中再次出现。

错误本身与多次使用的SqlParameter 对象有关,而不是多次使用相同的参数名称。

【讨论】:

    【解决方案2】:

    我在下面的代码中遇到了这个错误

      var p = new System.Data.SqlClient.SqlParameter{ParameterName = "@p0", SqlDbType 
      SqlDbType.DateTime ,Value = ut.ReadyByDate, };
      var nextTasksResults = db.Database.SqlQuery<nextTask>(sql2, p);
      var isAny = nextTaskResults.Any() // error
    

    解决方法是发送到一个数组并使用它

      var nextTasks = nextTasksResults.ToArray();
      var isAny = nextTasks.Any();
    

    【讨论】:

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