41
pdfcrowd.com open in browser PRO version Are you a developer? Try out the HTML to PDF API Advertisements Advertisements Congratulations to all the monthly winners of June 2013, they have won INR 3200 cash and INR 24447 worth gifts. Home Freshers Career Advice Articles Interviews Videos Forums Codes Blogs Jobs ASP.NET MVC Community Jokes Chat MVPs | ASP.NET, WPF, SSIS etc. tutorials | Catalog | Coding Horror | Downloads | Quick Links | Top Posts | Top Authors | .NET News | Bookmarks | Search | Subscribe Online : 18969 | Welcome, Guest! Register Login +126 Recommend this on Google Search Home > Articles > ASP.NET > 3-Tier Architecture in ASP.NET with C# Learn Windows Metro in 9 simple articles Winners Niladri.Biswas Announcements Like us on Facebook DotNetFunda Like 9,628 people like DotNetFunda Also read: Forms Authentication in ASP.NET with C# | SEO friendly pagination using asp:DataPager control | ListView Tips and Ticks 3-Tier Architecture in ASP.NET with C# 21 vote(s) Rat ing: 4.71 out of 5 Article posted by SheoNarayan on 5/4/2008 | Views: 594034 | Category: ASP.NET | Level: Intermediate Tweet 9 23 Submit Article | Search Articles | Articles Home | 3-Tier architecture is a very well know buzz word in the world of software development whether it web based or desktop based. In this article I am going to show how to design a web application based on 3-tier architecture. Download Download source code for 3-Tier Architecture in ASP.NET with C# Updated on July 01 2008: Source Code attached Introduction 3-Tier architecture generally contains UI or Presentation Layer, Business Access Layer (BAL) or Business Logic Layer and Data Access Layer (DAL). Presentation Layer (UI) Presentation layer cotains pages like .aspx or windows form where data is Share 11

3 Tier Sample

Embed Size (px)

DESCRIPTION

Document telling how to create 3-tier application with mvc in asp.net

Citation preview

Page 1: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

A dvertisements

A dvertisements

Congratulations to all the monthly winners of June 2013, they have won INR 3200 cash and INR 24447 worth gifts.

Home Freshers Career Advice Articles Interviews Videos Forums Codes Blogs Jobs ASP.NET MVC Community Jokes Chat

MVPs | ASP.NET, WPF, SSIS etc. tutorials | Catalog | Coding Horror | Downloads | Quick Links | Top Posts | Top Authors | .NET News | Bookmarks | Search | Subscribe

Online : 18969 | Welcome, Guest! Register Login +126 Recommend this on Google Search

Home > Articles > ASP.NET > 3-Tier Architecture in ASP.NET with C#

Learn

Windows Metroin 9 simple articles

Winners

Niladri.Biswas

Announcements

Like us on Facebook

DotNetFunda

Like

9,628 people like DotNetFunda

Also read: Forms Authentication in ASP.NET with C# | SEO friendly pagination using asp:DataPager control | ListView Tips and Ticks

3-Tier Architecture in ASP.NET with C#21 vote(s)

Rating: 4.71 out of 5

Article posted by SheoNarayan on 5/4/2008 | Views: 594034 | Category: ASP.NET | Level: Intermediate

Tweet 9 23

Submit Article | Search Articles | Articles Home |

3-Tier architecture is a very well know buzz word in the world of softwaredevelopment whether it web based or desktop based. In this article I am going toshow how to design a web application based on 3-tier architecture.

Download

Download source code for 3-Tier Architecture in ASP.NET with C#

Updated on July 01 2008: Source Code attached

Introduction

3-Tier architecture generally contains UI or Presentation Layer, Business AccessLayer (BAL) or Business Logic Layer and Data Access Layer (DAL).

Presentation Layer (UI) Presentation layer cotains pages like .aspx or windows form where data is

Share 11

Page 2: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

Facebook soc ial plugin

Top Articles Authors

Wed, 24-Jul-2013 Authors

All Time Authors

36600 3155012250

Latest members | More ...

(Statis tic s delayed by 5 minutes)

Ads

presented to the user or input is taken from the user.

Business Access Layer (BAL) or Business Logic Layer BAL contains business logic, validations or calculations related with the data, ifneeded. I will call it Business Access Layer in my demo.

Data Access Layer (DAL) DAL contains methods that helps business layer to connect the data and performrequired action, might be returning data or manipulating data (insert, update,delete etc). For this demo application, I have taken a very simple example. I amassuming that I have to play with record of persons (FirstName, LastName, Age)and I will refer only these data through out this article.

Designing 3-Tier Architecture

For the ease of understanding, I have created BAL, DAL into the App_Code folder. In real scenario, you should createseparate projects for BAL, DAL (as Class Library) and UI (as Web project) and reference your BAL into UI.

Data Access Layer Lets proceed with desiging 3-Tier architecture. To do that lets proceed with DAL, BAL and then UI. Add a class named by rightclicking App_Code folder. (In my case I have a 3-Tier folder inside App_Code folder, you can directly add inside App_Code or youcan create a separate project for DAL and add reference of this project into your BAL.) and copy-paste folowing code (Your canoverwrite your default written code for the class file by pasting this code). Here, I have assumed that you will create therespective stored procedure yourself into the database or you may download attachment fromhttp://www.dotnetfunda.com/articles/article18.aspx article and look for App_Data folder for complete databasestructure and stored procedure for this article.

Data Access Layer (DAL)

Page 3: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

Articles Categories

.NET Framework Articles

ADO.NET Articles

ASP.NET Articles

ASP.NET AJAX Articles

ASP.NET MVC Articles

Azure Articles

Best Practices Articles

BizTalk Server Articles

C# Articles

Cloud Articles

CMS Articles

CSS Articles

Error and Resolution Articles

F# Articles

HTML 5 Articles

IIS Articles

JavaScript Articles

jQuery Articles

Kinect Articles

Advertisements

Code for Data Access Layer

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

using System.Data.SqlClient;

/// <summary>

/// Summary description for PersonDAL3

/// </summary>

public class PersonDAL3

{

string connStr = ConfigurationManager.ConnectionStrings["TutTestConn"].ToString();

public PersonDAL3()

{

}

/// <summary>

Page 4: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

/// Used to insert records into database

/// </summary>

/// <param name="firstName"></param>

/// <param name="lastName"></param>

/// <param name="age"></param>

/// <returns></returns>

public int Insert(string firstName, string lastName, int age)

{

SqlConnection conn = new SqlConnection(connStr);

conn.Open();

SqlCommand dCmd = new SqlCommand("InsertData", conn);

dCmd.CommandType = CommandType.StoredProcedure;

try

{

dCmd.Parameters.AddWithValue("@firstName", firstName);

dCmd.Parameters.AddWithValue("@lastName", lastName);

dCmd.Parameters.AddWithValue("@age", age);

return dCmd.ExecuteNonQuery();

}

catch

{

throw;

}

finally

{

dCmd.Dispose();

conn.Close();

Page 5: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

conn.Dispose();

}

}

/// <summary>

/// Update record into database

/// </summary>

/// <param name="personID"></param>

/// <param name="firstName"></param>

/// <param name="lastName"></param>

/// <param name="age"></param>

/// <returns></returns>

public int Update(int personID, string firstName, string lastName, int age)

{

SqlConnection conn = new SqlConnection(connStr);

conn.Open();

SqlCommand dCmd = new SqlCommand("UpdateData", conn);

dCmd.CommandType = CommandType.StoredProcedure;

try

{

dCmd.Parameters.AddWithValue("@firstName", firstName);

dCmd.Parameters.AddWithValue("@lastName", lastName);

dCmd.Parameters.AddWithValue("@age", age);

dCmd.Parameters.AddWithValue("@personID", personID);

return dCmd.ExecuteNonQuery();

}

Page 6: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

catch

{

throw;

}

finally

{

dCmd.Dispose();

conn.Close();

conn.Dispose();

}

}

/// <summary>

/// Load all records from database

/// </summary>

/// <returns></returns>

public DataTable Load()

{

SqlConnection conn = new SqlConnection(connStr);

SqlDataAdapter dAd = new SqlDataAdapter("LoadAll", conn);

dAd.SelectCommand.CommandType = CommandType.StoredProcedure;

DataSet dSet = new DataSet();

try

{

dAd.Fill(dSet, "PersonTable");

return dSet.Tables["PersonTable"];

}

Page 7: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

catch

{

throw;

}

finally

{

dSet.Dispose();

dAd.Dispose();

conn.Close();

conn.Dispose();

}

}

/// <summary>

/// Delete record from database

/// </summary>

/// <param name="personID"></param>

/// <returns></returns>

public int Delete(int personID)

{

SqlConnection conn = new SqlConnection(connStr);

conn.Open();

SqlCommand dCmd = new SqlCommand("DeleteData", conn);

dCmd.CommandType = CommandType.StoredProcedure;

try

{

dCmd.Parameters.AddWithValue("@personID", personID);

Page 8: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

return dCmd.ExecuteNonQuery();

}

catch

{

throw;

}

finally

{

dCmd.Dispose();

conn.Close();

conn.Dispose();

}

}

}

In the above code, I have a member variable called connStr that is getting database connection string from my web.config filethat is being used through out the class. I have separate method for inserting, deleting, updating records into database andloading records from database. I am not goint into details of how I am connecting database and manipulating the data just tomake this tutorials short.

Business Access Layer (BAL)

Now, create a class named PersonBAL3 into App_Code folder by right clicking it and write respective methods for calling Insert,Delete, Update and Load methods of Data Access Layer class file (PersonDAL3) (In my case I have a 3-Tier folder insideApp_Code folder, you can directly add inside App_Code or you can create a separate project for BAL and add reference of thisproject into your Presentation Layer). As we don't have any business logic here so simply instantiate the PersonDAL3 class ofDAL and call methods. Below is the code for BAL (Your can overwrite your default written code for the class file by pasting thiscode).

Code for Business Access Layer

Page 9: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

using System;

using System.Data;

using System.Configuration;

using System.Web;

using System.Web.Security;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Web.UI.WebControls.WebParts;

using System.Web.UI.HtmlControls;

/// <summary>

/// Summary description for PersonBAL3

/// </summary>

public class PersonBAL3

{

public PersonBAL3()

{

}

/// <summary>

/// insert records into database

/// </summary>

/// <param name="firstName"></param>

/// <param name="lastName"></param>

/// <param name="age"></param>

/// <returns></returns>

Page 10: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

public int Insert(string firstName, string lastName, int age)

{

PersonDAL3 pDAL = new PersonDAL3();

try

{

return pDAL.Insert(firstName, lastName, age);

}

catch

{

throw;

}

finally

{

pDAL = null;

}

}

/// <summary>

/// Update records into database

/// </summary>

/// <param name="personID"></param>

/// <param name="firstName"></param>

/// <param name="lastName"></param>

/// <param name="age"></param>

/// <returns></returns>

public int Update(int personID, string firstName, string lastName, int age)

{

Page 11: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

PersonDAL3 pDAL = new PersonDAL3();

try

{

return pDAL.Update(personID, firstName, lastName, age);

}

catch

{

throw;

}

finally

{

pDAL = null;

}

}

/// <summary>

/// Load records from database

/// </summary>

/// <returns></returns>

public DataTable Load()

{

PersonDAL3 pDAL = new PersonDAL3();

try

{

return pDAL.Load();

}

catch

Page 12: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

{

throw;

}

finally

{

pDAL = null;

}

}

/// <summary>

/// Delete record from database

/// </summary>

/// <param name="personID"></param>

/// <returns></returns>

public int Delete(int personID)

{

PersonDAL3 pDAL = new PersonDAL3();

try

{

return pDAL.Delete(personID);

}

catch

{

throw;

}

finally

{

Page 13: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

pDAL = null;

}

}

}

Till now we haev our Business Access Layer and Database Access Layer ready. Now we have to write our Presentation Layerthat will use our Business Access Layer methods. Lets create a form that will have three textboxes for FirstName, LastName andAge.

Presentation Layer

Create an Insert.aspx page (make is as Startup page) and copy paste following code to bring the insert form something likedisplaying in the picture. Code for Insert Record form

<asp:Label ID="lblMessage" runat="Server" ForeColor="red" EnableViewState="False"></asp:Label>

<table style="border:2px solid #cccccc;">

<tr style="background-color:#507CD1;color:White;">

<th colspan="3">Add Records</th>

Page 14: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

</tr>

<tr>

<td>

First Name:

</td>

<td>

<asp:TextBox ID="txtFirstName" runat="Server"></asp:TextBox>

</td>

<td>

<asp:RequiredFieldValidator ID="req1" runat="Server" Text="*" ControlToValidate="txtFirstName"

Display="dynamic"></asp:RequiredFieldValidator>

</td>

</tr>

<tr>

<td>

Last Name:

</td>

<td>

<asp:TextBox ID="txtLastName" runat="Server"></asp:TextBox>

</td>

<td>

<asp:RequiredFieldValidator ID="req2" runat="Server" Text="*" ControlToValidate="txtLastName"

Display="dynamic"></asp:RequiredFieldValidator>

</td>

</tr>

<tr>

Page 15: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

<td>

Age:

</td>

<td>

<asp:TextBox ID="txtAge" runat="Server" Columns="4"></asp:TextBox>

</td>

<td>

<asp:RequiredFieldValidator ID="req3" runat="Server" Text="*" ControlToValidate="txtAge"

Display="dynamic"></asp:RequiredFieldValidator>

<asp:CompareValidator ID="Comp1" runat="Server" Text="Only integer" ControlToValidate="txtAge"

Operator="DataTypeCheck" Type="Integer"></asp:CompareValidator>

</td>

</tr>

<tr>

<td>&nbsp;</td>

<td>

<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="AddRecords" />

</td>

</tr>

</table>

Now, lets write method that will fire when Submit button will be clicked on the from. Code for AddRecords method

protected void AddRecords(object sender, EventArgs e)

Page 16: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

{

//Lets validate the page first

if (!Page.IsValid)

return;

int intResult = 0;

// Page is valid, lets go ahead and insert records

// Instantiate BAL object

PersonBAL3 pBAL = new PersonBAL3();

// Instantiate the object we have to deal with

string firstName = txtFirstName.Text;

string lastName = txtLastName.Text;

int age = Int32.Parse(txtAge.Text);

try

{

intResult = pBAL.Insert(firstName, lastName, age);

if (intResult > 0)

lblMessage.Text = "New record inserted successfully.";

else

lblMessage.Text = "FirstName [<b>"+ txtFirstName.Text +"</b>] alredy exists, try another name";

}

catch (Exception ee)

{

lblMessage.Text = ee.Message.ToString();

Page 17: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

}

finally

{

pBAL = null;

}

}

In the above code, first I am validating the page by using Page.IsValid method just to check if correct data has been entered.Then I have instantiated PersonBAL3 and calling Insert method of it (pBAL.Insert) by passing firstName, lastName, age asparameter.

Dispalying Records into GridView

Create a .aspx file called List.aspx and create a GridView something like displayed into the picture. To list the record intoGridView that will also enable us to Edit, Delete record, copy paste following code.

Code for GridView

<asp:GridView ID="GridView1" runat="server" CellPadding="4" ForeColor="#333333" GridLines="None"

DataKeyNames="PersonID" AutoGenerateEditButton="True" AutoGenerateColumns="False"

Page 18: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

OnRowEditing="EditRecord" OnRowUpdating="UpdateRecord" OnRowCancelingEdit="CancelRecord"

OnRowDeleting="DeleteRecord" PageSize="5" >

<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />

<RowStyle BackColor="#EFF3FB" />

<EditRowStyle BackColor="#2ff1BF" />

<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />

<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />

<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />

<AlternatingRowStyle BackColor="White" />

<Columns>

<asp:BoundField DataField="PersonID" HeaderText="Person ID" ReadOnly="True" SortExpression="PersonID" />

<asp:TemplateField HeaderText="First Name" SortExpression="FirstName">

<ItemTemplate>

<%# Eval("FirstName") %>

</ItemTemplate>

<EditItemTemplate>

<asp:TextBox ID="txtFName" runat="Server" Text='<%# Eval("FirstName") %>'></asp:TextBox>

</EditItemTemplate>

</asp:TemplateField>

<asp:TemplateField HeaderText="Last Name" SortExpression="LastName">

<ItemTemplate>

<%# Eval("LastName") %>

</ItemTemplate>

<EditItemTemplate>

<asp:TextBox ID="txtLName" runat="Server" Text='<%# Eval("LastName") %>'></asp:TextBox>

Page 19: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

</EditItemTemplate>

</asp:TemplateField>

<asp:TemplateField HeaderText="Age" SortExpression="Age">

<ItemTemplate>

<%# Eval("Age") %>

</ItemTemplate>

<EditItemTemplate>

<asp:TextBox ID="txtAge" runat="Server" Text='<%# Eval("Age") %>'></asp:TextBox>

</EditItemTemplate>

</asp:TemplateField>

<asp:TemplateField HeaderText="Delete?">

<ItemTemplate>

<span onclick="return confirm('Are you sure to Delete?')">

<asp:LinkButton ID="lnBD" runat="server" Text="Delete" CommandName="Delete"></asp:LinkButton>

</span>

</ItemTemplate>

</asp:TemplateField>

</Columns>

</asp:GridView>

Code to Load records and Displaying Records into GridView

private DataTable BindGrid()

{

PersonBAL3 p = new PersonBAL3();

Page 20: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

try

{

DataTable dTable = p.Load();

GridView1.DataSource = dTable;

GridView1.DataBind();

}

catch (Exception ee)

{

lblMessage.Text = ee.Message.ToString();

}

finally

{

p = null;

}

return dTable;

}

In the above method I am instantiating PersonBAL3 class and calling Load method to get the record into DataTable and binding itinto GridView.

Code to Delete Records

protected void DeleteRecord(object sender, GridViewDeleteEventArgs e)

{

int personID = Int32.Parse(GridView1.DataKeys[e.RowIndex].Value.ToString());

Page 21: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

// instantiate BAL

PersonBAL3 pBAL = new PersonBAL3();

try

{

pBAL.Delete(personID);

lblMessage.Text = "Record Deleted Successfully.";

}

catch (Exception ee)

{

lblMessage.Text = ee.Message.ToString();

}

finally

{

pBAL = null;

}

GridView1.EditIndex = -1;

// Refresh the list

BindGrid();

}

Above method will fire when Delete link will be clicked on the GridView. In the above code, I am instantiating PersonBAL3 andcalling Delete method by passing personID as parameter so that select reocrds will be deleted from datbase.

Code to Update records

Page 22: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

protected void UpdateRecord(object sender, GridViewUpdateEventArgs e)

{

int personID = Int32.Parse(GridView1.DataKeys[e.RowIndex].Value.ToString());

int intResult = 0;

GridViewRow row = GridView1.Rows[e.RowIndex];

TextBox tFN = (TextBox) row.FindControl("txtFName");

TextBox tLN = (TextBox)row.FindControl("txtLName");

TextBox tAge = (TextBox)row.FindControl("txtAge");

// instantiate BAL

PersonBAL3 pBAL = new PersonBAL3();

try

{

intResult = pBAL.Update(personID, tFN.Text, tLN.Text, int.Parse(tAge.Text));

if (intResult > 0)

lblMessage.Text = "Record Updated Successfully.";

else

lblMessage.Text = "Record couldn't updated";

}

catch (Exception ee)

{

lblMessage.Text = ee.Message.ToString();

} finally

Page 23: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

{

pBAL = null;

}

GridView1.EditIndex = -1;

// Refresh the list

BindGrid();

}

Above method will fire when Update link will be clicked for a particular row of the GridView in edit mode. In the above method, Iam instantiating PersonBAL3 and calling the Update method by p[assing required parameters.

Now we have all set to go, now just run your project and try inserting records. You can also navigate to another page yourcreated (list.aspx) and try updating, deleting records.

Conclusion

By using 3-Tier architecture in your project you can achive

1. Seperation - the functionality is seperated from the data access and presentation so that it is more maintainable 2. Independence - layers are established so that if one is modified (to some extent) it will not affect other layers. 3. Reusability - As the layers are seperated, it can exist as a module that can be reused by other application by referencing it.

Hope this article helped you understanding 3-Tier architecture and desiging it.

Thanks and Happy Coding !!!

Updated on July 01 2008: Source Code attachedA dvertisements

If you like this article, subscribe to our RSS Feed. You can also subscribe via email to our Interview Questions, Codes andForums section.

Switch to Google Appswww.google.com/apps/business

Get IM, 25GB Inbox, Collaboration Tools and More. Free 30 Day Trial.

Page 24: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

| More

Found interesting? Add this to:

Tweet 9 23

| Bookmark It

Please Sign In to vote for this post.

Latest Articles from SheoNarayan

◘ How to start your software career?

◘ How to read MS Excel file and populate into GridView

◘ Customizing asp:Chart Label font styles and intervals etc.

◘ How to use Rotating, Skew and Multiple background image in CSS3?

◘ How to use Opacity, Scale and box shadow and Zooming in CSS 3?

More from SheoNarayan ...About Sheo Narayan

Experience: 8 year(s)

Home page: http://www.snarayan.com

Member since: Tuesday, July 08, 2008

Level: HonoraryPlatinum

Status: [Microsoft_MVP] [Administrator]

Biography: Microsoft MVP, Author, Writer, Mentor & architecting applications since year2001.

Connect me on Facebook | Twitter | LinkedIn | Blog

ResponsesPosted by: Raja | Posted on: 07 May 2008 06:05:23 PM

This is very nice and simple article.

Keep it up!!!

Posted by: Vansree | Posted on: 01 Jun 2008 08:55:27 PM

Hi,

Share 11

ShareShareShareShareShareShareShareShareShareShareShareShareShareShareShareShareShareShareShareShareMore

Page 25: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

Nice article; Well and simply explained.

1) Fix for the code block For the css 'pre', add new property 'min-width: 730px;' and add width nn percentage. just to give you flexibility to not show scroll bar for long screens.

pre { ... min-width:730px; overflow:auto; ... width:75%; }

2) Can you post other similar article with Ajax?

I wonder if you can come up with the same but using Ajax Tabs. Because the new buzz in the industry is to use Ajax Tab Panels.

Tab Container (Container to hold GV, Add, Edit)

First Tab Panel ... Grid View Second / on add click: Tab Panel ... Add new record Last Tab Panel ... Edit Record (and delete button)

Why? Delete button only in edit record? Because in practice we expect the delete to be performed with confirmation and also in detailsscreen. (In most of the projects)

Why? Add new / Edit in 2 different tab panels - to have better usability. Like having add button in Grid View will switch you to Tab Panel(Add new) and then perform the add ...

Mattberseth.com has good UI examples.

But would like to see if you can come up with Tabs and your example above. Just a thought! I liked the way you explained!

Regards,

Sreedhar

Posted by: SheoNarayan | Posted on: 01 Jun 2008 10:57:56 PM

Thanks Vansree for your suggestions.

1. Regarding pre class, I will let the webmaster know about it. 2. As far as article on Ajax is concerned, I will try my best to post few articles on Ajax in coming days.

Page 26: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

Thanks and take care. Regards

Posted by: Hm_sheikh | Posted on: 16 Jul 2008 12:06:56 AM

This is simpler example for 3-Tier Architecture. I have one question about passing the data between layers. As you have used four variables to pass data from one layer to another (personID, firstName, lastName, age). Now think the Scenario when the number of fields are too much. In this case definitely the passing number of variable will not be goodidea. How we can pass a large amount of data from one layer to another. Please keep the performance issue in the mind.

Regards Haneef

Posted by: SheoNarayan | Posted on: 16 Jul 2008 09:00:27 AM

Hi Haneef,

In this case use my another article on 4-Tier architecture http://www.dotnetfunda.com/articles/article18.aspx

Thanks

Posted by: Pushpalata | Posted on: 25 Aug 2008 04:36:54 AM

Hi Sir,

IF in Insert method of DAL I have out parameter, how to access it in presentation layer

Posted by: SheoNarayan | Posted on: 25 Aug 2008 08:32:59 PM

Pushpalata,

Read following article to know how to use output parameter

http://www.eggheadcafe.com/PrintSearchContent.asp?LINKID=624

http://asp.dotnetheaven.com/howto/doc/adoplus/OutParams.aspx

Page 27: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

Hope this will hep.

Thanks

Posted by: Moloy2008 | Posted on: 01 Sep 2008 04:32:28 AM

Dear Sir, Thanks so much for such a nice article, I am sure it will help a lot of new .Net learners like me.

I have a small problem while using your code, I am not being able to enter and save a date field in a plain textbox (also tried using adatepicker).

Can you please help me telling me how to capture a date field and save it in SQL 2005. You may also please send me some useful link, ifpossible.

Posted by: SheoNarayan | Posted on: 01 Sep 2008 04:55:21 AM

Not sure if you are getting any error while saving datetime field into database or some other problem exists.

Please see below links, it might help you.

http://forums.msdn.microsoft.com/en-US/vbgeneral/thread/d5af5335-8c60-4f6a-aa04-8a4fad923485/ http://www.themssforum.com/Ado/Saving-DateTime-120524/ http://forums.asp.net/p/1232201/2228157.aspx http://www.c-sharpcorner.com/Forums/ShowMessages.aspx?ThreadID=42132

Thanks

Posted by: Moloy2008 | Posted on: 02 Sep 2008 03:57:01 AM

Dear Sir,

I find there is a format mismatch between iBO.HelpDeskCallDate and txtHelpDeskRequestDate in the code-behind but really dont knowhow to fix it.

I find in my Immediate Window the values iBO.HelpDeskCallDate - {1/1/0001 12:00:00 AM} txtHelpDeskRequestDate : "30-8-200816:35:53" I am new to programming, but looking at this I feel IBO.HelpDeskCallDate is expecting the format which is not provided bytxtHelpDeskRequestDate... Pl Help...

Posted by: SheoNarayan | Posted on: 02 Sep 2008 05:04:08 AM

Page 28: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

The problem you are talking about is related with a specific scenario. May I request you to post it in the Questions section of thiswebsite? Hopefully you will get quicker solution.

A little hint in order to solve your problem is "30-8-2008 16:35:53" is not a correct DateTime format (try to convert or parse it to DateTimeand you will get error). So just pass the value in correct DateTime format.

Thanks

Posted by: Tulsim83 | Posted on: 08 Sep 2008 08:45:41 PM

Hi,

I have a question about the list.aspx page. Just curious why you did not use the gridview wizard to display the list of records. So forexample, configure a sqldatasource and then bind it to the grid view control. Wouldn't this be easier? What are the pros/cons of thisapproach?

Thanks. tulsi

Posted by: SheoNarayan | Posted on: 08 Sep 2008 11:17:19 PM

When you will use SqlDataSource, you are writing your select query, connectionstring and other stuffs at the page itself. This approach isgood if you have a small project but for bigger projects it is not suggestable. For further you can refer to this page

http://www.willasrari.com/blog/usefulness-of-sqldatasource/000193.aspx

Thanks

Posted by: Tulsim83 | Posted on: 09 Sep 2008 07:53:31 PM

Thanks for the feedback. This is exacly the info I was looking for.

Also, thanks for posting such a nice article.

Tulsi

Posted by: Tulsim83 | Posted on: 10 Sep 2008 09:05:14 PM

One more question....

Page 29: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

Did you create the source code for the list.aspx page manually or did you use some type of wizard to do this?

I'm use to binding the gridview to the sqldatasource, but want to learn more on the way you created this page. Are there any goodtutorials for this?

Thanks again. tulsi

Posted by: SheoNarayan | Posted on: 11 Sep 2008 12:38:15 AM

For columns I wrote the code myself and for styles of HeaderTemplate, FooterTemplate etc. I used the template available for theGridView via Smart menu in VS.

Posted by: Nazirk | Posted on: 26 Feb 2009 12:10:30 AM

Hi SheoNarayan,

Indeed a very useful article with easy to understand example. But SheoNarayan, as in this example you are creating DAL and BAL inside App_Code, I need an architecture wherein the DAL and BALshould be outside App_Code folder. Because I am trying to implement this but not getting it. The folder structure what i am looking for the 3 layers should be like this;

--PRESENTATION LAYER --- (this is the startup project) --APP_CODE --APP_DATA --Default.aspx --Home.aspx --Web.config --DAL --clsEmployees --clsTransport --BAL --clsLoad --clsGetEmployees

this is what i need to implement. Can you plz help me out!!!

thanks & regards nazir k

Posted by: SheoNarayan | Posted on: 26 Feb 2009 06:53:20 AM

Page 30: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

Nazirk,

You need to use Visual Studio to create BAL and DAL as separate projects. Once you have created BAL, DAL as separate proejcts, youcan right click the solution and Add Reference to those projects in your web application.

You can create a blank Solution, Add a Web application. Add projects (BAL, DAL) into the same solution and implement the code as it is inthe App_Code folders.

Hope this will give little idea.

Thanks

Posted by: [email protected] | Posted on: 13 Mar 2010 02:50:00 AM

Hi, this is very good code and its very useful, other thing is that its not giving any error after copy the code, for that thank you very much. thanks

Posted by: DON090111982 | Posted on: 01 Sep 2010 06:02:27 PM | Points: 10

protected void SortRecords(object sender, GridViewSortEventArgs e) { DataTable dataTable = GridDataSource();

if (dataTable != null) { DataView dataView = new DataView(dataTable);

dataView.Sort = GetSortExpression(e);

GridView1.DataSource = dataView; GridView1.DataBind(); } } #region Private Methods

/// <summary> /// Bind the gridview /// </summary> private void BindGrid() { GridView1.DataSource = GridDataSource(); GridView1.DataBind(); }

Page 31: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

/// <summary> /// Get GridView DataSource /// </summary> private DataTable GridDataSource() { PersonBAL3 p = new PersonBAL3(); DataTable dTable = new DataTable(); try { dTable = p.Load(); } catch (Exception ee) { lblMessage.Text = ee.Message.ToString(); } finally { p = null; }

return dTable; }

/// <summary> /// Get sort expression for the gridview /// </summary> /// <param name="e"></param> /// <returns></returns> private string GetSortExpression(GridViewSortEventArgs e) { string sortDirection = string.Empty; // if clicked on the same column twice then let it toggle the sort order, else reset to ascending if (ViewState["SortExpression"] != null) { if (!ViewState["SortExpression"].ToString().Equals(e.SortExpression.ToLower())) { ViewState["SortDirection"] = null; } }

if (ViewState["SortDirection"] != null) { if (ViewState["SortDirection"].ToString().Equals("ASC")) { sortDirection = "DESC"; ViewState["SortDirection"] = "DESC";

Page 32: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

} else { sortDirection = "ASC"; ViewState["SortDirection"] = "ASC"; } } else { ViewState["SortDirection"] = "ASC"; } ViewState["SortExpression"] = e.SortExpression.ToLower();

return e.SortExpression + " " + sortDirection; } #endregion Private Methods

Posted by: DON090111982 | Posted on: 01 Sep 2010 06:04:33 PM | Points: 10

protected void UpdateRecord(object sender, GridViewUpdateEventArgs e) { int personID = Int32.Parse(GridView1.DataKeys[e.RowIndex].Value.ToString()); int intResult = 0; GridViewRow row = GridView1.Rows[e.RowIndex];

TextBox tFN = (TextBox) row.FindControl("txtFName"); TextBox tLN = (TextBox)row.FindControl("txtLName"); TextBox tAge = (TextBox)row.FindControl("txtAge");

// instantiate BAL PersonBAL3 pBAL = new PersonBAL3();

try { intResult = pBAL.Update(personID, tFN.Text, tLN.Text, int.Parse(tAge.Text)); if (intResult > 0) lblMessage.Text = "Record Updated Successfully."; else lblMessage.Text = "Record couldn't updated"; } catch (Exception ee) { lblMessage.Text = ee.Message.ToString(); } finally {

Page 33: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

pBAL = null; }

GridView1.EditIndex = -1; // Refresh the list BindGrid(); }

/// <summary> /// fires when Delete button is clicked /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void DeleteRecord(object sender, GridViewDeleteEventArgs e) { int personID = Int32.Parse(GridView1.DataKeys[e.RowIndex].Value.ToString());

// instantiate BAL PersonBAL3 pBAL = new PersonBAL3(); try { pBAL.Delete(personID);

lblMessage.Text = "Record Deleted Successfully."; } catch (Exception ee) { lblMessage.Text = ee.Message.ToString(); } finally { pBAL = null; }

GridView1.EditIndex = -1; // Refresh the list BindGrid(); }

/// <summary> /// Fires when page links are clicked /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void ChangePage(object sender, GridViewPageEventArgs e) {

Page 34: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

GridView1.PageIndex = e.NewPageIndex; // Refresh the list BindGrid(); }

Posted by: DON090111982 | Posted on: 01 Sep 2010 06:09:42 PM | Points: 10

public partial class UserLogin : System.Web.UI.Page { string strLoginError = string.Empty;

#region Private Methods private bool IsValideUser(string userName) { UserBAL objUserBAL = new UserBAL(); DataTable dt=new DataTable(); try { dt = objUserBAL.IsValideUser(userName); if (dt.Rows.Count == 0) { strLoginError = "Invalid User Name"; dt.Dispose(); return false; } else { string strTempPassword = Convert.ToString(dt.Rows[0]["password"]).Trim(); if (strTempPassword != Login1.Password.Trim()) { strLoginError = "Invalid Password"; dt.Dispose(); return false; } return true; } } catch (Exception e) { lblMessage.Text = e.Message.ToString(); return false; } } #endregion

#region Protected Methods

Page 35: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

protected void Page_Load(object sender, EventArgs e) {

} protected void Login1_Authenticate(object sender, AuthenticateEventArgs e) { if (IsValideUser(Login1.UserName.Trim())) { e.Authenticated = true; } else { e.Authenticated = false; } } protected void Login1_LoginError(object sender, EventArgs e) { Login1.FailureText = strLoginError;

} #endregion }

Posted by: DON090111982 | Posted on: 01 Sep 2010 06:18:36 PM | Points: 10

tblUserMaster,uniq key,tblAdminMaster,tblUserLoginMaster,tblUserLoginDetails spValidateUser,spCreateUser,spLoginUser

Posted by: Sushant_rajurkar | Posted on: 09 Sep 2010 01:35:05 AM | Points: 10

hi sir, i kindly request you to please explain in detail whatever you haven't explained in your tutorial. i actually want you to explain how toconnect to database and manipulate the data. i have confusion about your sentence below. what else is left about connecting database. " I am not goint into details of how I am connecting database and manipulating the data just to make this tutorials short."

Posted by: Sushant_rajurkar | Posted on: 10 Sep 2010 07:43:44 AM | Points: 10

hi sir,

Page 36: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

sorry for silly quetion but, if same methods written in data access layer and business logic layer then what is use of business logic layerplz clarify in detail.

Posted by: Rams73 | Posted on: 06 Nov 2010 08:40:40 AM | Points: 25

Hi sir, if i am writing the logic you are used in business layer within default.aspx.cs then, we can sayl that default.aspx.cs page as businesslayer.

Posted by: Fscopel | Posted on: 14 Dec 2010 03:14:05 PM | Points: 25

Sheo Narayan, Nice tutorial. you kept it simple and straight forward. I do have to disagree, with part of your code. In your code the BAL is simply there to call the DAL. It is irrelevant as is. In your UI if you(CTRl + H) substitute PersonBAL3 for PersonDAL3 it will work the same way. I think to make your code A++ you need to add somevalidation to the BAL to make it relevant. Besides that great job.

Thank you for your post.

Posted by: SheoNarayan | Posted on: 04 Sep 2011 03:03:23 AM | Points: 25

@Fscopel,

Thank you for appreciating it and response. I agree that as there is no validations in the BAL, we can directly call the DAL from the UI,however I have mentioned this in the "Business Access Layer" first paragraph that "As we don't have any business logic here so simplyinstantiate the PersonDAL3 class of DAL and call methods. " . As this being a article, I wanted to make the code snippet a real simple andeasy to understand so I just kept it direct ;).

However your point is valid, in read scenario if required we need to keep the business validations in the business access layer.

Thanks again for your feedback, keep participating and sharing your knowledge.

Regards Sheo Narayan

Posted by: Vineesh | Posted on: 04 Feb 2011 01:13:57 AM | Points: 25

Hi sir

Page 37: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

Thanks for this informative article..

could u please tell me how can I implement sql transaction in this code to ensure ACID

regards... vineesh

Posted by: Senthilk | Posted on: 05 Feb 2011 01:29:48 AM | Points: 25

Hi Narayan,

Thanks for the nice article. One question regarding the deployment of 3-tier application.

I feel the sample given by you cannot be deployed straightaway in 3 different servers. Is it right? If I want to develop such a 3-tierapplication, how should I do? Can you please explain that in detail in an article?

Regards, Senthil Kumar K

Posted by: Patelpriyanka21 | Posted on: 15 Feb 2011 03:38:49 AM | Points: 25

Hello Sir, i am new in .net and when i am implementing this article then getting bal error in default form.error is the type of namespace'persobBal3' could not be found (are you missing a using directive or an assembly reference?) and other error are for text box like thename 'textfirstbox' does not exist in current context. so pls guide me how to solve this.

Thankx

Posted by: Vanchi050585 | Posted on: 23 Mar 2011 08:52:06 AM | Points: 25

Dear Sir,

Nice this article is very usefull to me.

but one clarifications in that. if i insert the same thing again means, the error message was displayed in lblmessage box like below: Violation of PRIMARY KEY constraint 'PK_tblClassifieds'. Cannot insert duplicate key in object 'dbo.tblClassifieds'. The statementhas been terminated.

but i want to displayed like: Title Business oppurtunity already exists, try another name

Page 38: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

how to calculate the intResult column , how to design datatype in Table Design. please let me about the Table Design

thanks in Advance

Posted by: Titochhabra | Posted on: 11 Nov 2011 03:26:13 AM | Points: 25

This is awesome!! really helpful for me. Thanks for sharing with us. This link http://mindstick.com/Blog/264/LINQ%20Implementation%20on%203%20tier%20application also helped me to complete my task.

Thanks Everyone!!

Posted by: Nandu | Posted on: 10 Feb 2012 07:28:44 AM | Points: 25

Hi sir,

Thanks for the nice article, but when i am implementing this application am getting error like The name 'dTable' does not exist in thecurrent context... give me the solution.

Thanks,

Posted by: Jmckamal | Posted on: 27 Mar 2012 04:17:55 PM | Points: 25

Please explain me.. why we need business layer here? If we can able to achieve this without business layer then why is it required?.

Posted by: Jmckamal | Posted on: 27 Mar 2012 04:18:55 PM | Points: 25

The reason I am asking is.. I have done the same without of business layer. Then I myself asking everytime.. why I need this?

Posted by: Go2sumit | Posted on: 25 May 2012 03:08:51 PM | Points: 25

Please do help... i used your code available in BAL, DAL and defult.aspx for insertion only.But i am getting an error on label i.e. instancefailure. Kindly suggest what to do now ?? please.

Posted by: Eangland1234 | Posted on: 08 Jun 2012 03:05:00 AM | Points: 25

to Hm_sheikh

Page 39: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

if you have much data to pass you can user Model to pass data nomally we user model to pass

Posted by: Devashishjangid831989 | Posted on: 10 Jun 2012 11:59:16 PM | Points: 25

Nice Artical,thnx 4 it....

Posted by: Britsouls | Posted on: 19 Jun 2012 05:21:57 AM | Points: 25

Dear sir, This was the best answer i could expect. thank you for making it such simple to be understood by everybody.

Posted by: Anishabathija | Posted on: 10 Oct 2012 02:20:38 AM | Points: 25

hi sir, great article. I had a doubt. In my application in the gridview I have a dropdownlist displaying two options yes or no. I added this using the <Asp:tempalatefield> <asp:itemlist> <asp:dropdownlist> <asp:ListItem>yes</asp:ListItem> <asp:listitem>no</asp:listitem>///

and in my rowupdating event of the gridview I passed this as string option = Convert.ToString((GrdView1.Rows[e.RowIndex].Cells[5].Controls[0]).ToString());

this code built succesfully but everytime I run it and try to update the dropdownlist , it gets updated as Sytem.Web.Controls in the db. please help. any help will be appreciated. :)

Posted by: Dinoop.Uk | Posted on: 12 Oct 2012 01:00:35 AM | Points: 25

Hi sir

Nice article.

Page 40: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

I have a doubt here is it good practice to pass values between layers by parameters?Using a separate Class(Helper class) may be abetter option. Please comment on this

Thanks in advance

Dinoop

Posted by: Munder2013 | Posted on: 19 May 2013 07:32:49 AM | Points: 25

Vry useful article thanks for sharing

>> Write Response - Respond to this post and get points

Latest Articles

◘ Understand Append() and Prepend() method in JQuery

◘ Return JSON data from PHP to ajax function of JQuery

◘ Passing selected rows in Gridview to another Page in Gridview dynamically - Part 2

◘ Pass Selected Rows of Grid View to another Grid View Dynamically - Part 1

◘ Highlight GridView Rows using JQuery on Mouse Over

◘ Using Google Translator to Change Language in your Website

◘ AJAX Auto Complete Extender Part 2 of 2 - (Part 2 Without Webservice)

◘ AJAX Auto Complete Extender Part 1 of 2 - (Part 1 With Webservice)

◘ Download Files from Grid-view in Zip Format using Dot Net Zip

More ...

Related Posts

How to create a simple hello world ASP.NET MVC? (Tutorial No: 1)

In this tutorial we will see how to create a first MVC application using VS 2010 and the MVC 2 template. This complete series is dividedin to 50 parts with labs and video demos.

Client side validation using Validation Application blocks

Enterprise validation application provides us a ready made framework by which we can implement dynamic validation easily in ourproject. In case you are not aware of the basics you can watch my 20 minutes exclusive video on the same athttp://www.questpondvd.com/EnterpriseApplicationBlock/EnterpriseApplicationBlock.html By using enterprise validation blocks you can

Page 41: 3 Tier Sample

pdfcrowd.comopen in browser PRO version Are you a developer? Try out the HTML to PDF API

create validation in a dynamic fashion and the validations can be invoked depending on the user logged in. Now let’s understand one ofthe biggest drawbacks of the validation blocks and let’s see how we can address the same.

Binding, Adding, Editing, Updating, Deleting, Paging and Sorting records in ListView Control

ListView control is one of the most popular and powerful web server control in ASP.NET 3.5. In this article, we will explore mostfrequently asked questions about ListView control.

LINQ FAQ Part II

This FAQ article is dedicated to LINQ to SQL. In this article we will see a basic example of LINQ to SQL, how to define 1-1 and 1-manyrelationship using LINQ, how we can optimize LINQ queries, execution of stored procedures using LINQ and finally we will see a simpleCRUD example using LINQ to SQL. For past some days I was running small sprint to complete this marathon I hope you will like thisarticle.

Checking Existing Records Using Array of Data Rows

This code explains the method to check the existing database records without using for loops and improving the performance to theapplications.

More ...

About Us | Contact Us | The Team | Advertise | Software Development | Write for us | Testimonials | Privacy Policy | Terms of Use | Link Exchange | Members | Go Top

General Notice: If you find plagiarised (copied) contents on this page, please let us know the original source along with your correct email id (to communicate) forfurther action.

Copyright © DotNetFunda.Com. All Rights Reserved. Copying or mimicking the site design and layout is prohibited. Logos, company names used here if any are only for referencepurposes and they may be respective owner's right or trademarks. | 7/24/2013 4:10:30 AM