如下代碼:
public int DianCai(int orderId,int dishId)
{
//點菜的時候需要判斷一下,這個訂單有沒有點過這個菜品,如果點過,只需要數量+1,如果沒有點過,則需要新增一行
string sql = "select count(*) from orderdetailinfo where orderid=@orderid and dishid=@dishid";
SqlParameter[] ps =
{
new SqlParameter ("@orderid",orderId),
new SqlParameter ("@dishid",dishId )
};
int count = Convert.ToInt32(SqlServerHelper.ExecuteScalar(sql , ps));
if (count>0)
{
//如果這個訂單點過這個菜品,則數量加1
sql = "update orderdetailinfo set count=count+1 where orderid=@orderid and dishid=@dishid";
}
else
{
//如果沒有點過這個菜品,則新增
sql = "insert into orderdetailinfo(orderid,dishid,count) values(@orderid,@dishid,1)";
}
return SqlServerHelper.ExecuteNonQuery(sql, ps);
}
public static int ExecuteNonQuery(string sql,params SqlParameter [] ps)
{
using(SqlConnection sqlcn =new SqlConnection (connString ))
{
SqlCommand sqlcmd = new SqlCommand(sql, sqlcn);
sqlcn.Open();
sqlcmd.Parameters.AddRange(ps);
int number=sqlcmd.ExecuteNonQuery();
sqlcmd.Parameters.Clear();
return number;
}
}
這樣運行的時候,每次都報錯:
“System.ArgumentException”型別的未經處理的例外在 System.Data.dll 中發生
其他資訊: 另一個 SqlParameterCollection 中已包含 SqlParameter。
請大神指點。
uj5u.com熱心網友回復:
你的變數 ps 被使用了兩次。試試重新生成一個,再呼叫。uj5u.com熱心網友回復:
#1的說法是正確的。很久以前,我也遇到過這個問題。
每次需要實體化新的sqlparameter。
uj5u.com熱心網友回復:
要看看你的ExecuteScalar代碼,估計沒有 sqlcmd.Parameters.Clear();這句話uj5u.com熱心網友回復:
SqlParameter[] ps ={
new SqlParameter ("@orderid",orderId),
new SqlParameter ("@dishid",dishId )
};
int count = Convert.ToInt32(SqlServerHelper.ExecuteScalar(sql , ps));
ps =
{
new SqlParameter ("@orderid",orderId),
new SqlParameter ("@dishid",dishId )
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/21149.html
標籤:C#
上一篇:關于datatable的問題
