PDA

View Full Version : Backup and Restore



masoodinfo
چهارشنبه 23 تیر 1389, 22:23 عصر
با سلام خدمت دوستان.
می خام از DB که در SQLexpress تعریف کردم بکاپ و رستور بنویسم.
بکاپ رو نوشتم ولی رستور رو مشکل دارم.


Public Sub Restore()
Try
Dim op As New Windows.Forms.OpenFileDialog
SqlConnection.ClearAllPools()
op.Filter = "Bak File|*.Bak"
op.InitialDirectory = Application.StartupPath & "\Backup"
If op.ShowDialog() = DialogResult.Cancel Then
Exit Sub
End If

con = New SqlConnection("Data Source=.\SQLEXPRESS;Integrated Security=True;User Instance=True")
con.Open()
Ct = New SqlCommand
Ct.Connection = con
Ct.CommandText = "Restore database [" + Application.StartupPath + "\Bime.mdf] from disk='" + op.FileName + "'"
Ct.ExecuteNonQuery()
con.Close()

MessageBox.Show(" ", "", MessageBoxButtons.OK, MessageBoxIcon.Information)
Catch ex As Exception
MessageBox.Show(ex.Message, "", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub


اگر برنامه رو اجرا کنم و مستقیم به سراغ رستور برم .رستور انجام میشه ولی اگر در یکی از فرم ها برم و تراکنشی رو انجام بدم و بعد به سراغ رستور برم error میده.


Exclusive access could not be obtained because the database is in use. RESTORE DATABASE is terminating abnormally

mohammad.moosaei
پنج شنبه 24 تیر 1389, 00:46 صبح
سلام دوست عزیز :

برای Restore می تونی از تابع زیر استفاده کنی ( به جای DatabaseName اسم دیتابیس و به جای Address هم می تونی آدرس فایل رو بهش بدی :لبخندساده:



Public Sub RestoreData(ByVal Address As String)
Try
Dim Cn = New SqlConnection("server=.\sqlexpress;database=master;integrated security=true")
Cn.Open()
Dc = New SqlCommand
Dc.Connection = Cn
Dc.CommandType = CommandType.Text
Dc.CommandText = "ALTER DATABASE [DatabaseName] SET SINGLE_USER with ROLLBACK IMMEDIATE USE MASTER" + _
" RESTORE DATABASE [DatabaseName] FROM DISK = N'" & Address & "' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10"
Dc.ExecuteNonQuery()
Cn.Close()
Try
Con.Open()
Catch ex As Exception
If Con.State = ConnectionState.Open Then Con.Close()
End Try
MessageBox.Show("بازیابی اطلاعات با موفقیت انجام شد", "بازیابی اطلاعات", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
Catch ex As Exception
MessageBox.Show("ClassIO -> RestoreData:" + vbNewLine + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1)
If Con.State = ConnectionState.Open Then Con.Close()
End Try
End Sub

masoodinfo
پنج شنبه 24 تیر 1389, 12:12 عصر
سلام دوست عزیز:

Database: باید نام تنها باشه ؟ DB.mdf ؟ DB ? یا آدرس کامل باید بدم؟

حالا با توجه به این تفاسیر :لبخند: با این error مواج شدم.


User does not have permission to alter database 'C:\Users\Masood\Documents\Visual Studio 2008\Projects\Bime\Bime\bin\Debug\bime.mdf', or the database does not exist. ALTER DATABASE statement failed. Cannot open backup device 'C:\Users\Masood\Documents\Visual Studio 2008\Projects\Bime\Bime\bin\Debug\Backup\13890421# 15$39$4.Bak'. Operating system error 5(error not found). RESTORE DATABASE is terminating abnormally. Changed database context to 'master'."

masoodinfo
پنج شنبه 24 تیر 1389, 13:02 عصر
سلام مجدد به دوست عزیز.

مجل حل شد.یکی از Connection ها باز بود که پیداش کردم و با کد خودم جواب میده.و 2 3 تا چیزی هم به خودم گفتم.:لبخند:
چیز دیگه اینکه کد شما کماکان همان error را می دهد.:متفکر:

mohammad.moosaei
پنج شنبه 24 تیر 1389, 16:33 عصر
سلام :

والا این کد برای من درست جواب میده .
راستی به جای نام دیتابیس فقط اسمش رو باید قرار بدید .