我收到此错误,但如果可能的话,我不知道如何清除命令对象。我在 StackOverflow 上找到的想法,并在这里使用 2 个不同的参数变量,仍然粘在第一个执行命令上。更糟糕的是,我认为我可以通过调用两个函数将这个 ActionResult 分成两半,每个函数都有自己的 .执行存储命令。除非有人知道如何清除 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;
请参阅第二个更新命令
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);