PDA

View Full Version : بررسی خطا هنگام restor کردن دیتابیس دربرنامه



m-alizadeh
سه شنبه 12 بهمن 1389, 08:07 صبح
سلام
من با کدی که داشتم از دیتابیس backup گرفتم و هنگامی که می خوام اون رو restore کنم با پیغام مواجه میشم. در ضمن از open file dialog استفاده کردم و در قسمت کوئری از use master استفاده کردم تا مطمئن بشم موقع restore کردن ، کسی از دیتابیس استفاده نکنه .
ممنون میشم کمکم کنید:





private void Restore(string strFileName)
{




objDataAdapter = new SqlDataAdapter();

objDataAdapter.SelectCommand = null;

if (objConnection.State == ConnectionState.Closed)
objConnection.Open();


objDataAdapter.SelectCommand = new SqlCommand();
objDataAdapter.SelectCommand.Connection = objConnection;
objDataAdapter.SelectCommand.CommandText = "ALTER DATABASE Anbar_DB SET SINGLE_USER with ROLLBACK IMMEDIATE " + "use master " + " RESTORE DATABASE Anbar_DB FROM DISK='" + strFileName + "'";
objDataAdapter.SelectCommand.CommandType = CommandType.Text;

objDataAdapter.SelectCommand.ExecuteNonQuery();


MessageBox.Show(".بازيابي بانک اطلاعاتي برنامه با موفقيت انجام شد ");



}
}




پیغام خطا:


The tail of the log for the database "Anbar_DB" has not been backed up. Use BACKUP LOG WITH NORECOVERY to backup the log if it contains work you do not want to lose. Use the WITH REPLACE or WITH STOPAT clause of the RESTORE statement to just overwrite the contents of the log.
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master'.

m-alizadeh
چهارشنبه 13 بهمن 1389, 07:26 صبح
از دوستان کسی نیست که کمک کند؟

hossin.esm
چهارشنبه 13 بهمن 1389, 10:45 صبح
دستور restore مشکل داره

"use master;ALTER DATABASE Anbar_DB SET SINGLE_USER with ROLLBACK IMMEDIATE; RESTORE DATABASE Anbar_DB FROM DISK='" + strFileName + "'";



یک نمونه هم میتونی از لینک زیر بگیری.
http://barnamenevis.org/showthread.php?64210-نمونه-برنامه-های-کوچک-و-مفيد-در-سي-شارپ&p=1172369&viewfull=1#post1172369

debugger
چهارشنبه 13 بهمن 1389, 10:46 صبح
مشکل بخاطر CommandText است . اخر کوئری باید یک Replace هم اضافه کنی

m-alizadeh
جمعه 15 بهمن 1389, 06:50 صبح
سلام از راهنماییتان ممنون کد رو تغییر دادم و حالا با این پیغام روبرو شدم :

Invalid zero-length device name. Reissue the BACKUP statement with a valid device name.
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master'.


کد:




private void Restore(string strFileName)
{

objDataAdapter = new SqlDataAdapter();

objDataAdapter.SelectCommand = null;

if (objConnection.State == ConnectionState.Closed)
objConnection.Open();


objDataAdapter.SelectCommand = new SqlCommand();
objDataAdapter.SelectCommand.Connection = objConnection;
objDataAdapter.SelectCommand.CommandText ="ALTER DATABASE Anbar_DB SET SINGLE_USER WITH ROLLBACK IMMEDIATE" + " USE master; RESTORE DATABASE Anbar_DB FROM DISK ='" + strFileName + "'";
objDataAdapter.SelectCommand.CommandType = CommandType.Text;

objDataAdapter.SelectCommand.ExecuteNonQuery();
objConnection.Close();


if (objConnection.State == ConnectionState.Closed)
objConnection.Open();

objDataAdapter.SelectCommand.CommandText = "ALTER DATABASE Anbar_DB SET MULTI_USER ";
objDataAdapter.SelectCommand.ExecuteNonQuery();
objConnection.Close();


MessageBox.Show(".بازيابي بانک اطلاعاتي برنامه با موفقيت انجام شد ");




}

hossin.esm
جمعه 15 بهمن 1389, 09:14 صبح
تو مثال فکر کنم همه چی واضح باشه .


"USE master;ALTER DATABASE Anbar_DB SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;RESTORE DATABASE Anbar_DB FROM DISK = '" +strFileName+"' ;ALTER DATABASE Anbar_DB SET MULTI_USER ;"

USE master را اول دستور بنویسید.
دوم اینکه از device name شما که همون مسیر فایل بکاپ هست خطا گرفته.