public bool UpdateProduct(ProductEntity product)
 {
     // TODO: call data access layer to update product
     // first check to see if it is a valid price
     if (product.UnitPrice <= 0)
         return false;
     // ProductName can't be empty
     else if (product.ProductName == null
     || product.ProductName.Length == 0)
         return false;
     // QuantityPerUnit can't be empty
     else if (product.QuantityPerUnit == null
     || product.QuantityPerUnit.Length == 0)
         return false;
     // then validate other properties
     else
     {
         ProductEntity productInDB = GetProduct(product.ProductID);
         // invalid product to update
         if (productInDB == null)
             return false;
         // a product can't be discontinued if there are
         // non-fulfilled orders
         if (product.Discontinued == true
         && productInDB.UnitsOnOrder > 0)
             return false;
         else
             return productDAO.UpdateProduct(product);
     }
 }
 public ProductEntity GetProduct(int id)
 {
     /*
     // TODO: connect to DB to retrieve product
     ProductEntity p = new ProductEntity();
     p.ProductID = id;
     p.ProductName = "fake product name from data access layer";
     p.UnitPrice = (decimal)30.00;
     return p;
      */
     ProductEntity p = null;
     using (SqlConnection conn = new SqlConnection(connectionString))
     {
         SqlCommand comm = new SqlCommand();
         comm.CommandText = "select * from Products where ProductID=" + id;
         comm.Connection = conn;
         conn.Open();
         SqlDataReader reader = comm.ExecuteReader();
         if (reader.HasRows)
         {
             reader.Read();
             p = new ProductEntity();
             p.ProductID = id;
             p.ProductName = (string)reader["ProductName"];
             p.QuantityPerUnit = (string)reader["QuantityPerUnit"];
             p.UnitPrice = (decimal)reader["UnitPrice"];
             p.UnitsInStock = (short)reader["UnitsInStock"];
             p.UnitsOnOrder = (short)reader["UnitsOnOrder"];
             p.ReorderLevel = (short)reader["ReorderLevel"];
             p.Discontinued = (bool)reader["Discontinued"];
         }
         return p;
     }
 }
 public ProductEntity GetProduct(int id)
 {
     // TODO: call data access layer to retrieve product
     ProductEntity p = new ProductEntity();
     p.ProductID = id;
     p.ProductName = "fake product name from business logic layer";
     p.UnitPrice = (decimal)20.00;
     if (id > 50) p.UnitsOnOrder = 30;
     return p;
 }
 public bool UpdateProduct(ProductEntity product)
 {
     // TODO: connect to DB to update product
     using (SqlConnection conn = new SqlConnection(connectionString))
     {
         SqlCommand cmd = new SqlCommand("UPDATE products SET ProductName=@name,QuantityPerUnit=@unit,UnitPrice=@price,Discontinued=@discontinued WHERE ProductID=@id", conn);
         cmd.Parameters.AddWithValue("@name", product.ProductName);
         cmd.Parameters.AddWithValue("@unit", product.QuantityPerUnit);
         cmd.Parameters.AddWithValue("@price", product.UnitPrice);
         cmd.Parameters.AddWithValue("@discontinued", product.Discontinued);
         cmd.Parameters.AddWithValue("@id", product.ProductID);
         conn.Open();
         int numRows = cmd.ExecuteNonQuery();
         if (numRows != 1)
             return false;
     }
     return true;
 }