منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
[كود] مسار استرجاع قاعدة البيانات خطاء عند العميل - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182)
+--- قسم : قسم اسئلة VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=183)
+--- الموضوع : [كود] مسار استرجاع قاعدة البيانات خطاء عند العميل (/showthread.php?tid=50506)



مسار استرجاع قاعدة البيانات خطاء عند العميل - محمد العامر - 21-10-24

اسعد الله جميع اوقاتكم بكل خير
عندي الكود التالي استرجاع نسخة 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



RE: مسار استرجاع قاعدة البيانات خطاء عند العميل - محمد العامر - 21-10-24

هل اجد شرح لهذه الطريقة ؟


RE: مسار استرجاع قاعدة البيانات خطاء عند العميل - محمد العامر - 12-11-24

هذا الحل يا اخوان
كود :
   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