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. 2
3- /er/layer Architecture Note! The different layers can be on the same computer (Logic Layers) or on different Computers in a network (Physical Layers) Presenta/on Tier Business Logic Tier Data Access Tier Data Source PL BL DAL Data Tier - DL Logic Tier 3
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 Different parts (Tiers) can be stored on different computers Different PlaYorms and Languages can be used etc. 4
h=p://en.wikipedia.org/wiki/mul//er_architecture 5
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/on s 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 6
3- /er Architecture Presenta/on Tier Presenta/on Tier Presenta/on Tier Different Devices can share the same Business and Data Access Code Business Logic Tier Data Access Tier Logic Tier The different Tiers can be physical or logical Stored Procedures Database Data Tier
3- /er + WebService Architecture - Example Installed on one or more Windows Servers in your LAN or in the Cloud Team Founda/on Server TFS Cient Web Server Web Services Business/ Data Logic Tier Data Source Stored Procedures Data Tier Team Founda/on Server Presenta/on Tier 8
3- /er Architecture Scenarios Client Client Internet Client Firewall Presenta/on Layer Presenta/on Layer Presenta/on Layer Client Client Web Service Presenta/on Layer Server Presenta/on Layer Local Network (LAN) Presenta/on Layer Business Logic Web Server Server Database Stored Procedures 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 3. Stored Procedures 4. Triggers 5. Script for some Dummy Data Note! Install them in this order 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 different Scripts inside SQL Server Management Studio 14
You are finished with the Exercise 15
Crea/ng the Logic Tier Hans- Pe=er Halvorsen, M.Sc.
Logic Tier ASP.NET Web Forms Presenta/on Tier WinForms Presenta/on Tier Windows Store App Presenta/on Tier Logic Tier Purpose: All the Apps should/could share the same Logic Tier To make your Apps easier to maintain and extend etc. Data Tier 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 first 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 finished 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; using Tuc.School.LogicTier; Since we are using the DataSet Class 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 { Note! Connec/onString is stored in App.config 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]; } } } 34
Note! Add System.Configura/on Reference 35
Create DB Connec/onString in App.config <?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 finished 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