运行 时出错.在一个操作结果中执行存储命令两次“参数已使用”

本文关键字:参数 两次 参数已使用 命令 执行 出错 一个 运行 结果 操作 存储 | 更新日期: 2023-09-27 18:30:55

我收到此错误,但如果可能的话,我不知道如何清除命令对象。我在 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);