Лучший способ обработать исключение перед обновлением базы данных - PullRequest
0 голосов
/ 20 ноября 2018

Мне нужно проверить правильность ввода перед обновлением моей базы данных.

Я создал метод 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 голосов
/ 20 ноября 2018

Просто проверьте результат вызова на 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.";
}
0 голосов
/ 20 ноября 2018

Вы можете выдать собственное исключение:

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.";
}

это только одно из многих условий, которые должны быть выполнены перед обновлением db

По-прежнему нет необходимости в исключении.

bool validRecord = true;

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

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

Вы можете сделать подобное, просто добавив строку или добавив в список, который начинается пусто.В конце, если элемент имеет какую-либо длину, покажите ошибки.

0 голосов
/ 20 ноября 2018
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}");
}
...