title: Define data access layer
body: <p>It seems that everybody knows you're supposed to have a clear distinction between the GUI, the business logic, and the data access.  I recently talked to a programmer who bragged about always having a clean data access layer.  I looked at this code, and it turns out his data access layer is just a small class wrapping a few SQL methods (like ExecuteNonQuery and ExecuteReader).  It turns out that in his ASP.NET code behind pages, he has tons of SQL hard coded into the page_load and other events.  But he swears he's using a data access layer.</p>
  
  <p>So, I throw the question out.  How would you define a data access layer?</p>