تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
مدخل عملي لـ N-Tier - التطبيقات المُتعددة الطبقات
#8
السلام عليكم ورحمة الله وبركاته


إنتهى بنا الحديث حول الإجراءات المخزنة في قاعدة البيانات ، لقد تبقى الإجراءات المخزنة الخاصة بجدول ContactNumber ، وهي على النحو التالي :

PHP كود :
/****** Object:  Stored Procedure dbo.sp_Add_ContactNumber    Script Date: 14/03/2008 10:11:14 م ******/
if exists (select from dbo.sysobjects where id object_id(N'[dbo].[sp_Add_ContactNumber]') and OBJECTPROPERTY(idN'IsProcedure') = 1)
drop procedure [dbo].[sp_Add_ContactNumber]
GO

/****** Object:  Stored Procedure dbo.sp_Delete_ContactNumber    Script Date: 14/03/2008 10:11:14 م ******/
if exists (select from dbo.sysobjects where id object_id(N'[dbo].[sp_Delete_ContactNumber]') and OBJECTPROPERTY(idN'IsProcedure') = 1)
drop procedure [dbo].[sp_Delete_ContactNumber]
GO

/****** Object:  Stored Procedure dbo.sp_Select_ContactNumber    Script Date: 14/03/2008 10:11:14 م ******/
if exists (select from dbo.sysobjects where id object_id(N'[dbo].[sp_Select_ContactNumber]') and OBJECTPROPERTY(idN'IsProcedure') = 1)
drop procedure [dbo].[sp_Select_ContactNumber]
GO

/****** Object:  Stored Procedure dbo.sp_Update_ContactNumber    Script Date: 14/03/2008 10:11:14 م ******/
if exists (select from dbo.sysobjects where id object_id(N'[dbo].[sp_Update_ContactNumber]') and OBJECTPROPERTY(idN'IsProcedure') = 1)
drop procedure [dbo].[sp_Update_ContactNumber]
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS OFF 
GO

/****** Object:  Stored Procedure dbo.sp_Add_ContactNumber    Script Date: 14/03/2008 10:11:14 م ******/
CREATE Proc sp_Add_ContactNumber

@ID bigint OUTPUT,
@
Type int,
@
Number varchar(255),
@
PersonID bigint
as
insert into ContactNumber(Type,Number,PersonID)
values
(
@
Type ,
@
Number ,
@
PersonID
);
Select @ID=Scope_Identity();
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF 
GO

/****** Object:  Stored Procedure dbo.sp_Delete_ContactNumber    Script Date: 14/03/2008 10:11:14 م ******/
CREATE PROC sp_Delete_ContactNumber
@Id as bigint
as
Delete From  ContactNumber where ID=@Id
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS OFF 
GO

/****** Object:  Stored Procedure dbo.sp_Select_ContactNumber    Script Date: 14/03/2008 10:11:14 م ******/
CREATE PROC sp_Select_ContactNumber
@Id as bigint
as
Select *  From  ContactNumber where ID=@Id
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO

SET QUOTED_IDENTIFIER ON 
GO
SET ANSI_NULLS OFF 
GO

/****** Object:  Stored Procedure dbo.sp_Update_ContactNumber    Script Date: 14/03/2008 10:11:14 م ******/
CREATE Proc sp_Update_ContactNumber
@ID bigint ,
@
Type int,
@
Number varchar(255),
@
PersonID bigint

as
Update ContactNumber set

Type 
=@Type ,
Number =@Number ,
PersonID =@PersonID

where 
[ID]=@ID
GO

SET QUOTED_IDENTIFIER OFF 
GO
SET ANSI_NULLS ON 
GO 



و الآن و بعدما انهينا طبقة البيانات بشقيها (الجداول و الإجراءات المخزنة) نعود لطبقة الأعمال .

و الهدف هو إضافة بعض الدوال التي تتعامل مع الإجراءات المخزنة في طبقة البيانات .


سننشئ 4 دوال محلية Private في كل كائن لاستدعاء الإجراءات المخزنة .

إذن نحن بحاجة لـ

PHP كود :
Private Function _Save as Integer 

و مثلها للحذف

PHP كود :
Private Function _Delete as Integer 


و التعديل


PHP كود :
Private Function _Update as Integer 

و العرض


PHP كود :
Private Function _Select as DataTable 



أتمنى أن تكون قد لاحظت الفرق بين تلك الوظائف ، حسناً الفرق أن جميع تلك الوظائف تعيد قيمة Integer ما عدا Select فهي تعيد DataTable .

أما عن سبب الفرق ؟
فهو أن كل وظيفة من الوظائف التي تعيد Integer الهدف منها معرفة هل تم تنفيذ الاستعلام أم لا .

بينما الدالة Select فنحن نريدها أن تعيد أكثر من ذلك ، فنحن نريدها أن تعديل لنا الصفوف التي تم اختيارها .



و على ما سبق ،،،
سيكون الكود في الوظائف السابقة هو كالتالي :

1- دالة الإضافة و لاحظ استدعاء الإجراء المخزن sp_Add_Person :

PHP كود :
Private Function _Save(ByVal Name As String_
                           ByVal Age 
As Integer_
                           ByVal Area 
As String_
                           ByVal Job 
As String) As Integer
        Dim insCMD 
As New SqlClient.SqlCommand
        
Try

            
With insCMD
                
.Connection Me._Connection
                
.CommandType CommandType.StoredProcedure
                
.CommandText "sp_Add_Person"
                
.Parameters.Add("@Name"SqlDbType.NVarChar255).Value Name
                
.Parameters.Add("@Age"SqlDbType.Int).Value Age
                
.Parameters.Add("@Area"SqlDbType.NVarChar).Value Area
                
.Parameters.Add("@Job"SqlDbType.NVarChar255).Value Job

            End With

            Dim paramID 
As New SqlClient.SqlParameter("@ID"System.Data.SqlDbType.BigInt)
            
paramID.Direction System.Data.ParameterDirection.Output
            insCMD
.Parameters.Add(paramID)

            
Dim con As New SqlClient.SqlConnection(Me.Connection.ConnectionString)
            If 
Me.Connection.State ConnectionState.Open Then Me.Connection.Close()
            
Connection.Open()
            
insCMD.ExecuteNonQuery()
            
Connection.Close()

        Catch 
ex As Exception

        End 
Try

        Return 
CType(insCMD.Parameters("@ID").Value.ToString(), Integer)

    
End Function 


2- دالة التعديل و لاحظ استدعاء الإجراء المخزن sp_Update_Person :

PHP كود :
Private Function _Update(ByVal ID As Integer_
                             ByVal Name 
As String_
                             ByVal Age 
As Integer_
                             ByVal Area 
As String_
                             ByVal Job 
As String) As Integer
        Dim i 
As Integer
        
Try
            
Dim UpdCmd As New SqlClient.SqlCommand
            With UpdCmd
                
.Connection Me.Connection
                
.CommandType CommandType.StoredProcedure
                
.CommandText "sp_Update_Person"
                
.Parameters.Add("@ID"SqlDbType.BigInt).Value ID
                
.Parameters.Add("@Name"SqlDbType.NVarChar255).Value Name
                
.Parameters.Add("@Age"SqlDbType.Int).Value Age
                
.Parameters.Add("@Area"SqlDbType.NVarChar).Value Area
                
.Parameters.Add("@Job"SqlDbType.NVarChar255).Value Job
            End With
            
If Connection.State ConnectionState.Open Then Connection.Close()
            
Connection.Open()
            
UpdCmd.ExecuteNonQuery()
            
Connection.Close()

        Catch 
ex As Exception

        End 
Try

        Return 
i

    End 
Function 

3- دالة الحذف ولاحظ استدعاء الإجراء المخزن sp_Delete_Person :
PHP كود :
Private Function _Delete(ByVal Id As Integer) As Integer

        Dim i 
As Integer
        
Try
            
Dim delCmd As New SqlClient.SqlCommand
            With delCmd
                
.Connection Connection
                
.CommandType CommandType.StoredProcedure
                
.CommandText "sp_Delete_Person"
                
.Parameters.Add("@Id"SqlDbType.BigInt).Value Id
            End With
            
If Connection.State ConnectionState.Open Then Connection.Close()
            
Connection.Open()
            
delCmd.ExecuteNonQuery()
            
Connection.Close()

        Catch 
ex As Exception

        End 
Try

        Return 
i
    End 
Function 


4- دالة العرض ، ولاحظ :
استدعاء الإجراء المخزن sp_Select_Person
إعادة الدالة البيانات على هيئة DataTable


PHP كود :
Private Function _Select(ByVal ID As Integer) As DataTable

        Dim dsv 
As New DataTable
        
Try
            
Dim SelCmd As New SqlClient.SqlCommand
            SelCmd
.CommandType CommandType.StoredProcedure
            SelCmd
.CommandText "sp_Select_Person"
            
SelCmd.Parameters.Add("@Id"SqlDbType.BigInt).Value ID

            SelCmd
.Connection Connection
            Dim dAdapter 
As New SqlClient.SqlDataAdapter(SelCmd)

            
dAdapter.Fill(dsv)

        Catch 
ex As Exception

        End 
Try

        Return 
dsv
    End 
Function 



سنقوم بنفس العمل مع الكائن ContactNumber .

أتمنى أن تجرب بنفسك أو أن تنتظر إلى مشاركة قادمة بإذن الله .


و السلام عليكم ورحمة الله وبركاته
http://www.elfouadsoft.com
mohamed_tegara@yahoo.com
الرد }}}
تم الشكر بواسطة:


الردود في هذا الموضوع
مدخل عملي لـ N-Tier - التطبيقات المُتعددة الطبقات - بواسطة senior - 02-10-12, 05:32 PM


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم