تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] سؤال حول الخاصية RejectChanges في ADO.NET
#1
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
قرأت بأن الخاصية RejectChanges تقوم بما يلي :

''تقوم هذه الخاصية بإلغاء أية تغييرات قد أجريت على البيانات في الـ DataSet منذ تحميلهاأو منذ أخر استدعاء لها
بمعنى أنها تلغي أية أسطر مضافة حديثاً ، وتستعيد أسطراً حذفت أيضاً حديثاً
وتعيد وضع الأسطر المعدلة إلى قيمتها السابقة''

لكن عندما جربت تطبيقها لم تقم بأي شيء
جربت بكل الطرق فلم أصل لنتيجة والمثال في المرفقات
أرجو التعديل على المثال المرفق لتتضح لي المعلومات لو تكرمتم
وجزاكم الله خيراً






الملفات المرفقة
.rar   DataRejectChanges.rar (الحجم : 96.4 ك ب / التحميلات : 52)
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة:
#2
وعليكم  السلام  ورحمة  الله  وبركاته  





انا استخدم  هذه الخاصيه بالفعل  ولكن  مع  ال DataTable


وهذا النص يشرحها



"RejectChanges : استخدم هذه الوسيلة لرفض كلّ التغييرات التي أجراها المستخدم على سجلات الجدول، بحيث يعود للحالة التي كان عليها عند تحميله من قاعدة البيانات (أو عند آخر استخدام للوسيلة AcceptChanges)."


بمعني انه  يمكنك  تأكيد التغيرات  من  خلال AcceptChanges  وفي  هذه الحاله  لن  تقوم  RejectChanges  بأسترجاع البيانات  التي  تغيرت ..


الرد }}}
تم الشكر بواسطة: السندبااد , a_almisery , الوليد ☺
#3
ألف شكر لك أخ mr_mgm
المعلومة التي ذكرتها اعرفها ولكن عندما طبقتها لم تنجح وهذا ما أردت الوصول إليه
أنا أريد مثالاً عملياً لتطبيق هذه الخاصية
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة:
#4

السلام عليكم ورحمة الله

أخي السندبااد
المشروع لم يعمل لدي لأنه WPF 2013
ولكن باطلاعي على الكود في الملف MainWindow.xaml.vb اتضح أنك تقول بالعمليات مباشرة على قاعدة البيانات
وبهذا لن يفيد استخدام RejectChanges لأنها تتعلق ب DataSet وDataTable وDataRow ولم أتعامل معها.
الكود التالي الموجود في مشروعك يقوم بالتعامل المباشر على قاعدة البيانات الذي لا يقبل التراجع
PHP كود :
conn.Open()
Cmd.ExecuteNonQuery()
conn.Close() 

الرد }}}
تم الشكر بواسطة: السندبااد
#5
شكراً لك أخي الوليد
إذن ما هو الإجراء الصحيح لتطبيق هذه الخاصية ؟
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة: الوليد ☺
#6

السلام عليكم ورحمة الله

لم أتعامل مع الأمر RejectChanges

لكن هذا كود من أحد فورمات مشروع أحد الأخوة الله يذكره بالخير، إن شاء الله يفيدك

ستلاحظ أن الحقل id في الداتاجريد عند إضافة سطر جديد لا يحتوي شيء
وهذا طبيعي لأن الترقيم يتم في قاعدة البيانات لكن سترى القيمة بعد التحديث
PHP كود :
Imports System.Data.OleDb

Public Class Form1

    Dim conn 
As New OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0; Data Source = Database1.accdb;")
    
Dim myDatatable As New DataTable
    Dim sql 
As String "SELECT * FROM [table1] "

    
Private Sub Form1_Load(sender As System.ObjectAs System.EventArgsHandles MyBase.Load
        
' قراءة قاعدة البيانات '
        
ReadDatabase()

    
End Sub


    
' قراءة قاعدة البيانات '
    
Private Sub ReadDatabase()
        
Using da As New OleDbDataAdapter(sqlconn)
            
myDatatable.Clear() ' إفراغ الداتاتابل '
            
da.Fill(myDatatable)
            
Me.DataGridView1.DataSource myDatatable
        End Using
    End Sub


    
' إضافة بيانات للداتاتابل فقط '
    
Private Sub Button1_Click(sender As System.ObjectAs System.EventArgsHandles Button1.Click

        
' إضافة سطر جديد '
        
Dim NewRow As DataRow
        NewRow 
myDatatable.NewRow
        
'NewRow("id") = ### لا يستخدم هذا السطر إذا كان الترقيم تلقائي '
        
NewRow("name") = Me.TextBox1.Text

        
' إضافته للداتاتابل '
        
myDatatable.Rows.Add(NewRow)
        
Me.DataGridView1.Refresh()

        
MsgBox("تم إضافة البيانات للداتاتابل وليس قاعدة البيانات")

    
End Sub


    
' التراجع عن التحديثات '
    ' بشرط لم يتم عمل تحديث لقاعدة البيانات '
    
Private Sub Button2_Click(sender As System.ObjectAs System.EventArgsHandles Button2.Click
        
If MsgBox("هل تريد بالفعل التراجع عن كل التعديلات التي قمت بها" vbNewLine _
                  
"على البيانات التي تمت على الداتاتابل؟" _
                  
MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then

            
' عمل تراجع على الداتاتابل '
            
myDatatable.RejectChanges()

            
MsgBox("تم التراجع عن جميع التعديلات" vbNewLine _
                   
"التي تمت على الداتاتابل")

        
End If
    
End Sub


    
' لتحديث قاعدة البيانات بشكل نهائي '
    
Private Sub Button3_Click(sender As System.ObjectAs System.EventArgsHandles Button3.Click
        
If MsgBox("هل تريد تطبيق التعديل التي قمت بها" vbNewLine _
                  
"على البيانات في قاعدة البيانات؟" vbNewLine _
                   
"إنتبه: لن تتمكن من استعادة البيانات السابقة"MsgBoxStyle.YesNo) = MsgBoxResult.Yes Then

            Using da 
As New OleDbDataAdapter(sqlconn)
                
Using builder As New OleDbCommandBuilder(da)
                    
da.Update(myDatatable)
                
End Using
            End Using

            
' قراءة قاعدة البيانات '
            
ReadDatabase()

            
MsgBox("تم تحديث قاعدة البيانات بآخر التعديلات" vbNewLine _
                   
"التي تمت على الداتاتابل")

        
End If
    
End Sub


End 
Class 

الرد }}}
تم الشكر بواسطة: السندبااد
#7
وعليكم السلام ورحمة الله وبركاته
أشكرك على اهتمامك أخي الوليد وقمت بالرد على سرالتك الخاصة ولكن يبدو أنك غير مفعل نظام الرسائل الخاصة هكذا خرجت لي رسالة
على كلٍ ما فهمته أن هذه الخاصية يجب استخدامها قبل عملية الحفظ وليس العكس كما كنت أفعل أنا وهنا وقعت عندي الإشكالية
فاعلم أنه لا إله إلا الله
الرد }}}
تم الشكر بواسطة: الوليد ☺



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


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