This article is written to see the importance of having a separate Data Access layer.
A good data access layer is critical for most business applications, whether that layer resides on a middle-tier application server, a web server, or on the client. Data access layers tend to involve a lot of error-prone, repetitive coding if you try to do it by hand. You can alleviate some of that by designing a good set of base and helper classes to encapsulate the repeating patterns, or by using a code generation tool. However, you still usually have to write all the data access methods by hand for the ad-hoc queries that service large parts of your application.
Now let me talk about the 3 tier architecture

The GUI layer

The GUI is the "top layer". It contains all things that are visible to the user, the 'outside' of the system, such as screen layout and navigation.
The GUI layer has techniques like HTML, CSS, Applet, Servlet, JSP, JHTML.

The Business layer

This is the core of the system, the linking pin between the other layers. Business-objects and data storage should be brought as close together as possible, ideally, they should be together physically on the same server. This way - especially with complex accesses - network load is eliminated. The client only receives the results of a calculation - through the business-layer of course.

Database Layer

The database layer takes care of persistence. An object from the database layer can write itself to one or more tables. In the database layer, you'll find things like database, connection, table, SQL, and result set.
Advantages
With this article, I have attached the project for Data layer implementation in c#.