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

标签 c# asp.net exception loops constraints

我有以下问题:

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

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


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/

相关文章:

c# - region activation 和 region RequestNavigate 有什么区别?

c# - 在 ASP.NET 中检测/估计 http 请求的国家/地区

Haskell 中的异常(exception)

PHPUnit 弃用警告未通过测试

c++ - 为什么要在方法的定义中使用 throw?

c# - 用于家庭开发的免费云数据库服务

c# - 以 Func 为键的字典

c# - Linq to Sql : Change Database for each connection

c# - 我应该如何从我的服务层方法中公开总记录数和分页记录的 IEnumerable 集合?

Web 应用程序中的 C# 线程问题