DAL Update methode
Home

DAL Update methode

DAL Update methode

We moeten de waarden van de klommen van één bepaalde rij in de tabel kunnen wijzigen.

Probleem

We hebben de id van de te wijzigen rij nodig om de te wijzigen rij in de tabel op te zoeken. De vullen de nieuwe waarden in in de eigenschappen van het Model. Als we de waarde niet willen wijzigen moeten we de oorspronkelijke waarde meegeven. De Update stored procedure verlangt immers alle waarden. De waarden die niet gewijzigd moeten worden en de te wijzigen waarden.

We willen feedback geven aan de gebruiker over de update. Er zijn drie toestanden die we in de gaten moeten houden:

  1. database foutmelding
  2. sql foutmelding
  3. update is gelukt

Design

We gebruiken een try catch om feedback te geven op systeemfouten en SQL server fouten. We interpreteren de retourwaarde van de ExecuteNonQuery methode. Als parameter geven we een BBL object mee. In ASP.NET MVC is dat vaak het model. Als de Id niet bestaat zal SQL een 0 waarde retourneren.

Oplossing

public int Update()
{
    SqlConnection connection = new SqlConnection();
    connection.ConnectionString = ConfigurationManager.
        ConnectionStrings["WebwinkelWindowsAuthentication"].ToString();
    SqlCommand command = new SqlCommand();
    // in de CommandText eigenschap stoppen de naam
    // van de stored procedure
    string sqlString = "OrderStatusUpdate";
    //we use here a getter method to obtain the value to be saved,
    command.Parameters.Add(new SqlParameter("@Name", SqlDbType.NVarChar, 255)).Value = Model.Name;
    command.Parameters.Add(new SqlParameter("@Description", SqlDbType.NVarChar, 1024)).Value = Model.Description;
    command.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int)).Value = Model.Id;
    // zeg aan het command object dat het een stored procedure
    // zal krijgen en geen SQL Statement
    command.CommandType = CommandType.StoredProcedure;
    // stop het sql statement in het command object
    command.CommandText = sqlString;
    // geeft het connection object door aan het command object
    command.Connection = connection;
    this.message = "Niets te melden";
    // we gaan ervan uit dat het mislukt
    int result = 0;
    using (connection)
    {
        try
        {
            connection.Open();
            //Verbinding geslaagd
            result = command.ExecuteNonQuery();
            // we moeten kijken naar de return van ExecuteNonQuery
            // retourneert het aantal rijen dat gedeleted is
            if (result == 0)
            {
                this.message = " OrderStatus is niet geüpdated.";
            }
            else
            {
                this.message = " OrderStatus is geüpdated.";
            }
        }
        catch (SqlException e)
        {
            this.message = e.Message;
        }
    }
    return result; // 0 of de Id van de nieuwe rij
}

JI
2017-01-21 16:26:13