Shapes that can be saved to a database
Note: I don't claim to be an expert in SOLID principles, I do understand abstraction a bit though. 

Back to SOLID, CalculateArea violates the Open/Closed principle (The most frustrating concept to me). That is, when you add a shape  you have to go and modify the code by adding an if-statement, this can easily solved by using interfaces,

 interface IShape{
    double CalculateArea();
 } 

 class Rectangle : IShape{
    double CalculateArea(){
       return Width * Height;
    }
 } 


And so on for different shapes, so there is no need for if-statements. Btw: how come you representing a circle in a class called Box??

Single responsibility principle is being violated as well, where your class represents a Box Object and persists it to a database, these are two different responsibilities. You should rather have Data Access Layer to deal with a very HIGH dependency like a database.  

In regards to SQL generation you can abstract those as well using interfaces, and that is, given a shape get its sql code.

  interface ISQLShapeTemplates{
      DbCommand InsertionCode(IShape shape);
      DbCommand SelectCommand(IShape shape); 
  }


I used DbCommand and not SqlCommand because it's more abstract .