تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كيف تصنع نسخة إحتياطية لملفات الداتا بيز
#1
السلام عليكم ورحمة الله وبركاته


شئ مهم جدا أن نعرف كيف نبني نسخة إحتياطية من ملفات الداتا بيز ثم نحتفظ بها في مكان ما و تسترجعها عندما يحدث خلل ما في النسخة الاصلية

الفكرة
الفكرة المستخدمة يمكن تقسيمها الي ثلاثة مراحل كالتالي

المرحلة الأ
ولي
إسترجاع البيانات الموجودة في الداتا بيز علي شكل جدول DataTable تحديدا

لماذا نستخدم DataTable Class ..... لأن هذا الكلاس و بشكل عام يمثل واحدا من أهم همزات الوصل بين  كل من الداتا بيز و واجهة التطبيق الخاصة بالبرنامج

المرحلة الثانية
حفظ البيانات الموجودة في DataTable في ملف باستخدام BinarWriter

المرحلة الثالثة
إسترجاع البيانات من الملف علي شكل DataTable و ذلك باستخدام BinaryReader

توضيح

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


ثاني مشكلة سوف تواجهنا هي نوعية البيانات  المستخدمة في كل عمود فهي قد تختلف طبقا لإحتياجات كل مبرمج أو طبقا لنوعية المتغيرات التي يتم تخزينها فبعض المبرمجين قد يخزن المعلومات في شكل تكست او في شكل تاريخ او في شكل رقم ..... الي أخره لذلك وهنا أيضا تأتي صعوبة تعميم الكود

عموما وكبداية سأوضح كيف نفعل هذا مع قاعدة بيانات بها بعض الأعمدة من النوع String وهنا أنا أفترض أن من يقرأ هذا الموضوع لديه قاعدة بيانات بها بعضا من الأعمدة و مدخلاتها عبارة عن String


الكود

المرحلة الأولي
تحويل بعضا من البيانات الموجودة في الداتابيز إلي DataTable
الكود التالي مأخوذ من موقع مايكروسوفت و أنا فقط أعدت صياغته و يمكن إستخدامه في تحويل ملف الداتا بيز إلي DataTable


PHP كود :
   Friend Function GetData(sqlCommand As StringconnectionString As String) As DataTable
        Dim table 
As DataTable CType(NothingDataTable)
 
       Using conn As System.Data.SqlClient.SqlConnection = New System.Data.SqlClient.SqlConnection(connectionString)
 
           Dim command As New System.Data.SqlClient.SqlCommand(sqlCommandconn)
 
           Dim adapter As System.Data.SqlClient.SqlDataAdapter = New System.Data.SqlClient.SqlDataAdapter()
 
           adapter.SelectCommand command
            table 
= New DataTable() With {.Locale System.Globalization.CultureInfo.InvariantCulture}
 
           adapter.Fill(table)
 
       End Using

        Return table
    End 
Function 
و بما أنني ليس لدي SQL و أيضا ليس لدي MS Access لذلك و لتفادي الخطأ في تنفيذ بقية الكود لذلك سوف أبني DataTable بسيط و أستخدمه و الكود التالي يوضح ذلك
PHP كود :
Private Function BuildDataTable() As DataTable
        Dim keys 
As Integer() = New Integer() {12345}
 
       Dim names As String() = New String() {"Omar Amin""Ahmed Mohamed""Al Ezzat""Mohamed Ali""Hamada Farag"}
 
       Dim phones As String() = New String() {"01099999999""01088888888""01077777777""01066666666""01055555555"}
 
       Return BuildDataTable(keysnamesphones)
 
   End Function

 
   Private Function BuildDataTable(keys As Integer(), names As String(), phones As String()) As DataTable

        Dim table 
As DataTable CType(NothingDataTable)
 
       table = New DataTable With {.Locale System.Globalization.CultureInfo.InvariantCulture}
 
       table.Columns.Add(New DataColumn("Key"GetType(Integer)))
 
       table.Columns.Add(New DataColumn("Name"GetType(String)))
 
       table.Columns.Add(New DataColumn("Phone"GetType(String)))
 
       SyncLock keys.GetType
            For i 
As Integer 0 To keys.Count 1
                table
.Rows.Add(New Object() {keys(i), names(i), phones(i)})
 
           Next
            Return table

        End SyncLock
    End 
Function 

المرحلة الثانية

حفظ البيانات في ملف
و الكود التالي يوضح ذلك و ما يهمني توضيحه هنا هو أن عملية حفظ البيانات في الملف يجب ان تتم بترتيب مناسب حيث أن هذا الترتيب سيتم إستخدامه في إسترجاع البيانات من الملف لاحقا
مثلا لو أردنا أن نحفظ عدد الأعمده ثم نحفظ أسماء الأعمده ..... و هكذا
يجب أن يتم إسترجاع البيانات بنفس الترتيب


PHP كود :
   Friend Function CanSaveDataToFile(table As DataTablepassWord As Stringfilename As String) As Boolean

        Using writer 
As New System.IO.BinaryWriter(System.IO.File.Open(filenameSystem.IO.FileMode.Create))
 
           ' sequence of writing data is very important as we shall read data with the same sequence
            ' 
first write the password
            
' password my encrypted if required by some means
            ' 
you may use any data type for datat protection
            writer
.Write(passWord)

 
           ' second write data columns count and names
            Dim columns As DataColumnCollection = table.Columns
            ' 
write column's count
            writer.Write(columns.Count)
            For Each column As DataColumn In columns
                writer.Write(column.ColumnName)
            Next

            ' 
then write table rows count and values
            Dim rows 
As DataRowCollection table.Rows
            
' write row's count
            writer
.Write(rows.Count)
 
           For Each row As DataRow In table.Rows
                For i 
As Integer 0 To columns.Count 1
                    
' write row's values as strinng
                    
' currently the data row values are saved as string
                    writer.Write(row(i))
                Next
            Next
            Return True
        End Using
        Return False
    End Function 

المرحلة الثالثة

إسترجاع البيانات من الملف
و عملية إسترجاع البيانات تتم بنفس ترتيب عملية حفظ البيانات
و الكود التالي يوضح ذلك


PHP كود :
   Friend Function FileToDataTable(passWord As Stringfilename As String) As DataTable

        Dim table 
As DataTable CType(NothingDataTable)
 
       If (System.IO.File.Exists(filename)) Then
            Using reader 
As New System.IO.BinaryReader(System.IO.File.Open(filenameSystem.IO.FileMode.Open), New System.Text.UTF8Encoding(FalseFalse))
 
               ' check the protection string, you may use any data type for protecting the file
                Dim protection As String = reader.ReadString
                If protection <> passWord Then
                    Return Nothing
                End If

                table = New DataTable With {.Locale = System.Globalization.CultureInfo.InvariantCulture}
                Dim columns As DataColumnCollection = table.Columns
                Dim columnsCount As Integer = reader.ReadInt32()
                For i As Integer = 0 To columnsCount - 1
                    ' 
read the column's name
                    Dim columnName As String = reader.ReadString()
                    columns.Add(columnName)
                Next

                ' 
read row's count
                Dim rowsCount As Integer = reader.ReadInt32()
                For j As Integer = 0 To rowsCount - 1
                    Dim row As DataRow = table.NewRow()
                    For k As Integer = 0 To columnsCount - 1
                        ' 
read row's values as strinng
                        row(k) = reader.ReadString()
                    Next
                    table.Rows.Add(row)
                Next

            End Using
        End If
        Return table
    End Function 


بشكل عام الكود سهل و بسيط و يمكن تطويره للإستخدام بأكثر من أسلوب
و في المرفقات ستجدون بقية الكود  و كيفية استخدامه
الكود مكتوب بنسخة الفيجوال اسنوديو 2015

تقبلوا تحياتي


الملفات المرفقة
.rar   Test_DataBaseBackup.rar (الحجم : 65.97 ك ب / التحميلات : 81)
الرد }}}}
تم الشكر بواسطة: العواد الصغير


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  الترقيم التلقائي في برامج الداتا بيز silverlight 1 231 07-06-16, 12:05 AM
آخر رد: silverlight
  [كود] إختيار صف واحد أو اختيار جميع الصفوف في الداتا جريد فيو silverlight 0 338 18-12-15, 03:50 PM
آخر رد: silverlight
  [VB.NET] العمل على تحديث الداتا غريد فيو العواد الصغير 0 382 27-07-15, 10:19 PM
آخر رد: العواد الصغير
  تعلم كيف تصنع برنامج Notepad او مايسمى بالمفكرة AHMED`AMIN 8 1,914 10-10-12, 02:45 PM
آخر رد: مبرمج أوتار
  مقال- كيفية الاستغناء عن الداتا بيز التقليدية في برامجنا – ألجزء الأول RaggiTech 1 1,250 06-10-12, 12:23 AM
آخر رد: RaggiTech
  مقال- كيف تصنع ملفات المساعدة Help Files وتربطها مع برنامجك RaggiTech 0 731 05-10-12, 07:30 PM
آخر رد: RaggiTech
  مقال- أفكار في الدوت نت كبف تصنع ColorPicker RaggiTech 0 442 05-10-12, 06:53 PM
آخر رد: RaggiTech
  نبضه 2 - التشغيل العشوائي لملفات صوتيه RaggiTech 0 340 05-10-12, 04:14 AM
آخر رد: RaggiTech
  كيف تصنع ملف مصادر خارجى (Res) RaggiTech 0 335 05-10-12, 01:57 AM
آخر رد: RaggiTech
  كيفية استخدام ملف التعريف الخاص بالتطبيق لاستهداف نسخة معينة من الفريموورك- ينطبق على RaggiTech 0 367 05-10-12, 01:46 AM
آخر رد: RaggiTech

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


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