在一个ActionResult“已经使用的参数”中运行两次.ExecuteStoreCommand时出错

时间:2014-11-17 22:06:49

标签: c# asp.net-mvc parameters actionresult sqlclient

我收到此错误,但如果可能的话,我不知道如何清除命令对象。我在StackOverflow上找到并且在这里使用2个不同参数变量的想法仍然粘在第一个执行命令上。更糟糕的是,我认为我可以通过调用两个函数将这个ActionResult分成两半,每个函数都有自己的.ExecuteStoreCommand。除非有人知道如何清除EF中的参数? 在ADO.NET中,它更简单:Command.Paramters.Clear()

System.ArgumentException:SqlParameter已包含在另一个SqlParameterCollection中。

var @ThisBatch= new System.Data.SqlClient.SqlParameter("ThisBatch",System.Data.SqlDbType.VarChar,3,"BactiBatchID");
@ThisBatch.Value= Session["ThisBatch"];

var sql ="UPDATE dbo.BactiBatches SET BatchStatus = 'C' WHERE BactiBatchID= @ThisBatch";

_db.ExecuteStoreCommand(sql, ThisBatch);


var @ThisBatch2 = new System.Data.SqlClient.SqlParameter("ThisBatch2", System.Data.SqlDbType.VarChar, 3, "Batch_ID");
@ThisBatch2.Value = Session["ThisBatch"];

sql = "";
sql = "UPDATE dbo.BactiBucket SET RecvDate = GetDate() WHERE Batch_ID= @ThisBatch2";


_db.ExecuteStoreCommand(sql, ThisBatch);


return RedirectToAction("AddColiform");

编辑/更新: 好的,我能够这样做。不确定是否有更好的答案,所以我会在回答我自己的问题之前等待:

_db.ExecuteStoreCommand("UPDATE dbo.BactiBatches SET BatchStatus = 'C' WHERE BactiBatchID= {0}", Session["ThisBatch"]);
_db.ExecuteStoreCommand("UPDATE dbo.BactiBucket SET RecvDate = GetDate() WHERE Batch_ID={0}", Session["ThisBatch"]);

Session["ThisBatch"] = 0;

1 个答案:

答案 0 :(得分:1)

请参阅第二个更新命令

var @ThisBatch2 = new System.Data.SqlClient.SqlParameter("ThisBatch2", System.Data.SqlDbType.VarChar, 3, "Batch_ID");
@ThisBatch2.Value = Session["ThisBatch"];

sql = "";
sql = "UPDATE dbo.BactiBucket SET RecvDate = GetDate() WHERE Batch_ID= @ThisBatch2";

_db.ExecuteStoreCommand(sql, ThisBatch);

我认为您确实希望使用ThisBatch2代替ThisBatch作为_db.ExecuteStoreCommand方法的第二个参数,因此请将其更改为ThisBatch2

var @ThisBatch2 = new System.Data.SqlClient.SqlParameter("ThisBatch2", System.Data.SqlDbType.VarChar, 3, "Batch_ID");
@ThisBatch2.Value = Session["ThisBatch"];

sql = "";
sql = "UPDATE dbo.BactiBucket SET RecvDate = GetDate() WHERE Batch_ID= @ThisBatch2";

_db.ExecuteStoreCommand(sql, ThisBatch2);