我正在使用存储过程在用户点击批准时更新表但是我收到消息表明它已成功批准但表未更新。
更新 我现在只能更新一个项目;即使我选择了多个项目,也只会更新一个项目。
存储过程
Update RequisitionItem
set [status] = 0,
[approve_date] = @approve_date
--[ApprovedBy]=@ApprovedBy
where [status]=-1 and Req_No=@reqNumber and item_no=@item_no
方法
public void SetRequisitionStatus0(List <string> reqNumber,List <string> item_no)
{
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand command = new SqlCommand();
command.CommandText = "requisition_sp_setstatus0";
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@reqNumber", SqlDbType.VarChar);
command.Parameters.Add("@item_no", SqlDbType.VarChar);
//command.Parameters.Add("@ApprovedBy", SqlDbType.VarChar);
command.Parameters.Add("@approve_date", SqlDbType.DateTime).Value = DateTime.Now;
using (command.Connection = connection)
{
try
{
connection.Open();
foreach (var item in reqNumbers)
{
command.Parameters["@reqNumber"].Value = item;
foreach (var item1 in item_no)
{
command.Parameters["@item_no"].Value = item1;
}
command.ExecuteNonQuery();
}
}
finally
{
connection.Close();
}
}
return;
}
答案 0 :(得分:0)
我认为foreach循环让你搞砸了。内循环将循环整个列表(item_no)然后返回外循环,然后内循环将再次遍历整个列表,总是给你最后一项。您需要for
循环,类似
for(int i = 0; i < reqNumbers.count; i++)
{
command.Parameters["@reqNumber"].Value = reqNumbers[i];
command.Parameters["@item_no"].Value = item_no[i];
command.ExecuteNonQuery();
}
您也不需要关闭连接 - using语句将自动关闭它。而且你不需要最后的return
。