我有以下代码:
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参数?
谢谢
答案 0 :(得分:3)
我建议invidparam
是您的问题参数,因为它是我看到的唯一被两次使用的参数。在db.Database.SqlQuery<int>("EXEC CheckIfAlreadyInPR#invid#userid @invid, @userid", invidParam, useridParamCheck);
中一次,在db.Database.ExecuteCommand()
的两个实例中一次。
错误本身与一个SqlParameter
对象被多次使用有关,而不是同一参数名称被多次使用。
答案 1 :(得分:0)
我使用以下代码遇到此错误
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();