PDA

View Full Version : سوال: اعمال نشدن بکاپ در sql express



mahdi.m.sh
شنبه 14 آذر 1394, 10:20 صبح
با عرض سلام به همه بزرگواران
شاید تاپیکم تکراری باشه واسه همین هم عذر خواهی می کنم ولی هر کاری کردم مشکلم حل نشد
برنامه ای که به زبان VB.NET داخل ویژوال 2010 نوشتم و از دیتابیس SQL Express خود ویژوال 2010 استفاده کردم که به برنامه Attach شده ، میخوام برنامه قابلیت Backup و Restore رو از بانک داشته باشه .
از کدهای زیر که از همین سایت پیدا کردم برای این کار استفاده کردم ، جالب اینجاست که این کدا داخل برنامه ای که توی سایت بود عمل می کرد ؛ اما وقتی دقیقاً از همون کدها رو داخل برنامه خودم استفاده کردم بکاپ گرفته میشه ولی موقع بازگردانی مجدد بکاپ (Restore) روی دیتا بیس هیچ تغییری اعمال نمیشه و بانک مجدداً اطلاعات قدیمی خودش رو لود میکنه .




کد دکمه Restore

Dim Open1 As New OpenFileDialog
Open1.FileName = "db"
If Open1.ShowDialog = Windows.Forms.DialogResult.OK Then
Dim str As String = "\db.mdf"
Dim con As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\db.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")
con.Open()
Dim cmd As New SqlCommand()
SqlConnection.ClearAllPools()
cmd.Connection = con

cmd.CommandType = CommandType.Text
con.ChangeDatabase("master")
cmd.CommandText = "USE MASTER RESTORE DATABASE [" + System.Windows.Forms.Application.StartupPath & str + "] FROM DISK = N'" + Open1.FileName.ToString + " '"
cmd.ExecuteNonQuery()
con.Close()
MessageBox.Show("بازیابی با موفقیت انجام شد")

End If









کد دکمه Backup





Dim save1 As New SaveFileDialog



save1.Filter = "SQL Backup Files (*.BAK)|*.BAK |All Files(*.*)|*.0*)"


save1.FileName = "db"



save1.OverwritePrompt = True


Dim str As String = "\db.mdf"


If save1.ShowDialog = Windows.Forms.DialogResult.OK Then


Dim con1 As New SqlConnection("DataSource=.\SQLEXPRESS;AttachDbFilename=|DataDire ctory|\db.mdf;IntegratedSecurity=True;Connect Timeout=30;User Instance=True")


con1.Open()


Dim cmd1 As New SqlCommand()


SqlConnection.ClearAllPools()


cmd1.Connection = con1


str_path = save1.FileName.ToString


cmd1.CommandType = CommandType.Text


con1.ChangeDatabase("master")


cmd1.CommandText = "backup DATABASE [" + System.Windows.Forms.Application.StartupPath & str + "] toDISK=N'"+save1.FileName.ToString + " '"


cmd1.ExecuteNonQuery()


con1.Close()


MessageBox.Show("Cerate Backup Successfull")



End If






کد کانکتشن استرینگ




Dim path As String = (Microsoft.VisualBasic.Left(Application.StartupPat h, Len(Application.StartupPath) - 9))
'************************************************* ************************************************** *

Dim OleDbConnection1 As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=" & path & "db.mdf;Integrated Security=True;User Instance=True")






دوستان لطف کنید راهمایی کنید
تشکر

mahdi.m.sh
سه شنبه 17 آذر 1394, 13:18 عصر
سلام به همه دوستان
خلاصه خودم متوجه مشکل کارم شدم
از روی مثال توضیح میدم که اگر دوستی همچین مشکلی داشت بطونه برطرفش کنه


فرض کنید یه برنامه توی ویژوال میسازید و اسمشو App میذارید
وقتی بانک اطلاعاتی رو از داخل خود ویژوال تولید میکنید در دوجا این بانک ساخته میشه



یکی دخل پوشه App/App
یکی دیگه هم داخل پوشه App/App/bin/Debug



داخل کانکشن استرینگ که در پست بالا بود و برنامه با اون کار می کرد به بانک اولی (I) متصل بود و کد بکاپ و ریستور که استفاده شده بود با بانک (II) کار میکرد برای همین هم هیچ تغییری اعمال نمی شد .



کدهای بکاپ و ریستور که بالا هست کاملا درسته ولی باید کانکشن استرینگ رو به صورت زیر تغییر داد تا درست کار کنه :



Dim con1 As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\db.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")