PDA

View Full Version : سوال: error in restore database



atifeh
دوشنبه 10 مهر 1391, 12:16 عصر
سلام
من برای restore کردن دیتابیس خیلی گشتم ولی کدی که بدون خطا باشه پیدا نکردم
در نهایت از این کد استفاده کردم
Alter DATABASE ghove set SINGLE_USER with Rollback IMMEDIATE
use master
restore database ghove
from disk = 'G:\tst.bak'
اما خطای زیر را می دهد:
Msg 154, Level 15, State 1, Procedure restore1, Line 10
a USE database statement is not allowed in a procedure, function or trigger.

لطفا راهنمایی کنین.
ممنونم

hamidkh
چهارشنبه 12 مهر 1391, 07:19 صبح
سلام
این کد احتمالا بتونه جواب بده کار شما رو. البته با sp نیس.

SqlCommand cmd = new SqlCommand("USE [master];ALTER DATABASE [G:\tst.mdf] SET SINGLE_USER WITH ROLLBACK IMMEDIATE",
myConnection);
myConnection.Open();
cmd.ExecuteNonQuery();
string query = "USE [master]; RESTORE DATABASE [G:\tst.mdf] FROM DISK = N'G:\tst.bak' WITH FILE = 1, NOUNLOAD, REPLACE, STATS =
10";
cmd = new SqlCommand(query,
myConnection);
cmd.ExecuteNonQuery();
cmd = new SqlCommand("USE [master];ALTER DATABASE [G:\tst.mdf] SET MULTI_USER WITH ROLLBACK IMMEDIATE",
myConnection);
cmd.ExecuteNonQuery();
myConnection.Close();

Nima_kyan
چهارشنبه 12 مهر 1391, 09:26 صبح
یه سر به این تایپیک بزن کمکت میکنه
http://barnamenevis.org/showthread.php?360367-%D9%83%D8%AF-Backup-amp-Restore-%D9%83%D8%B1%D8%AF%D9%86%D8%8C-%D8%A8%D9%87-%D8%B7%D9%88%D8%B1%D9%8A-%D9%83%D9%87-%D9%81%D9%82%D8%B7-%D8%B1%D9%88%D9%8A-%D8%AF%D8%A7%D8%AF%D9%87-%D9%83%D8%A7%D8%B1-%D9%83%D9%86%D8%AF

atifeh
چهارشنبه 12 مهر 1391, 22:47 عصر
خیلی ممنون از کمکتون hamidkh
خیلی کمک کرد اما یک مشکلی هست که اگر مثلا بک آپ بگیرم و برنامه را ببندم و باز کنم یا دوبار عمل restore را با دوتا بک آپ متفاوت انجام دهم
این خطا را می دهد :
Invalid zero-length device name. Reissue the BACKUP statement with a valid device name.
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master'.

ممنون می شم اگر می دونید کمک کنین.

hamidkh
پنج شنبه 13 مهر 1391, 06:47 صبح
احتمالا قوی اشکال از آدرس دهی تون باشه. مسیر فایل bak با فایل اصلی رو از هم جدا کنید. در کل اشکال به آدرس گرفته شده.

atifeh
پنج شنبه 13 مهر 1391, 12:49 عصر
این کده منه که شما فرستادین برام و من استفاده کردم:
private void button7_Click(object sender, EventArgs e)
{
DialogResult result = MessageBox.Show("آیا مطمئن هستید؟", "هشدار", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (result == DialogResult.Yes)
{
string strFileName = string.Empty;
openFileDialog1.Filter = @"SQL Backup files (*.BAK) |*.BAK|All files(*.*) |*.*";
//saveFileDialog1.FileName = "BackupFile" + DateTime.Now.ToShortDateString();
openFileDialog1.FilterIndex = 1;
//saveFileDialog1.OverwritePrompt = true;
saveFileDialog1.Title = "Restore SQL File";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
strFileName = saveFileDialog1.FileName;
Restore(strFileName);
}

}
}

private void Restore(string strFileName)
{
try
{
SqlConnection myConnection = null;
myConnection = new SqlConnection("data source= NOVIN_PENDAR;initial catalog =ghove;;Integrated Security=True");
SqlCommand cmd = new SqlCommand("USE [master];ALTER DATABASE ghove SET SINGLE_USER WITH ROLLBACK IMMEDIATE",myConnection);
myConnection.Open();
cmd.ExecuteNonQuery();
string query = "USE [master]; RESTORE DATABASE ghove FROM DISK = '"+ strFileName + "'" +" WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10";
cmd = new SqlCommand(query,myConnection);
cmd.ExecuteNonQuery();
cmd = new SqlCommand("USE [master];ALTER DATABASE ghove SET MULTI_USER WITH ROLLBACK IMMEDIATE",myConnection);
cmd.ExecuteNonQuery();
myConnection.Close();

MessageBox.Show(" عمل بازگردانی اطلاعات با موفقيت انجام شد");
}
catch (Exception ex)
{
MessageBox.Show("Error Occurd :" + ex.Message);
}
}

ghove نام دیتابیسم است.