02-10-12, 05:46 PM
السلام عليكم ورحمة الله وبركاته
نستطيع أن نقسم طبقة الأعمال كما قسمنا طبقة البيانات إلى قسمين .
القسم الأول : الدوال العامة . و التي يتعامل معها المستخدم (المبرمج) و هي الطبقة العلوية للكائن .
القسم الثاني : الداول المحلية . و التي تقع بين الدوال العامة و الإجراءات المخزنة ، وهي الطبقة السفلية للكائن .
في المشاركة السابقة بدأنا في الدوال المحلية للفئة Person و الآن نكمل الدوال المحلية و نسرد دوال الفئة ContactNumber .
بدون شرح هي كالتالي :
بعد ذلك نبدأ في الدوال العامة .
و هي الداول التي سيستدعيها المستخدم مثل دالة Save و الخاصة بالحفظ و Delete الخاصة بالحذف .
ما ستقوم به هذه الدوال هو :
استدعاء الدوال المحلية و تمرير خصائص الكائن لها كبارميترات .
و عليه ، ستكون دالة الحفظ في الكائن Person كالتالي :
ستعيد الدالة عدد الأسطر المتأثرة ، 1 في حال النجاح و صفر في حال الفشل .
أما دالة التعديل فهي كالتالي :
النتيجة ستكون نفس الدالة السابقة .
أما الحذف فهي كالتالي :
القيمة العائدة نفس الكلام في الدالتين السابقتين .
تبقى دالة العرض Select ؟
هذا محتاجة شوي تركيز عشان كذا نأجلها في مشاركة مستقلة .
أرفق لكم الحل حسب أخر تحديث .
كما أرفق لكم ملف كامل لبناء الجداول و الإجراءات المخزنة في قاعدة البيانات .
نستطيع أن نقسم طبقة الأعمال كما قسمنا طبقة البيانات إلى قسمين .
القسم الأول : الدوال العامة . و التي يتعامل معها المستخدم (المبرمج) و هي الطبقة العلوية للكائن .
القسم الثاني : الداول المحلية . و التي تقع بين الدوال العامة و الإجراءات المخزنة ، وهي الطبقة السفلية للكائن .
في المشاركة السابقة بدأنا في الدوال المحلية للفئة Person و الآن نكمل الدوال المحلية و نسرد دوال الفئة ContactNumber .
بدون شرح هي كالتالي :
PHP كود :
#Region "Private Functions"
Private Function _Save(ByVal PersonID As Integer, _
ByVal Type As CallType, _
ByVal Number As String) As Integer
Dim insCMD As New SqlClient.SqlCommand
Try
With insCMD
.Connection = Me._Connection
.CommandType = CommandType.StoredProcedure
.CommandText = "sp_Add_ContactNumber"
.Parameters.Add("@PersonID", SqlDbType.Int).Value = PersonID
.Parameters.Add("@Type", SqlDbType.Int).Value = Type
.Parameters.Add("@Number", SqlDbType.NVarChar, 255).Value = Number
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
Private Function _Update(ByVal ID As Integer, _
ByVal PersonID As Integer, _
ByVal Type As CallType, _
ByVal Number 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_ContactNumber"
.Parameters.Add("@ID", SqlDbType.BigInt).Value = ID
.Parameters.Add("@PersonID", SqlDbType.Int).Value = PersonID
.Parameters.Add("@Type", SqlDbType.Int).Value = Type
.Parameters.Add("@Number", SqlDbType.NVarChar, 255).Value = Number
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
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_ContactNumber"
.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
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_ContactNumber"
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
#End Region
بعد ذلك نبدأ في الدوال العامة .
و هي الداول التي سيستدعيها المستخدم مثل دالة Save و الخاصة بالحفظ و Delete الخاصة بالحذف .
ما ستقوم به هذه الدوال هو :
استدعاء الدوال المحلية و تمرير خصائص الكائن لها كبارميترات .
و عليه ، ستكون دالة الحفظ في الكائن Person كالتالي :
PHP كود :
Function Save() As Integer
Return Me._Save(Me._PersonID, Me._Type, Me._Number)
End Function
ستعيد الدالة عدد الأسطر المتأثرة ، 1 في حال النجاح و صفر في حال الفشل .
أما دالة التعديل فهي كالتالي :
PHP كود :
Function Update() As Integer
Return Me._Update(Me._ID, Me._PersonID, Me._Type, Me._Number)
End Function
أما الحذف فهي كالتالي :
PHP كود :
Function Delete() As Integer
Return Me._Delete(Me._ID)
End Function
القيمة العائدة نفس الكلام في الدالتين السابقتين .
تبقى دالة العرض Select ؟
هذا محتاجة شوي تركيز عشان كذا نأجلها في مشاركة مستقلة .
أرفق لكم الحل حسب أخر تحديث .
كما أرفق لكم ملف كامل لبناء الجداول و الإجراءات المخزنة في قاعدة البيانات .
http://www.elfouadsoft.com
mohamed_tegara@yahoo.com
mohamed_tegara@yahoo.com

