View Full Version : مشکل در اجرای کامل کد
niloofar norouzi
یک شنبه 07 مهر 1387, 10:38 صبح
سلام
کد زیر برای restore نوشته شده،database را به حالت single user می بره اما restore را انجام نمی ده
بنظر شما این کد چه مشکلی داره؟
this.openFileDialog1.ShowDialog();
if ((this.openFileDialog1.FileName != "")&& (this.openFileDialog1.FileName!="openFileDialog1"))
{
try
{
filename = openFileDialog1.FileName;
SqlConnection objcon = new SqlConnection("Data Source=niloofar\\i2;Initial Catalog=vezaratekar;Integrated Security=True");
SqlCommand objcom = new SqlCommand();
objcom.Connection = objcon;
string f = "ALTER DATABASE vezaratekar SET SINGLE_USER WITH ROLLBACK IMMEDIATE" + " USE master; RESTORE DATABASE vezaratekar FROM DISK =N'" + filename + "'";
objcom.CommandText = f;
objcon.Open();
objcom.ExecuteNonQuery();
objcon.Close();
///*******************************///
objcon.Open();
objcom.CommandText ="ALTER DATABASE vezaratekar SET MULTI_USER ";
objcom.Connection = objcon;
objcom.ExecuteNonQuery();
objcon.Close();
restore restore1 = new restore();
restore1.Show();
}
catch {
restoreN restoreN1=new restoreN();
restoreN1.Show();
}
mehrnoosh_al62
یک شنبه 07 مهر 1387, 11:29 صبح
سلام
من قبلا تو برنامم از این کد برای Restore کردن استفاده کردم و هیچ مشکلی هم نداشتم. شما از Use Master قبل از دستور Alter استفاده کن. در ضمن نیازی نیست بعد از Restore دوباره دیتابیس رو به حالت Multi_User برگردونی چون همون دستور WITH ROLLBACK IMMEDIATE این کار رو بعد از Restore انجام میده
String f = " USE master "+
" ALTER DATABASE vezaratekar SET SINGLE_USER WITH ROLLBACK IMMEDIATE " +
" RESTORE DATABASE vezaratekar FROM DISK =N'" + filename + "'";
niloofar norouzi
یک شنبه 07 مهر 1387, 13:59 عصر
من از کد شما هم استفاده کردم اما باز نشد
backup انجام می شه اما restore نه
نمی دونم مشکل کار کجاست:ناراحت:
لطفا راهنمای بفرمایید
mehrnoosh_al62
یک شنبه 07 مهر 1387, 15:27 عصر
اگه ممکنه کد BackUp رو هم بذارید و همینطور اروری که هنگام Restore میده. اینجوری بهترمیشه کمک کرد
niloofar norouzi
یک شنبه 07 مهر 1387, 15:38 عصر
برای restore ارور نمی ده فقط database را به حالتsingleuser می بره سپس وارد catch می شه
اینم کدbackup
try
{
this.saveFileDialog1.ShowDialog();
if (this.saveFileDialog1.FileName != "")
filename = saveFileDialog1.FileName.ToString();
SqlConnection objcon = new SqlConnection("Data Source=niloofar\\i2;Initial Catalog=vezaratekar;Integrated Security=True");
SqlCommand objcom = new SqlCommand();
objcom.Connection = objcon;
string t = @"BACKUP DATABASE [vezaratekar]TO DISK=N'" + filename + "' WITH NOFORMAT,NOINIT,NAME=N'mydb-full Database Backup',SKIP,NOREWIND,NOUNLOAD,STATS=10;";
objcom.CommandText = t;
objcon.Open();
objcom.ExecuteNonQuery();
objcon.Close();
backupy backup1 = new backupy();
backup1.Show();
}
catch
{
backupn baclupn1 = new backupn();
baclupn1.Show();
}
سپاس گزارم
mehrnoosh_al62
دوشنبه 08 مهر 1387, 09:03 صبح
ببینید همین که وارد Cacth میشه یعنی داخل بدنه Try ارور داره... شما Try-Cacth رو بردار تا ببینی ارور مربوط به کدام خطه و چیه ...
البته طبق کد Backup فکر میکنم برای Restore هم باید بعد از With شرایطی که برای فایل Backup در نظر گرفتیو بذاری. میتونی برای امتحان در قسمت کد Backup هر چی بعد از With گذاشتیو پاک کنی تا ببینی Restore انجام میشه یا نه...؟
string t = "BACKUP DATABASE [vezaratekar]TO DISK=N'" + filename
niloofar norouzi
دوشنبه 08 مهر 1387, 11:43 صبح
ممنون از کمکتون
من تغییراتی که شما گفتید اعمال کردم
اما هنگام اجرایrestore با این error مواجه شدم
The tail of the log for the database "vezaratekar" 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'.
niloofar norouzi
سه شنبه 09 مهر 1387, 10:27 صبح
من نمی دونم با ید چی کار کنم
لطفا کمکم کنید
mehrnoosh_al62
سه شنبه 09 مهر 1387, 11:53 صبح
دوست عزیز من دقیقا همین کدو اجرا کردم و بدون هیچ خطایی اجرا شد . این خطایی که میگید دقیقا نمیدونم چیه ولی به نظر مشکل از فایل Backup هست یا اصلا فایل بک آپی پیدا نمیکنه. البته بازم مطمئن نیستم. ... مشکلتون نباید خیلی بزرگ باشه کدها به نظر درست میان... ببنید من وقتی کد زیر رو اجرا میکنم بدون هیچ خطایی انجام میشه:
BackUp :
backup database db1 to disk='c:\backed\b'
Restore :
use master
alter database db1 set single_user with ROLLBACK IMMEDIATE
restore database db1 from disk ='c:\backed\b'
niloofar norouzi
سه شنبه 09 مهر 1387, 12:22 عصر
کسی با این مشکل روبرو نشده؟
backup با موفقیت انجام می شه
jaza_sa
سه شنبه 09 مهر 1387, 13:51 عصر
کسی با این مشکل روبرو نشده؟
backup با موفقیت انجام می شه
+ جستجو کنید +
Backup :
public bool Backup()
{
bool result = false;
string strBackup = "BACKUP DATABASE [{0}] TO DISK = '{1}' WITH FORMAT";
strBackup = string.Format(strBackup, "Test_02", "C:\\Backup");
if (Sql.Connect())
{
if (Sql.DoCommand(strBackup))
{
result = true;
}
}
Sql.Disconnect();
this.LastError = Sql.LastError;
this.LastException = Sql.LastException;
return result;
}
Restore :
public bool Restore()
{
bool result = false;
string strRestore=
@"USE master;
RESTORE DATABASE [{0}] FROM DISK = '{1}'
WITH REPLACE;";
strRestore = string.Format(strRestore, "Test_02", "C:\\Backup");
if (Sql.Connect())
{
if (Sql.DoCommand(strRestore))
{
result = true;
}
}
Sql.Disconnect();
this.LastError = Sql.LastError;
this.LastException = Sql.LastException;
return result;
}
البته متد های Sql.Connect , Sql.Disconnect , Sql.DoCommand متدهای یکی از کلاس های خودمه که
بجای اونها شما باید به دیتابیس وصل شید ، دستوری که قرمز شده رو اجرا کنید و قطع ارتباط ...
niloofar norouzi
سه شنبه 09 مهر 1387, 15:32 عصر
ممنون از راهنماییتون
اما code شما همون دفعه ی اول restore می شه
وقتی چیزی حذف و اضافه می کنم دیگه کار نمی کنه
error:
Exclusive access could not be obtained because the database is in use.
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master'.
jaza_sa
سه شنبه 09 مهر 1387, 16:41 عصر
Exclusive access could not be obtained because the database is in use.
خوب این خطا بطور واضح مشکل رو تعین کرده ، دیتابیس شما در اون زمان در حال استفاده است
و بنابر این امکان Restor کردن یا حتی Backup گرفتن نیست
احتمالا یک Connection به دیتابیس باز مونده و بسته نشده
niloofar norouzi
سه شنبه 09 مهر 1387, 17:20 عصر
قبلش می تونم از کدی استفاده کنم که همه را کنترل کنه
چه جوری می تونم مطمئن بشم؟
jaza_sa
سه شنبه 09 مهر 1387, 17:31 عصر
قبلش می تونم از کدی استفاده کنم که همه را کنترل کنه
چه جوری می تونم مطمئن بشم؟
با کد نویسی اصولی
اگر یک کلاس نوشته باشید که فقط کارش : ارتباط دیتابیس، قطع ارتباط با دیتابیس، انجام دستورات insert update delete ، انجام دستور select باشه
دیگه این مشکلات براتون پیش نمیاد :چشمک:
مطمئن خواهید بود که هیچ کانکشنی باز نیست و ...
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.