PDA

View Full Version : Backup and Restore



masoodinfo
چهارشنبه 23 تیر 1389, 21: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
چهارشنبه 23 تیر 1389, 23: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, 11: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, 12:02 عصر
سلام مجدد به دوست عزیز.

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

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

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