تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
صمم الكلاس الخاص بك - كلاس للتعامل مع SQL SERVER
#6
كلام جميل اخي خضر و هذه الهندسة هي اللبنة الاساسية في بناء برامج كبيرة
نحن نستخدم هذه التقنية لبناء البرامج التجارية في اغلب الاحيان
انا عن نفسي لا احب استخدام اي جزء يختص بالتعامل مع البيانات في واجهة البرنامج , كله يكون في قاعدة البيانات
اما من ناحية البرنامج فلا احتاج الا بناء الكلاسات الخاصة للتخاطب مع القاعدة و من ثم واجهة المستخدم التي تتخاطب مع الكلاسات السابقة
هكذا تكون قد فصلت كل شيئ لوحده
يوجد من الكلام الكثير الكثير عن هذه التقنية ربما في قادم الايام ان شاء الله ستكون لي وقفة مفصلة و يا ريت بالتعاون مع شخصكم و باقي الاعضاء للخروج بمرجع جيد عنها
تحياتي لك

بسم الله الرحمن الرحيم
استكمالا لما سبق ساضع مثال تجريب على الكلاس الذي انشأناه سابقا للتجريب
اولا سانشئ قاعدة بيانات بسيطة على السيرفر مؤلفة من 3 جداول
جدول الزبائن

جدول الطلبيات او الفواتير


جدول تفاصيل الفاتورة او المواد

و ساضع السكربت الخاص بها اسفل الموضوع
اردت استخدام الكلاس السابق مباشرة في عملية التحديث على القاعدة , على كل الجداول السابقة
و ساعمل نموذج في واجهة اللغة كما يلي

سنستورد الكلاس السابق الذي اصبح مكتبة الى مراجعنا و نتعامل معه كما ساعرف بعض الكائنات للتعامل الجداول السابقة كما يلي

PHP كود :
Imports System.Data.SqlClient
Imports SQLDBConnect

Public Class Clients
    Dim da1
da2da3 As SqlClient.SqlDataAdapter
    Dim ds 
As New DataSet
    Dim d1
d2d3 As New DbConect 

انا عدلت على الكلاس السابق في جزئية جلب السيرفرات فقط حيث لم تعمل معي في الوندوز 10 مع انها مازالت تعمل في وندوز 7
على اي حال انا ساضع الكلاس مرفق مع المثال


الكود التالي في حدث تحميل النموذج و هو مشروح بالكامل

PHP كود :
   Private Sub Clients_Load(sender As ObjectAs EventArgsHandles MyBase.Load
        
'تعين الاتصال الى القاعدة
        DbConect.SetConnectionString_ForDb("ClientDb")
        '
فتح الاتصال
        DbConect
.OpenSqlConnection()
 
       'تحديد اسماء الجداول التي نريد التعامل معها
        d1.TableName = "ClientsTb"
        d2.TableName = "OrdersTb"
        d3.TableName = "GoodsTb"
        '
هنا انا اخترن جميع الحقول
        Dim fild
() As String = {"*"}
 
       'تفريغ الداتاسيت
        ds.Clear()
        '
----------------------------------
 
       'Adapter انشاء كائنات
        '
و ربطها مع الجداول السابقة
        da1 
= New SqlClient.SqlDataAdapter
        da1 
d1.Creat_Adapter(fild)
 
       '------------
        da2 = New SqlClient.SqlDataAdapter
        da2 = d2.Creat_Adapter(fild)
        '
------------------------
 
       da3 = New SqlClient.SqlDataAdapter
        da3 
d3.Creat_Adapter(fild)
 
       'ملئ الداتاسيت ببيانات الجداول
        da1.Fill(ds, d1.TableName)
        da2.Fill(ds, d2.TableName)
        da3.Fill(ds, d3.TableName)
        ds.AcceptChanges()

        '
انشاء علاقات بين الجداول
        
'----------------------------.زبائن و طلبيات-------------------------------------
        Dim col1 As DataColumn = ds.Tables(d1.TableName).Columns("Cl_Id") '
جدول الزبائن
        Dim col2 
As DataColumn ds.Tables(d2.TableName).Columns("Cl_Id"'جدول الطلبيات
        Dim re As New DataRelation("Clt_Ord", col1, col2)
        ds.Relations.Add(re)
        ''----------------------------طلبيات و مواد---------------------------------------
        Dim col4 As DataColumn = ds.Tables(d2.TableName).Columns("Ord_Id") '
جدول الطلبيات
        Dim col5 
As DataColumn ds.Tables(d3.TableName).Columns("Ord_Id"'جدول المواد
        Dim re3 As New DataRelation("Ord_Gods", col4, col5)
        ds.Relations.Add(re3)
        '
BindingSource ربط كائنات
        
'بمصدر بيانات
        bn1.DataSource = ds.Tables(d1.TableName)
        bn2.DataSource = bn1
        bn2.DataMember = "Clt_Ord"
        bn3.DataSource = bn2
        bn3.DataMember = "Ord_Gods"
        '
DataGrids و كذلك ربط
        Dg1
.DataSource bn1
        dg2
.DataSource bn2
        dg3
.DataSource bn3
        
'اغلاق الاتصال
        DbConect.CloseSqlConnection()
        '
عرض اسم السيرفر و حالة الاتصال و جملة الاتصال اسفل النموذج
        ST1
.Items(0).Text DbConect.GetSQlConnectionString " | "
 
       ST1.Items(2).Text DbConect.GetSrvName
        ST1
.Items(1).Text DbConect.GetConnectionState " | "

 
   End Sub 

و الكود التالي في زر الحفظ

PHP كود :
   'اجراء الحفظ
    Private Sub SaveBtn_Click(sender As Object, e As EventArgs) Handles SaveBtn.Click
        Me.Validate()
        bn1.EndEdit()
        bn2.EndEdit()
        bn3.EndEdit()

        Dim SaveDataSet As New DataSet
        SaveDataSet = ds.Clone

        If ds.HasChanges = True Then
            SaveDataSet = ds.GetChanges(DataRowState.Added Or DataRowState.Deleted Or DataRowState.Modified)

            If (Not (SaveDataSet) Is Nothing) Then

                '
*******هذه الاحداث لعرض العمليات و لا دخل لها بعملية الحفظ قم بازالتها
                AddHandler da3
.RowUpdatingAddressOf OnRowUpdating
                AddHandler da3
.RowUpdatedAddressOf OnRowUpdated
                
'*******

                da1.Update(SaveDataSet, d1.TableName)
                da2.Update(SaveDataSet, d2.TableName)
                da3.Update(SaveDataSet, d3.TableName)

                '
********
 
               RemoveHandler da3.RowUpdatingAddressOf OnRowUpdating
                RemoveHandler da3
.RowUpdatedAddressOf OnRowUpdated
                
'********

                ds.Merge(SaveDataSet)
                ds.AcceptChanges()
            End If

        End If

    End Sub 

فقط هذا كل ما احتجناه لعمليات الحفظ مهما كانت العمليات التي تمت على الجداول
انا اضفت حدثين اضافيين لتعرف ما الذي حصل اثناء عملية الحفظ و تحديدا لجدول تفاصيل الفاتورة فقط

PHP كود :
   Private Sub OnRowUpdating(sender As ObjectAs SqlRowUpdatingEventArgs)
 
       PrintEventArgs(e)
 
   End Sub

    Private Sub OnRowUpdated
(sender As ObjectAs SqlRowUpdatedEventArgs)
 
       PrintEventArgs(e)
 
   End Sub

    Private Overloads Sub PrintEventArgs
(args As SqlRowUpdatingEventArgs)

 
       TextBox1.Text += Environment.NewLine & ("OnRowUpdating")
 
       TextBox1.Text += Environment.NewLine & ("  event args: (" " command=" args.Command.CommandText &
 
            " commandType=" args.StatementType " status=" args.Status ")")
 
   End Sub


    Private Overloads Sub PrintEventArgs
(args As SqlRowUpdatedEventArgs)
 
       TextBox1.Text += Environment.NewLine & ("OnRowUpdated")
 
       TextBox1.Text += Environment.NewLine & ("  event args: (" " command=" args.Command.CommandText &
 
          " commandType=" args.StatementType " recordsAffected=" &
 
          args.RecordsAffected " status=" args.Status ")")
 
   End Sub 

و هذا تجريب من واجهة الادخال


و اخيرا المثال مرفق مع سكربت القاعدة لمن يحب ان يجرب

الجزئية التي تم تعديلها في الكلاس السابق 

PHP كود :
   Private Shared Sub GetServerList()
 
       Dim Server As String String.Empty
 
       Dim instance As Sql.SqlDataSourceEnumerator Sql.SqlDataSourceEnumerator.Instance
        Dim table 
As System.Data.DataTable instance.GetDataSources()
 
       Dim Machine As String String.Empty

 
       For p As Integer 0 To table.Rows.Count 1
            Server 
String.Empty
 
           Server table.Rows(p).Item("ServerName")
 
           If table.Rows(p).Item("ServerName").ToString.Length 0 Then
                If table
.Rows(p).Item("ServerName") = Machine Then
                    Machine 
= (System.Environment.MachineName)
 
                   Server table.Rows(p).Item("ServerName")
 
                   ReDim SrvNameArray(table.Rows.Count 1)
 
                   SrvNameArray.SetValue(Serverp)
 
               Else
                    Machine 
= (System.Environment.MachineName "\" + table.Rows(p).Item("ServerName"))
                    ReDim SrvNameArray(table.Rows.Count - 1)
                    SrvNameArray.SetValue(Server, p)
                End If
                MsgBox(SrvNameArray.Count)
            End If
        Next



    End Sub 


الملفات المرفقة
.rar   Clients.rar (الحجم : 1.28 م ب / التحميلات : 459)
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال
الرد }}}


الردود في هذا الموضوع
RE: صمم الكلاس الخاص بك - كلاس للتعامل مع SQL SERVER - بواسطة ابو ليلى - 26-06-16, 01:22 AM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
Rainbow [VB.NET] كلاس ResizeControls وطريقة جديد ومميزة لتكبير وتصغير ادوات الفورم تلقائيا الماجيك مسعد 9 10,539 19-07-25, 05:59 PM
آخر رد: Mostafa25
Star حماية السورس كود الخاص بك من الكسر مجانا YousefOkasha 7 6,917 03-07-24, 09:20 AM
آخر رد: أبو جودة
  دمج قاعدة بيانات SQL Server 2008 مع المشروع بالـ VBNET snipercoder 4 8,642 12-11-20, 06:01 PM
آخر رد: lion4
  مثال للتعامل مع الجداول المرتبطة - عن طريق الكلاسات ابو ليلى 24 16,430 04-10-20, 06:16 PM
آخر رد: محمد بن عطية
  [درس فيديو] السماح بالاتصالات البعيدة بـ SQL Server Expr aljzazy 0 2,247 13-04-20, 02:30 PM
آخر رد: aljzazy
  [SQL] تحسين أداء وسرعة قاعدة البيانات SQL SERVER اسامه الهرماوي 0 4,111 28-10-19, 03:12 AM
آخر رد: اسامه الهرماوي
  [مشروع] تعلم كيف تصنع برنامج لنشر منشورات لحساب الفيس بوك الخاص بك Basil Abdallah 8 6,967 01-07-18, 01:21 AM
آخر رد: YousefOkasha
  كيفية قراءة ملف باستخدام IntPtr الخاص بالملف silverlight 3 3,960 24-12-16, 03:13 AM
آخر رد: silverlight
  الاستفادة من بارمترات الاخراج من SQL Server داخل برنامجك ابو ليلى 1 3,564 20-08-16, 02:16 AM
آخر رد: الوادي
  [VB.NET] تشغيل Twain الخاص بسحب الصور من السكنر في حالة net framework4 ahmed saleh 4 4,775 25-10-15, 07:20 PM
آخر رد: عدنان الشمري

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


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