چهارعمل اصلی (CRUD) توسط DLL و Stored Procedure

سه شنبه 12 خرداد 1394

در این مقاله می خواهیم به نحوه انجام چهارعمل اصلی (CRUD) بر روی یک جدول (Books) توسط DLL و Stored procedure در بانک اطلاعاتی با Asp.net بپردازیم. CRUD مخفف Create،Read، Update وDelete است که عملیات پایه بانک اطلاعاتی هستند.

چهارعمل اصلی (CRUD) توسط DLL و Stored Procedure

صفحه های ASP.Net متدهای دسترسی از DLL آن که شاملData Access Layer و Stored Procedure در پایگاه داده SQL Server برای انجام عملیات واقعی در جدول (Books)می باشد. 

نرم افزار ویژوال استودیو را باز نمایید ، بعد وارد منوی File و سپس New Project را انتخاب کنید.

 

یک ASP.Net  در Web Application  از نوع  Empty ایجاد میکنیم:

در مرحله اول در بانک اطلاعاتی در آن یک database با نام مورد نظر ایجاد کنید وبعد یک جدول با نام مناسب و Stored Procedure برای چهارعمل اصلی CRUD ایجاد کنید .

از ساختار جدول زیر استفاده کنید :

1.	create Table books
2.	(  
3.	  bookid int identity(1,1) primary Key,  
4.	  title varchar(50) null,  
5.	  authors varchar(200) null,  
6.	  price money null,  
7.	  publisher varchar(50),  
8.	)  

Stored Procedure چهار عمل اصلی:

1.	CREATE PROCEDURE dbo.GetBooks  
2.	AS  
3.	 select * from books  
1.	CREATE PROCEDURE dbo.GetBook(@bookid int)  
2.	AS  
3.	 select * from books where bookid = @bookid  
1.	CREATE PROCEDURE dbo.AddBook( @title varchar(50), @authors varchar(200), @price money, @publisher varchar(50) )  
2.	AS  
3.	insert into books (title,authors,price,publisher)  
4.	values(@title,@authors,@price,@publisher)  
1.	CREATE PROCEDURE dbo.DeleteBook (@bookid int)  
2.	AS  
3.	delete from books where bookid = @bookid  
4.	if @@rowcount <> 1   
5.	raiserror('Invalid Book Id',16,1)  
1.	CREATE PROCEDURE dbo.UpdateBook( @bookid int, @title varchar(50), @authors varchar(200), @price money, @publisher varchar(50) )  
2.	AS  
3.	update books set title= @title, authors = @authors, price = @price, publisher = @publisher  
4.	where bookid = @bookid;  
5.	if @@rowcount <> 1   
6.	raiserror('Invalid Book Id',16,1)  

 

ایجاد یک Class Library با نام BooksCrud:

برروی Solution نام پروژه راست کلیک کنید گزینه Add --> New Project را انتخاب کنید از سمت راست گزینه Class Library را انتخاب نمایید و در فیلد Name نام  را تایپ نموده و تایید نمایید. 

حالا یک فایل کلاس برای ایجاد یک لایه Data Access Layer(DAL) اضافه کنید این لایه ارتباط با database را برقرار میکند تمامی کدهای مربوط به عملیات بانک اطلاعاتی (دریافت،درج،حذف و به روزرسانی و...) و کدهای مربوط به ارتباط و قطع ارتباط در این لایه پیاده سازی می شود. 

ما در اینجا سه فایل کلاس اضافه می کنیم:

1. Book.cs(برای خاصیت set get،set)

2. BookDal.cs(برای ساخت DAL)

3. DataBase.cs(برای وارد کردن یک رشته اتصال از Web.Configو اجازه استفاده از نام فایل چون نام فایل در web.config هم نام با نام فایل در پایگاه داده است.)

برای ساخت سه فایل کلاس بالا هم دقیقا روال شکل های زیر را طی کنید و نام هر کدام را وارد کنید :

فایل web.config را باز کنید و دستورات کد connection string را به صورت زیر در آن اضافه کنید. 

<configuration>  
<connectionStrings>  
<add name="database" connectionString="Data Source=ServerName; Initial Catalog=Database; User Id=User; Password=Password;" providerName="System.Data.SqlClient"/>  
</connectionStrings>  
<system.web>  
<compilation debug="true" targetFramework="4.5" />  
<httpRuntime targetFramework="4.5" />  
</system.web>  
</configuration>  

اگر پایگاه داده ما روی Windows Authentication ساخته شده پس نیاز داریم کد "Integrated Security=true" را اضافه کنیم.

وارد کردن رشته اتصال (connection string) در فایل DataBase.cs:

1.	using System;  
2.	using System.Collections.Generic;  
3.	using System.Linq;  
4.	using System.Web;  
5.	using System.Configuration;  
6.	  
7.	namespace BooksCrud  
8.	{  
9.	    public class DataBase  
10.	    {  
11.	      static public String ConnectionString  
12.	      {  
13.	          get  
14.	          {  
15.	            return ConfigurationManager.ConnectionStrings["database"].ConnectionString;  
16.	          }  
17.	      }  
18.	   }  
19.	}  

خاصیت get وset را در فایل Book.cs به صورت زیر آماده کنید :

 

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Web;  
  
namespace BooksCrud  
{  
   public class Book  
   {  
      public int Bookid { get; set; }  
      public string Title { get; set; }  
      public string Authors { get; set; }  
      public string Publishers { get; set; }  
      public double Price { get; set; }  
   }  
}  

یک DAL در فایل BookDal.cs را به صورت زیر ایجاد کنید:

1.	using System;  
2.	using System.Data.SqlClient;  
3.	using System.Data;  
4.	using System.Configuration;  
5.	  
6.	namespace BooksCrud  
7.	{  
8.	   public class BookDal  
9.	   {  
10.	     public static DataSet GetBooks()  
11.	     {  
12.	         SqlConnection con = new SqlConnection(DataBase.ConnectionString);  
13.	         SqlDataAdapter da = new SqlDataAdapter("getbooks", con);  
14.	         da.SelectCommand.CommandType = CommandType.StoredProcedure;  
15.	         DataSet ds = new DataSet();  
16.	         da.Fill(ds, "books");  
17.	         return ds;  
18.	      }  
19.	     public static Book GetBook(int bookid)  
20.	     {  
21.	         SqlConnection con = new SqlConnection(DataBase.ConnectionString);  
22.	         try  
23.	         {  
24.	            con.Open();  
25.	            SqlCommand cmd = new SqlCommand("getbook", con);  
26.	            cmd.CommandType = CommandType.StoredProcedure;  
27.	            cmd.Parameters.AddWithValue("@bookid", bookid);     
28.	            SqlDataReader dr = cmd.ExecuteReader();  
29.	            if (dr.Read())  
30.	            {  
31.	               Book b = new Book();  
32.	               b.Title = dr["title"].ToString();  
33.	               b.Authors = dr["authors"].ToString();  
34.	               b.Price = Double.Parse(dr["price"].ToString());  
35.	               b.Publishers = dr["publisher"].ToString();  
36.	               return b;  
37.	            }  
38.	            else  
39.	               return null;  
40.	         }  
41.	         catch (Exception ex)  
42.	         {  
43.	            return null;  
44.	         }  
45.	         finally  
46.	         {  
47.	            con.Close();  
48.	         }  
49.	      }  
50.	  
51.	      public static string AddBook(string title, string authors, double price, string publisher)  
52.	      {  
53.	         SqlConnection con = new SqlConnection(DataBase.ConnectionString);  
54.	         try  
55.	         {  
56.	            con.Open();  
57.	            SqlCommand cmd = new SqlCommand("addbook", con);  
58.	            cmd.CommandType = CommandType.StoredProcedure;  
59.	            cmd.Parameters.AddWithValue("@title", title);  
60.	            cmd.Parameters.AddWithValue("@authors", authors);  
61.	            cmd.Parameters.AddWithValue("@price", price);  
62.	            cmd.Parameters.AddWithValue("@publisher", publisher);  
63.	            cmd.ExecuteNonQuery();  
64.	            return null; // success   
65.	         }  
66.	         catch (Exception ex)  
67.	         {  
68.	            return ex.Message; // return error message  
69.	         }  
70.	         finally  
71.	         {  
72.	            con.Close();  
73.	         }  
74.	      }  
75.	      public static string DeleteBook(int bookid)  
76.	      {  
77.	         SqlConnection con = new SqlConnection(DataBase.ConnectionString);  
78.	         try  
79.	         {  
80.	            con.Open();  
81.	            SqlCommand cmd = new SqlCommand("deletebook", con);  
82.	            cmd.CommandType = CommandType.StoredProcedure;  
83.	            cmd.Parameters.AddWithValue("@bookid", bookid);  
84.	            cmd.ExecuteNonQuery();  
85.	            return null; // success   
86.	         }  
87.	         catch (Exception ex)  
88.	         {  
89.	            return ex.Message; // return error message  
90.	         }  
91.	         finally  
92.	         {  
93.	            con.Close();  
94.	         }  
95.	      }  
96.	      public static string UpdateBook(int bookid, string title, string authors, double price, string publisher)  
97.	      {  
98.	         SqlConnection con = new SqlConnection(DataBase.ConnectionString);  
99.	         try  
100.	         {  
101.	            con.Open();  
102.	            SqlCommand cmd = new SqlCommand("updatebook", con);  
103.	            cmd.CommandType = CommandType.StoredProcedure;  
104.	            cmd.Parameters.AddWithValue("@bookid", bookid);  
105.	            cmd.Parameters.AddWithValue("@title", title);  
106.	            cmd.Parameters.AddWithValue("@authors", authors);  
107.	            cmd.Parameters.AddWithValue("@price", price);  
108.	            cmd.Parameters.AddWithValue("@publisher", publisher);  
109.	            cmd.ExecuteNonQuery();  
110.	            return null; // success   
111.	         }  
112.	         catch (Exception ex)  
113.	         {  
114.	            return ex.Message; // return error message  
115.	         }  
116.	         finally  
117.	         {  
118.	            con.Close();  
119.	         }  
120.	      }  
121.	   }  
122.	}  

بر روی Class Library گزینه Build را انتخاب کنید. 

بعد از build کردن ، فایل BookCrud.dll برای استفاده در پروژه وب آماده می شود.

حالا یک reference به پروژه وب اضافه کنید .

کلیه دستورات به همراه تگ های موجود در صفحه menu.html را مشاهده نمایید:

<!DOCTYPE html>  
   <html>  
      <head>  
         <title>CRUD Application using .dll, DAL and Stored Procedures</title>  
         <style>  
         a {  
               font-weight: 700;  
               color: red;  
               font-size: 12pt;  
           }  
         </style>  
      </head>  
      <body>  
         <h2>CRUD Application using DLL and Stored Procedure</h2>  
          This application shows how to perform Create, Read , Update and Delete (CRUD) operations.  
          ASP.NET pages access methods in DAL (Data Access Layer),which call stored procedures in  
          Sql Server Database to perform the actual operations on BOOKS table.  
  
         <a href="addbook.aspx">Add New Book</a>  
         <p />  
         <a href="updatebook.aspx">Update Book</a>  
         <p />  
         <a href="deletebook.aspx">Delete Book</a>  
         <p />  
         <a href="listbook.aspx">List Books</a>  
      </body>  
   </html>  

کلیه دستورات به همراه تگ های موجود در صفحه  addbook.aspx را مشاهده نمایید:

<!DOCTYPE html>  
   <html xmlns="http://www.w3.org/1999/xhtml" >  
      <head id="Head1" runat="server">  
         <title>Add Book</title>  
      </head>  
      <body>  
         <form id="form1" runat="server">  
         <h2>Add New Book</h2>  
         <table>  
            <tr>  
               <td>Book Title</td>  
               <td><asp:TextBox ID="txtTitle" runat="server"></asp:TextBox></td>  
            </tr>  
            <tr>  
               <td>Authors</td>  
               <td><asp:TextBox ID="txtAuthors" runat="server"></asp:TextBox></td>  
            </tr>  
            <tr>  
               <td>Price</td>  
               <td><asp:TextBox ID="txtPrice" runat="server"></asp:TextBox></td>  
            </tr>  
            <tr>  
               <td>Publisher</td>  
               <td><asp:TextBox ID="txtPublisher" runat="server"></asp:TextBox></td>  
            </tr>  
        </table>  
           <br />  
           <asp:Button ID="btnAdd" runat="server" Text="Add Book" OnClick="btnAdd_Click" /><br />  
           <br />  
           <asp:Label ID="lblMsg" runat="server" EnableViewState="False"></asp:Label><br />  
            <p />  
            <a href="menu.html">Go Back To Menu</a>  
         </form>  
        </body>  
   </html>  

در ادامه می توانید کدهای سی شارپ صفحه addbook.aspx.cs را مشاهده نمایید:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Web;  
using System.Web.UI;  
using System.Web.UI.WebControls;  
using System.Data;  
using System.Data.SqlClient;  
using BooksCrud;  
  
namespace BooksView  
{  
   public partial class addbook : System.Web.UI.Page  
   {  
      protected void Page_Load(object sender, EventArgs e)  
      {   
      }  
      protected void btnAdd_Click(object sender, EventArgs e)  
      {  
         string msg = BookDal.AddBook(txtTitle.Text, txtAuthors.Text, Double.Parse(txtPrice.Text), txtPublisher.Text);  
         if (msg == null)  
            lblMsg.Text = "Book Has Been Added Successfully!";  
         else  
            lblMsg.Text = "Error -> " + msg;  
      }  
   }  
}  

کلیه دستورات به همراه تگ های موجود در صفحه deletebook.aspx را مشاهده نمایید:

<!DOCTYPE html>  
  
   <html xmlns="http://www.w3.org/1999/xhtml" >  
      <head id="Head2" runat="server">  
         <title>Delete Book</title>  
      </head>  
      <body>  
         <form id="form2" runat="server">  
            <h2>Delete Book</h2>  
            Enter Book Id :   
            <asp:TextBox ID="txtBookid" runat="server"></asp:TextBox>  
            <p />  
            <asp:Button ID="btnDelete" runat="server" Text="Delete Book" OnClick="btnDelete_Click"/>  
            <p />  
            <asp:Label ID="lblMsg" runat="server" EnableViewState="False"></asp:Label>  
            <p />  
            <a href="menu.html">Go Back To Menu</a>  
         </form>  
      </body>  
   </html>  

در ادامه می توانید کدهای سی شارپ صفحه deletebook.aspx.cs را مشاهده نمایید:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Web;  
using System.Web.UI;  
using System.Web.UI.WebControls;  
using System.Data;  
using System.Data.SqlClient;  
using BooksCrud;  
  
namespace BooksView  
{  
   public partial class deletebook : System.Web.UI.Page  
   {  
      protected void Page_Load(object sender, EventArgs e)  
      {  
      }  
      protected void btnDelete_Click(object sender, EventArgs e)  
      {  
         string msg = BookDal.DeleteBook(Int32.Parse(txtBookid.Text));  
         if (msg == null)  
            lblMsg.Text = "Book Has Been Deleted Successfully!";  
         else  
            lblMsg.Text = "Error -> " + msg;  
      }  
   }  
}  

کلیه دستورات به همراه تگ های موجود در صفحه listbook.aspx را مشاهده نمایید:

<!DOCTYPE html>  
  
   <html xmlns="http://www.w3.org/1999/xhtml" >  
      <head id="Head4" runat="server">  
         <title>List Books</title>  
      </head>  
      <body>  
         <form id="form4" runat="server">  
            <h2>List Of Books</h2>  
            <asp:GridView ID="GridView1" runat="server" Width="100%">  
               <HeaderStyle BackColor="Red" Font-Bold="True" ForeColor="White" />  
            </asp:GridView>  
            <br />  
            <a href="menu.html">Go Back To Menu</a>  
         </form>  
      </body>  
   </html> 

در ادامه می توانید کدهای سی شارپ صفحه listbook.aspx.cs را مشاهده نمایید:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Web;  
using System.Web.UI;  
using System.Web.UI.WebControls;  
using System.Data;  
using System.Data.SqlClient;  
using BooksCrud;  
  
namespace BooksView  
{  
   public partial class listbook : System.Web.UI.Page  
   {  
      protected void Page_Load(object sender, EventArgs e)  
      {  
         GridView1.DataSource = BookDal.GetBooks();  
         GridView1.DataBind();  
      }  
   }  
}  

کلیه دستورات به همراه تگ های موجود در صفحه updatebook.aspx را مشاهده نمایید:

<!DOCTYPE html>  
  
   <html xmlns="http://www.w3.org/1999/xhtml" >  
      <head id="Head3" runat="server">  
         <title>Update Book</title>  
      </head>  
      <body>  
         <form id="form3" runat="server">  
         <h2>Update Book</h2>  
         <table>  
            <tr>  
               <td>Book ID</td>  
               <td><asp:TextBox ID="txtBookid" runat="server"></asp:TextBox>  
               <asp:Button ID="btnGetDetails" runat="server" Text="Get Details" OnClick="btnGetDetails_Click" />  
               </td>  
            </tr>  
            <tr>  
               <td>Book Title</td>  
               <td><asp:TextBox ID="txtTitle" runat="server"></asp:TextBox></td>  
            </tr>  
            <tr>  
               <td>Authors</td>  
               <td><asp:TextBox ID="txtAuthors" runat="server"></asp:TextBox></td>  
            </tr>  
            <tr>  
               <td>Price</td>  
               <td><asp:TextBox ID="txtPrice" runat="server"></asp:TextBox></td>  
            </tr>  
            <tr>  
               <td>Publisher</td>  
               <td><asp:TextBox ID="txtPublisher" runat="server"></asp:TextBox></td>  
            </tr>  
        </table>  
        <br />  
        <asp:Button ID="btnUpdate" runat="server" Text="Update Book" Enabled="false" OnClick="btnUpdate_Click" /><br />  
        <br />  
        <asp:Label ID="lblMsg" runat="server" EnableViewState="False"></asp:Label><br />  
        <p />  
        <a href="menu.html">Go Back To Menu</a>  
        </form>  
      </body>  
   </html>  

در ادامه می توانید کدهای سی شارپ صفحه updatebook.aspx.cs را مشاهده نمایید:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Web;  
using System.Web.UI;  
using System.Web.UI.WebControls;  
using System.Data;  
using System.Data.SqlClient;  
using BooksCrud;  
  
namespace BooksView  
{  
   public partial class updatebook : System.Web.UI.Page  
   {  
      protected void Page_Load(object sender, EventArgs e)  
      {  
      }  
      protected void btnGetDetails_Click(object sender, EventArgs e)  
      {  
         Book b = BookDal.GetBook(Int32.Parse(txtBookid.Text));  
         if (b != null)  
         {  
            txtTitle.Text = b.Title;  
            txtAuthors.Text = b.Authors;  
            txtPrice.Text = b.Price.ToString();  
            txtPublisher.Text = b.Publishers;  
            btnUpdate.Enabled = true;  
         }  
         else  
         {  
            lblMsg.Text = "Sorry! Book Id Not Found";  
            btnUpdate.Enabled = false;  
         }  
      }  
     protected void btnUpdate_Click(object sender, EventArgs e)  
     {              string msg = BookDal.UpdateBook(Int32.Parse(txtBookid.Text), txtTitle.Text, txtAuthors.Text, Double.Parse(txtPrice.Text), txtPublisher.Text);  
        if (msg == null)  
         lblMsg.Text = "Updated Book Details Successfully!";  
        else  
         lblMsg.Text = "Error -> " + msg;  
      }  
  
   }  
}  

 

نرگس محمدی

نویسنده 36 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید