You are on page 1of 40

Database

Communica/on
in Visual Studio/C#
using 3-/er Arcitecture
The examples uses ADO.NET

Hans-Pe=er Halvorsen, M.Sc.

The database-centric style. Typically,


the clients communicate directly with
the database.

A three-/er style, in which clients


do not connect directly to the
database.
Web Services, etc.

Note! The dierent layers can be on the


same computer (Logic Layers) or on dierent
Computers in a network (Physical Layers)

3-/er/layer Architecture
Presenta/on Tier

PL

Business Logic Tier

BL
Logic Tier

Data Access Tier

Data
Source

DAL

Data Tier - DL

Why 3-Tier (N-Tier Architecture?)


Flexible applica/ons
Reusable code

Code once, use many /mes

Modularized

You need only to change part of the code


You can deploy only one part
You can Test only one part
Mul/ple Developers

Dierent parts (Tiers) can be stored on dierent


computers
Dierent PlaYorms and Languages can be used
etc.

h=p://en.wikipedia.org/wiki/Mul//er_architecture

3-/er/layer Architecture
Presenta4on Tier
This is the topmost level of the applica/on.
The presenta/on /er displays informa/on related to such services as browsing
merchandise, purchasing and shopping cart contents.
It communicates with other /ers by which it puts out the results to the
browser/client /er and all other /ers in the network.
In simple terms it is a layer which users can access directly such as a web page,
or an opera/ng systems GUI
Applica4on 4er (business logic, logic 4er, data access 4er, or middle 4er)
The logical /er is pulled out from the presenta/on /er and, as its own layer.
It controls an applica/ons func/onality by performing detailed processing.
Data 4er
This /er consists of database servers. Here informa/on is stored and retrieved.
This /er keeps data neutral and independent from applica/on servers or
business logic.
Giving data its own /er also improves scalability and performance.
h=p://en.wikipedia.org/wiki/Mul//er_architecture

3-/er Architecture

Presenta/on Tier

Presenta/on Tier

Presenta/on Tier

Business Logic Tier

Dierent Devices can share


the same Business and Data
Access Code

The dierent Tiers can be


physical or logical

Logic Tier
Data Access Tier

Stored Procedures
Database

Data Tier

3-/er + WebService Architecture - Example


Team Founda/on Server

Installed on one or more


Windows Servers in your LAN
or in the Cloud

Web
Web
Server Services

Business/
Data Logic
Tier
Stored
Procedures

Data
Source

Data
Tier

Team Founda/on Server

TFS Cient
Presenta/on
Tier

3-/er Architecture Scenarios

Client
Client

Client

Internet

Presenta/on Layer

Firewall

Presenta/on Layer

Presenta/on Layer

Client
Client

Web Service

Presenta/on Layer

Presenta/on Layer

Presenta/on Layer

Web
Server

Server

Local Network (LAN)

Stored
Database Procedures

Server
Business Logic

Data Access Logic

Crea/ng the Data Tier

Hans-Pe=er Halvorsen, M.Sc.

Data Tier
We are going to create the Database / Data Layer/Tier,
including:
1. Tables
2. Views
Note! Install them
in this order
3. Stored Procedures
4. Triggers
5. Script for some Dummy Data
Download Zip Files with Tables, Views, Stored Procedures
and Triggerse in order to create the Data Tier in SQL Server
(The ZIP File is located on the same place as this File)
11

Data Tier
Triggers
Stored Procedures
Views
Tables

Data Tier

SQL Server

12

Database Tables

13

Execute the dierent


Scripts inside SQL Server
Management Studio

14

You are nished with the Exercise

15

Crea/ng the Logic Tier

Hans-Pe=er Halvorsen, M.Sc.

Logic Tier
ASP.NET Web Forms
Presenta/on Tier

Windows Store App

WinForms

Presenta/on Tier

Presenta/on Tier

Logic Tier

Data Tier

Purpose:
All the Apps should/could
share the same Logic Tier
To make your Apps easier
to maintain and extend
etc.

Database
17

Create an Empty (Blank) Solu4on in Visual Studio

18

Add Project for Logic Tier (Data Access)


Select a Class Library Project

LogicTier
19

Add a New Class to the


Project (StudentData.cs)

StudentData.cs

20

Create the Code, e.g., like this (StudentData.cs):

Create your own Namespace

A View that collects data


from several tables

Improvements: Use Try... Catch ...

21

You should test the SQL Query in the SQL Server


Management Studio rst

22

Code (StudentData.cs):
using System.Data.SqlClient;
using System.Data.SqlTypes;
using System.Data;

namespace Tuc.School.LogicTier
{
public class StudentData
{
public DataSet GetStudentDB(string connectionString)
{
string selectSQL = "select StudentName, StudentNumber, SchoolName, ClassName,


Grade from StudentData order by StudentName";

// Define the ADO.NET objects.
SqlConnection con = new SqlConnection(connectionString);

SqlDataAdapter da = new SqlDataAdapter(selectSQL, con);

DataSet ds = new DataSet();
da.Fill(ds);

return ds;

}
}
}
23

Create a proper name for the Assembly (.dll File)


Right-click on the Project in the Solu/on Explorer and select Proper/es

Then Build your


Project (hopefully
with no errors)

This will be the Assembly for your


Logic Tier, that can be imported
and used in other projects.
Create once use it many /mes!!
24

You are nished with the Exercise

25

Crea/ng the Presenta/on Tier

Hans-Pe=er Halvorsen, M.Sc.

Presenta/on Layer
Desktop App: WinForms
We assume the App will be used only in the local LAN (or local on the same computer
where the database is located) and that we have direct access to the Database)

Label

DataGridView

27

Add a WinForm Project

28

Add a New Class (StudentWinForm.cs)

29

Add Code in Class

Add a Reference to the


Assembly in the Logic Tier

30

Code for Class StudentWinForm.cs


using System.Data;
Since we are using the DataSet Class

using Tuc.School.LogicTier;
Reference to our Logic Tier

namespace Tuc.School.WinFormApp
{
class StudentWinForm
{

public DataSet GetStudent(string connectionString)
{
StudentData studentData = new StudentData();

return studentData.GetStudentDB(connectionString);
}

}
}

Our Database Method in our Logic Tier


31

Create Form

Label

DataGridView

32

Create Form Code

33

WinForm Code
using System.Configuration;
using Tuc.School.WinFormApp;

namespace WinFormApp
{
public partial class Form1 : Form
{

private string connectionString =


ConfigurationManager.ConnectionStrings["SCHOOLConnectionString"].ConnectionString;

public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
FillStudentGrid();

}

private void FillStudentGrid()
{

DataSet ds = new DataSet();

StudentWinForm studentList = new StudentWinForm();

ds = studentList.GetStudent(connectionString);

dataGridViewStudentInformation.DataSource = ds.Tables[0];

}
}
}

Note!

Connec/onString is
stored in App.cong

34

Note! Add System.Congura/on Reference

35

Create DB Connec/onString in App.cong


<?xml version="1.0" encoding="utf-8" ?>
<configuration>

<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>


<connectionStrings>
<add name="SCHOOLConnectionString" connectionString="Data Source=macwin8;Initial Catalog=SCHOOL;Persist Security
Info=True;User ID=sa;Password=xxxxxx"
providerName="System.Data.SqlClient" />
</connectionStrings>


</configuration>

36

Test it

It works!!!

37

You are nished with the Exercise

38

Recommended Li=erature
Tutorial: Introduc/on to Database Systems
h=p://home.hit.no/~hansha/?tutorial=database
Tutorial: Structured Query Language (SQL)
h=p://home.hit.no/~hansha/?tutorial=sql
Tutorial: Using SQL Server in C#
Tutorial: Introduc/on to Visual Studio and C#
h=p://home.hit.no/~hansha/?tutorial=csharp

39

Hans-PeUer Halvorsen, M.Sc.


Telemark University College
Faculty of Technology
Department of Electrical Engineering, Informa4on Technology and Cyberne4cs


E-mail: hans.p.halvorsen@hit.no
Blog: hUp://home.hit.no/~hansha/

40

You might also like