Je dois vérifier si une entrée est valide avant de mettre à jour ma base de données.

J'ai créé une méthode booléenne pour vérifier si elle est valide.

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

    }
}

Et je le vérifie dans ma méthode de mise à jour.

 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();
            }
    }

J'ai essayé de détecter et de signaler l'erreur, mais cela permet une entrée invalide lorsqu'elle est fausse.

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

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

Quelle est la meilleure façon de détecter et de signaler l'erreur avant d'essayer l'insert?

-2
Doug Farrell 20 nov. 2018 à 23:19

3 réponses

Meilleure réponse

Vous pouvez lancer votre propre exception:

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

Mais ne fais pas ça!

Vous avez déjà un booléen vous indiquant que la fonction a échoué. Utilisez-le simplement avec un bloc if normal:

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

ce n'est que l'une des nombreuses conditions à remplir avant de mettre à jour la base de données

Il n'y a toujours pas besoin d'exception.

bool validRecord = true;

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

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

Vous pouvez faire une chose similaire en ajoutant simplement à une chaîne ou en ajoutant à une liste qui commence vide. À la fin, si l'élément a une longueur, montrez les erreurs.

3
Joel Coehoorn 20 nov. 2018 à 21:11

Vérifiez simplement le résultat de l'appel à validProject et lancez une exception si elle renvoie 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
Lews Therin 20 nov. 2018 à 20:24
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}");
}
0
Ryan Schlueter 20 nov. 2018 à 20:23