منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : مسار استرجاع قاعدة البيانات خطاء عند العميل
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
اسعد الله جميع اوقاتكم بكل خير
عندي الكود التالي استرجاع نسخة sql وتعمل بشكل صحيح عندي ولكن عند العميل خطاء
والسبب بأن مسار استرجاع النسخة مختلف عند العميل ما هو الحل لو تكرمتوا

كود :
       If String.IsNullOrEmpty(Textrecovery.Text) Then Exit Sub
       If Not Textrecovery.Text.Contains("Data1.bak") Then
       DevExpress.XtraEditors.XtraMessageBox.Show("قاعدة البيانات التي تم اختيارها لا تتوافق مع المطلوب", "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error)
       Exit Sub
       End If
       Try
       Dim con As New SqlConnection("server=.\SQLEXPRESS;Initial Catalog=master;integrated security=true")
       con.Open()
       Dim cmd As New SqlCommand("ALTER DATABASE Data1 SET SINGLE_USER WITH ROLLBACK IMMEDIATE", con)
       cmd.ExecuteNonQuery()
       cmd = New SqlCommand("RESTORE DATABASE [Data1] FROM DISK = @filePath WITH MOVE 'Data1' TO 'C:\Program Files (x86)\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\Data1.mdf', MOVE 'Data1_log' TO 'C:\Program Files (x86)\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\Data1.ldf', REPLACE, RECOVERY", con)
       cmd.Parameters.AddWithValue("@filePath", Textrecovery.Text)
       cmd.ExecuteNonQuery()
       cmd = New SqlCommand("ALTER DATABASE Data1 SET MULTI_USER WITH ROLLBACK IMMEDIATE", con)
       cmd.ExecuteNonQuery()
       con.Close()
       DevExpress.XtraEditors.XtraMessageBox.Show("تمت عملية استرجاع النسخة الاحتياطية لقاعدة البيانات بنجاح", "تنبية", MessageBoxButtons.OK, MessageBoxIcon.Information)
       Textrecovery.Text = String.Empty
       Catch ex As Exception
       DevExpress.XtraEditors.XtraMessageBox.Show("فشل في عملية الاسترجاع: " & ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error)
       End Try
هل اجد شرح لهذه الطريقة ؟
هذا الحل يا اخوان
كود :
   Private Sub Btnrecovery_Click(sender As Object, e As EventArgs) Handles Btnrecovery.Click
       Dim database As String = con.Database.ToString()
       If String.IsNullOrEmpty(Textrecovery.Text) Then
           DevExpress.XtraEditors.XtraMessageBox.Show("الرجاء اختيار ملف النسخة الاحتياطية", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Warning)
           Exit Sub
       End If
       Try
           con.Open()
           ' ضبط قاعدة البيانات إلى وضع المستخدم الواحد
           Dim str1 As String = String.Format("ALTER DATABASE [{0}] SET SINGLE_USER WITH ROLLBACK IMMEDIATE", database)
           Dim cmd1 As New SqlCommand(str1, con)
           cmd1.ExecuteNonQuery()
           ' استعادة قاعدة البيانات
           Dim str2 As String = String.Format("USE MASTER; RESTORE DATABASE [{0}] FROM DISK = '{1}' WITH REPLACE", database, Textrecovery.Text)
           Dim cmd2 As New SqlCommand(str2, con)
           cmd2.ExecuteNonQuery()
           ' إعادة قاعدة البيانات إلى وضع متعدد المستخدمين
           Dim str3 As String = String.Format("ALTER DATABASE [{0}] SET MULTI_USER", database)
           Dim cmd3 As New SqlCommand(str3, con)
           cmd3.ExecuteNonQuery()
           DevExpress.XtraEditors.XtraMessageBox.Show("تم استرجاع النسخة الاحتياطية لقاعدة البيانات بنجاح", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Information)
       Catch ex As Exception
           DevExpress.XtraEditors.XtraMessageBox.Show("حدث خطأ أثناء استعادة النسخة الاحتياطية لقاعدة البيانات: " & ex.Message, "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error)
       Finally
           ' التأكد من إغلاق الاتصال دائمًا
           If con.State = ConnectionState.Open Then
               con.Close()
           End If
       End Try

   End Sub