gpt4 book ai didi

c# - 如何在不退出循环的情况下处理异常?

转载 作者:太空宇宙 更新时间:2023-11-03 21:40:34 28 4
gpt4 key购买 nike

我有以下问题:

我尝试插入多个员工数据,但是员工数据应该只插入一次,但是如果我选择多个员工并且之前插入了其中一个怎么办,根据数据库约束会抛出一个错误。

我的问题是(最佳实践):如何处理这个异常,我想恢复插入未重复的员工而不退出我的循环,因为那个异常。


protected void ibtn_save_detail_Click(object sender, ImageClickEventArgs e)
{
try
{
Fill_Form();
RewardDetails obj = new RewardDetails();
var collection = ddl_employees.CheckedItems;
for (int i = 0; i < collection.Count; i++)
{
obj.Emp_num = int.Parse(collection[i].Value);
obj.Req_ser = int.Parse(reqSer);
obj.Req_year = int.Parse(reqYear);
DataTable dt = Utilities.GetDep(obj.Emp_num);
obj.Main_code = int.Parse(dt.Rows[0]["dep_code"].ToString());
obj.Year = int.Parse(dt.Rows[0]["dep_year"].ToString());
obj.Dep_name = dt.Rows[0]["dep_name"].ToString();

string res = obj.InsertReward();//exception in case of repetition .

if (!string.IsNullOrEmpty(res))
{

div_detail_result.Visible = true;
SetMessage("");

}
else
{
SetMessage("Adding the employee has been done :" + collection[i].Text.Trim());
}
}
BindDetailsGV(obj.Req_ser, obj.Req_year);
ddl_employees.ClearCheckedItems();

}
catch (Exception ee)
{
SetMessage("Error,this employee has been added before.");
ddl_employees.ClearCheckedItems();
}
}

最佳答案

将您的 try/catch 移动到仅应用于 obj.InsertReward(); 行。另外,不要捕获 Exception,只捕获 insertReward 抛出的特定异常。

所以代码最终可能是这样的:

protected void ibtn_save_detail_Click(object sender, ImageClickEventArgs e)
{
Fill_Form();
RewardDetails obj = new RewardDetails();
var collection = ddl_employees.CheckedItems;
for (int i = 0; i < collection.Count; i++)
{
obj.Emp_num = int.Parse(collection[i].Value);
...

string res;
try
{
res = obj.InsertReward();
// stuff to do if added
}
catch (RewardExistsException)
{
// stuff to do if already exists
}
}
}

关于c# - 如何在不退出循环的情况下处理异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19492950/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com