我有一些与我的 SQL 服务器交互的类似功能(选择、调用存储过程等),除了下面的功能外,所有功能都可以使用。每个 SqlConnection
都包含在一个 using block 中,而 SqlCommand
也包含在一个 using block 中。
此代码在尝试添加 @LastUpdated
参数时失败。我尝试了一些我在其他帖子中看到的建议:cmd.Parameters.Clear()
、在 using 中包装等,但没有成功。当重复尝试设置发现的相同参数时,解决了一些具有相同错误的帖子。可能我漏掉了,但我已经看了几个小时了,甚至还擦了眼镜。任何方向将不胜感激。
private void _AddCartItem(bool hasEventInCart, _EventCart cartContents, ref int cartItemId)
{
using (SqlConnection sqlConnection = new SqlConnection(_striMISConnection))
{
sqlConnection.Open();
using (SqlCommand cmd = sqlConnection.CreateCommand())
{
SqlParameter param = new SqlParameter();
cmd.Parameters.Clear();
// add/update CartItem
if (hasEventInCart)
{
// Update item
cmd.CommandText = "SProc2Insert @CartItemId, @ID, 'Event', @Created, @LastUpdated";
param.ParameterName = "@CartItemId";
param.Value = cartItemId;
cmd.Parameters.Add(param);
}
else
{
// add item
cmd.CommandText = "SProc2Update @ID, 'Event', @Created, @LastUpdated";
}
cmd.CommandType = CommandType.Text;
param.ParameterName = "@Created";
param.Value = DateTime.Now.ToString();
cmd.Parameters.Add(param);
param.ParameterName = "@LastUpdated";
param.Value = DateTime.Now.ToString();
**cmd.Parameters.Add(param);**
param.ParameterName = "@ID";
param.Value = this.ID;
cmd.Parameters.Add(param);
if (hasEventInCart)
{
cmd.ExecuteNonQuery(); // do the update
}
else
{
cartItemId = (int)cmd.ExecuteScalar();
foreach (var currentCartEvent in cartContents.CartEvents)
{
if (currentCartEvent.EventCode == this.EventCode)
{
currentCartEvent.CartItemID = cartItemId;
}
}
}
cmd.Parameters.Clear();
}
}
}
最佳答案
我遇到了同样的问题,你可以用下面的代码解决它:
if (SqlParams != null && SqlParams.Count > 0)
{
foreach (SqlParameter spp in SqlParams )
{
SqlParameter nameParam = new SqlParameter(spp.ParameterName, spp.SqlValue);
mycmd.Parameters.Add(nameParam);
}
}
关于c# - 错误 : "The SqlParameter is already contained by another SqlParameterCollection" when adding a Parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32366211/