ظاهرا دوستان زیادی هنوز با restore کردن دیتابیس مشکل دارن.با توجه به درخواست های دوستان در این پست نحوه بازیابی اطلاعات با stored procedure ها رو توضیح میدم تا هم بک آپ رو گفته باشم و هم restore .
برای ری استور کردن بصورت زیر عمل کنید:
یک شی openFileDialog ( برای انتخاب فایل پشتیبانی که قبلا گرفتید) ، یک دکمه که با زدن اون پنجره انتخاب فایل باز بشه. یک textbox که مسیر فایل انتخاب شده رو درون خودش نگه میداره ( نام تکست باکس رو txtselectbackup بذارید) و یه دکمه که بازیابی رو انجام میده.
ابتدا یک sp درون sql بصورت زیر ایجاد کنید:
create proc myrestore
@pathfile nvarchar(300)
as
ALTER DATABASE tel SET OFFLINE with ROLLBACK IMMEDIATE RESTORE DATABASE tel
FROM DISK= @pathfile with replace alter database tel set online
go
حالا درون دکمه مربوط به انتخاب فایل بک آپ، کدهای زیر رو قرار بدید( این کدها بعد از باز شدن openfiledialog ، فقط فایل های بک آپ رو با پسوند bak. نشون میده و در صورت انتخاب شدن یک فایل مسیر و نام اون فایل رو درون تکست باکس میریزه):
openFileDialog1.Filter = "(*.bak)|*.bak";
if(openFileDialog1.ShowDialog() == DialogResult.OK)
txtselectbackup.Text = openFileDialog1.FileName.ToString();
حالا درون دکمه بازیابی اطلاعات کدهای اصلی برنامه رو قرار میدیم، به اینصورت:
if (txtselectbackup.Text != "")
{
SqlConnection con = new SqlConnection("Data Source = (local);Initial Catalog=tel;Integrated Security=True");
con.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = con;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "myrestore";
cmd.Parameters.AddWithValue("@pathfile", (txtselectbackup.Text));
cmd.ExecuteNonQuery();
con.Close();
MessageBox.Show("بازیابی اطلاعات با موفقیت انجام شد");
Application.Restart();
}
else
txtselectbackup.Focus();
توجه : برای جلوگیری از تغییرات احتمالی در مسیر فایل پشتیبان انتخاب شده، خاصیت ReadOnly مربوط به textbox رو True کنید.
تذکر : این نکته رو مد نظر داشته باشید که اگر قبلا یه فایل پشتیبان تهیه کردید و حالا میخواید که بازیابی رو انجام بدید حتما از آخرین تغییراتی که در برنامه انجام دادید یک پشتیبان جدید تهیه کنید و با همین پشتیبان جدید، اقدام به بازیابی کنید.
موفق باشید.