السلام عليكم ورحمة الله وبركاته
إنتهى بنا الحديث حول الإجراءات المخزنة في قاعدة البيانات ، لقد تبقى الإجراءات المخزنة الخاصة بجدول ContactNumber ، وهي على النحو التالي :
و الآن و بعدما انهينا طبقة البيانات بشقيها (الجداول و الإجراءات المخزنة) نعود لطبقة الأعمال .
و الهدف هو إضافة بعض الدوال التي تتعامل مع الإجراءات المخزنة في طبقة البيانات .
سننشئ 4 دوال محلية Private في كل كائن لاستدعاء الإجراءات المخزنة .
إذن نحن بحاجة لـ
و مثلها للحذف
و التعديل
و العرض
أتمنى أن تكون قد لاحظت الفرق بين تلك الوظائف ، حسناً الفرق أن جميع تلك الوظائف تعيد قيمة Integer ما عدا Select فهي تعيد DataTable .
أما عن سبب الفرق ؟
فهو أن كل وظيفة من الوظائف التي تعيد Integer الهدف منها معرفة هل تم تنفيذ الاستعلام أم لا .
بينما الدالة Select فنحن نريدها أن تعيد أكثر من ذلك ، فنحن نريدها أن تعديل لنا الصفوف التي تم اختيارها .
و على ما سبق ،،،
سيكون الكود في الوظائف السابقة هو كالتالي :
1- دالة الإضافة و لاحظ استدعاء الإجراء المخزن sp_Add_Person :
2- دالة التعديل و لاحظ استدعاء الإجراء المخزن sp_Update_Person :
3- دالة الحذف ولاحظ استدعاء الإجراء المخزن sp_Delete_Person :
4- دالة العرض ، ولاحظ :
استدعاء الإجراء المخزن sp_Select_Person
إعادة الدالة البيانات على هيئة DataTable
سنقوم بنفس العمل مع الكائن ContactNumber .
أتمنى أن تجرب بنفسك أو أن تنتظر إلى مشاركة قادمة بإذن الله .
و السلام عليكم ورحمة الله وبركاته
إنتهى بنا الحديث حول الإجراءات المخزنة في قاعدة البيانات ، لقد تبقى الإجراءات المخزنة الخاصة بجدول 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(id, N'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(id, N'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(id, N'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(id, N'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.NVarChar, 255).Value = Name
.Parameters.Add("@Age", SqlDbType.Int).Value = Age
.Parameters.Add("@Area", SqlDbType.NVarChar).Value = Area
.Parameters.Add("@Job", SqlDbType.NVarChar, 255).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.NVarChar, 255).Value = Name
.Parameters.Add("@Age", SqlDbType.Int).Value = Age
.Parameters.Add("@Area", SqlDbType.NVarChar).Value = Area
.Parameters.Add("@Job", SqlDbType.NVarChar, 255).Value = Job
End With
If Connection.State = ConnectionState.Open Then Connection.Close()
Connection.Open()
i = 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()
i = 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
mohamed_tegara@yahoo.com

