更新数据库之前处理异常的最佳方法

时间:2018-11-20 20:19:54

标签: c# boolean try-catch

在更新数据库之前,我需要检查输入是否有效。

我创建了一个bool方法来检查它是否有效。

private bool validProject(string ProjectID)
{
    using (AXEntitiesDEV db = new AXEntitiesDEV())
    {
        return db.PROJTABLEs.Any(c => c.PROJID==ProjectID);

    }
}

正在检查我的更新方法。

 protected void Insert(object sender, EventArgs e)
    {
        using (GPSE2Entities entities = new GPSE2Entities())
        {
            TextBox txtEditTime = (TextBox)gvDailyGPS.FooterRow.FindControl("txtFooterTime");
            DropDownList ddlEventDateOnly = (DropDownList)gvDailyGPS.FooterRow.FindControl("ddlFooterDateOnly");
            DateTime EDT = DateTime.Now;
            TextBox txtAddProjectID = (TextBox)gvDailyGPS.FooterRow.FindControl("txtAddProjectID");
            validProject(txtAddProjectID.Text);
            DailyGPSTable newLOB = new DailyGPSTable
                {
                    EventDateTime = EDT,
                    Project = txtAddProjectID.Text,
                };

                entities.DailyGPSTables.Add(newLOB);
                {
                    entities.SaveChanges();
                    BindGrid();
                }
                entities.SaveChanges();
            }
    }

我尝试捕获并报告该错误,但如果为false,则允许输入无效内容。

try
{
    validProject(txtAddProjectID.Text);
}
catch (ArgumentException)
{
    addErr.Text = "";

    addErr.Text = "Invalid Project ID.";
}

在尝试插入之前我可以捕获并报告错误的最佳方法是什么?

3 个答案:

答案 0 :(得分:3)

您可以抛出自己的异常:

try
{
    if (!validProject(txtAddProjectID.Text))
        throw new ArugmentExceptioN(txtAddProjectID.Text);
}
catch (ArgumentException)
{
    addErr.Text = "";
    addErr.Text = "Invalid Project ID.";
}

但是不要那样做!

您已经有一个布尔值告诉您该函数失败。只需将其与常规if块一起使用:

if (!validProject(txtAddProjectID.Text))
{
    addErr.Text = "";
    addErr.Text = "Invalid Project ID.";
}

  

这只是更新数据库之前必须满足的许多条件之一

仍然没有例外。

bool validRecord = true;

validRecord = validRecord && validProject(txtAddProjectID.Text);
validRecord = validRecord && someOtherCheck();
validRecord = validRecord && someFinalCheck();
validRecord = validRecord && howEverManyYouNeed();

if (!validRecord)
{
    ShowError();
}
else
{
    UpdateDB();
}

您可以通过添加一个字符串或添加一个以空开头的列表来执行类似的操作。最后,如果项目有任何长度,请显示错误。

答案 1 :(得分:0)

try
{
  validProject(txtAddProjectID.Text);
}
catch (ArgumentException e)
{
  addErr.Text = "";

  addErr.Text = e.Message;
}


private static void validProject(object text)
{
  throw new ArgumentException($"Invalid Project ID.{text}");
}

答案 2 :(得分:0)

只需检查对validProject的调用结果,并在返回false时抛出异常:

try
{    
    if (!validProject(txtAddProjectID.Text))
        throw new ArgumentException("Argument is invalid", nameof(txtAddProjectID.Text));
}
catch (ArgumentException)
{
    addErr.Text = "";

    addErr.Text = "Invalid Project ID.";
}