The advantages of a Data Access Layer
Whether or not you choose to implement other layers, isolating data access code into a separate component has many advantages.
Maintainability
Keeping all the data access code in one place can make it easier to change. Changing code that is spread out throughout an application can be difficult and error prone. There are also opportunities to organise and document the code in a way that would not be easy otherwise.
Code re-use / framework
Keeping the data access code together can make it a lot easier to identify duplicate or similar code that can be consolidated, simplified or generalised. Usually, a standardised code framework can be created within the DAL to simplify and reduce the data access code.
Consistency and Standardisation
Data access code is usually very repetitive and there is often a lot of it. Keeping it all together makes it easier to keep the code consistent in terms of code layout, functional implementation, variable naming and code documentation.
Plug-ability
Isolating the implementation of the data access from the rest of the application has the knock on effect of making it easier to swap out. If you needed to provide the user with the option to store data in an MS Jet database or a SQL Server database then a DAL can expose a single interface and hide the implementation from the rest of the application. The rest of the application doesn't necessarily need to know whether it's dealing with SQL Server or MS Jet.
Sharing
You may find that other applications need to access your database. This is one of those situations where you often end up duplicating code across different applications. By keeping all the data access code together in a DAL component, it can be shared across applications. Taken to the next level, adding a web service interface would allow any application to access the database via your DAL.
Testing
Isolating the data access functionality gives you the potential to test it in a way that may have been impossible before. The DAL can be tested in isolation from the rest of the application. Either through your own test app or via an automated test tool such as NUnit.