PDA

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



boysilent
شنبه 29 مهر 1391, 10:02 صبح
مدیر عزیز لطفا این تاپیک رو حذف نکن //این یه مشکله که خطا میده //اصلا هم تکراری نیست /

با سلام دوستان من این کد رو درست هم نوشتم ولی بازهم خطای وجود نئتشتن دیتابیس رو میده ؟؟
string strFileName = string.Empty;
saveFileDialog1.DefaultExt = "BAK";
saveFileDialog1.FileName="BackupFile";//+txtdate.text+";
saveFileDialog1.Filter = @"SQL Backup files (*.BAK) |*.BAK|ALL files(*.*) |*.*";
saveFileDialog1.FilterIndex = 1;
saveFileDialog1.OverwritePrompt = true;
saveFileDialog1.Title = "بک اپ گیری";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
strFileName = saveFileDialog1.FileName;
backup(strFileName);
}
/////////////////////////////////
}

private void backup(string strFileName)
{
try
{
string command = @"BACKUP DATABASE dbcn TO DISK='" + strFileName + "'";
this.Cursor = Cursors.WaitCursor;
SqlCommand ocommand = null;
SqlConnection oconnection = null;
oconnection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Resources\dbcn.mdf;Integrated Security=True;User Instance=True");
if (oconnection.State != ConnectionState.Open)
oconnection.Open();
ocommand = new SqlCommand(command,oconnection);
ocommand.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("okkkkk");


}
catch (Exception ex)


{ MessageBox.Show(ex.Message); }


این هم خطاشه؟؟
database 'dbcn' does not exist

c_doost
شنبه 29 مهر 1391, 10:32 صبح
مدیر عزیز لطفا این تاپیک رو حذف نکن //این یه مشکله که خطا میده //اصلا هم تکراری نیست /

با سلام دوستان من این کد رو درست هم نوشتم ولی بازهم خطای وجود نئتشتن دیتابیس رو میده ؟؟
string strFileName = string.Empty;
saveFileDialog1.DefaultExt = "BAK";
saveFileDialog1.FileName="BackupFile";//+txtdate.text+";
saveFileDialog1.Filter = @"SQL Backup files (*.BAK) |*.BAK|ALL files(*.*) |*.*";
saveFileDialog1.FilterIndex = 1;
saveFileDialog1.OverwritePrompt = true;
saveFileDialog1.Title = "بک اپ گیری";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
strFileName = saveFileDialog1.FileName;
backup(strFileName);
}
/////////////////////////////////
}

private void backup(string strFileName)
{
try
{
string command = @"BACKUP DATABASE dbcn TO DISK='" + strFileName + "'";
this.Cursor = Cursors.WaitCursor;
SqlCommand ocommand = null;
SqlConnection oconnection = null;
oconnection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Resources\dbcn.mdf;Integrated Security=True;User Instance=True");
if (oconnection.State != ConnectionState.Open)
oconnection.Open();
ocommand = new SqlCommand(command,oconnection);
ocommand.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("okkkkk");


}
catch (Exception ex)


{ MessageBox.Show(ex.Message); }


این هم خطاشه؟؟
database 'dbcn' does not exist


oconnection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Resources\dbcn.mdf;Integrated Security=True;User Instance=True");

|DataDirector y فاصله را حذف کن شاید بخاطر این باشه

roolinjax
شنبه 29 مهر 1391, 11:38 صبح
سلام
روش کانکت به دیتابیستون مورد داره برادر.
این روش کانکت بصورت آفلاینه
واسه همین در لحظه ای که می خواد بکاپ بگیره ارتباطی با بانک نداره و میگه چنین دیتابیسی موجود نیست.
پیشنهادم اینه که روش اتصال به بانکتون رو بصورت آنلاین کنین. اینطوری یه مقدار هم امنیت دیتابیستون بیشتر میشه .
اما اگر نمی خواید روش اتصال رو دستکاری کنید برید سراغ اکسس ، چون شما دارید با اس کیو ال مثل اکسس برخورد می کنی (پس اون که راحت تره)
موفق باشید

boysilent
شنبه 29 مهر 1391, 13:00 عصر
ممنون //میشه کمی در مورد این روش انلاین توضیح بدید ///ممنون میشم /
من بانک اس کیو ال رو بیشتر قبول دارم کارباهاش راحت تره

fakhravari
شنبه 29 مهر 1391, 13:05 عصر
private void button1_Click(object sender, EventArgs e)
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\StudentClass.mdf;Integrated Security=True;Connect Timeout=10;User Instance=True");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;//'گرفتن نام کامل دیتابیس
cmd.Connection.Close();

SqlConnection.ClearAllPools();
string query = "BACKUP DATABASE [" + dbname + "] TO DISK ='" + Application.StartupPath + "\\backup.bak'";
cmd.Connection = new SqlConnection("Data Source=.\\sqlexpress;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
cmd.CommandText = query;
cmd.ExecuteNonQuery();
cmd.Connection.Close();
MessageBox.Show("database backup: ok");
}
private void button2_Click(object sender, EventArgs e)
{
OpenFileDialog op = new OpenFileDialog();
op.ShowDialog();

SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\StudentClass.mdf;Integrated Security=True;Connect Timeout=10;User Instance=True");
cmd.Connection.Open();
op.FileName = cmd.Connection.Database;
cmd.Connection.Close();

string query = "ALTER DATABASE [" + op.FileName + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;RESTORE DATABASE [" + op.FileName + "] FROM DISK = '" + Application.StartupPath + "\\backup.bak';ALTER DATABASE [" + op.FileName + "] SET MULTI_USER ;";
cmd.Connection = new SqlConnection("Data Source=.\\sqlexpress;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
cmd.CommandText = query;
cmd.ExecuteNonQuery();
cmd.Connection.Close();

MessageBox.Show("database restore: ok");
}

boysilent
شنبه 29 مهر 1391, 13:57 عصر
Invalid column name 'is_compressed'.
Invalid column name 'compressed_backup_size'.
Could not insert a backup or restore history/detail record in the msdb database. This may indicate a problem with the msdb database. The backup/restore operation was still successful.
Processed 184 pages for database 'C:\USERS\BCMODIR\DOCUMENTS\VISUAL STUDIO 2010\PROJECTS\FRMSABT\FRMSABT\BIN\DEBUG\DBCN.MDF', file 'dbcn' on file 4.
Processed 1 pages for database 'C:\USERS\BCMODIR\DOCUMENTS\VISUAL STUDIO 2010\PROJECTS\FRMSABT\FRMSABT\BIN\DEBUG\DBCN.MDF', file 'dbcn_log' on file 4.
BACKUP DATABASE successfully processed 185 pages in 0.494 seconds (2.925 MB/sec).

boysilent
شنبه 29 مهر 1391, 21:17 عصر
دوستان کسی میتونه یه کمک برسونه ممنون مییشم

boysilent
یک شنبه 30 مهر 1391, 08:24 صبح
دوستان مشکل اصلی من با کانکشن استرینگه میشه یه نگاهی بیندازیدد:
این کانکشن استرینگیه که داخل فایل config هستش:
"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Resources\dbcn.mdf;Integrated Security=True;User Instance=True";

واین هم کانکشن استرینگی هست که دوستان در ساایت codeproject گفتن قرار بدم با تغیراتی:
اما باز هم خطا میده ؟ایا تغییرات من درست نبوده؟؟؟
Data Source=ServerName\InstanceName;Initial Catalog=Database;Integrated Security=True;
آیا این کانکشن بالا واسه expreess جواب میده ؟

اینهم کانکشنی هست که من تغییر دادم

con.ConnectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=dbcn.mdf;Integrated Security=True;User Instance=True";
ممنون

hamidkh
یک شنبه 30 مهر 1391, 08:50 صبح
سلام
شما یه جستجو توی همین سایت کنید مشکلتون حل میشه. تاپیک های زیاد و مفیدی در مورد Backup و restor وجود داره.

roolinjax
یک شنبه 30 مهر 1391, 10:10 صبح
دوستان مشکل اصلی من با کانکشن استرینگه میشه یه نگاهی بیندازیدد:
این کانکشن استرینگیه که داخل فایل config هستش:
"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Resources\dbcn.mdf;Integrated Security=True;User Instance=True";

واین هم کانکشن استرینگی هست که دوستان در ساایت codeproject گفتن قرار بدم با تغیراتی:
اما باز هم خطا میده ؟ایا تغییرات من درست نبوده؟؟؟
Data Source=ServerName\InstanceName;Initial Catalog=Database;Integrated Security=True;
آیا این کانکشن بالا واسه expreess جواب میده ؟

اینهم کانکشنی هست که من تغییر دادم

con.ConnectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=dbcn.mdf;Integrated Security=True;User Instance=True";
ممنون

با سلام
به خط به قسمت زیر که توی کانکشن استرینگ اولیه تون بوده دقت کنید :
AttachDbFilename
معنی این عبارت یعنی این که من در لحظه ای که کانکشن استرینگ بررسی و اجرا میشه ارتباط برقرار میشه و دیتابیس اتچ میشه و بعد از بستن کانکشن دیتابیس دتچ میشه.
به این ارتباط من میگم آفلاین
یعنی دیتابیس با ماشین اس کیو ال ارتباط دائمی نداره.
کانشکن سوم شما توی این پستی که زدین موقعی قابل استفاده است که توی منیجر اس کیو ال دیتابیس مورد نظرتون وجود داشته باشه(یعنی بصورت آنلاین اتچ باشه)
در ضمن توی این کانکشن استرینگ سوم نیازی به نوشتن پسوند فایل نیست.یعنی کانکشن شما به این شکل میشه :
con.ConnectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=dbcn;Integrated Security=True;User Instance=True";
یعنی mdf. رو باید حذف کنید.
موفق باشید.

boysilent
یک شنبه 30 مهر 1391, 11:01 صبح
lواقعا متشکرمم //بابت راهنمایی ///برای رستورکردن این خطارو میده میگه که داره این دیتا بیس استفاده میشه.
البته فک کنم؟؟
اینم خطاشه:
RESTORE cannot process database 'dbcn' because it is in use by this session. It is recommended that the master database be used when performing this operation.
RESTORE DATABASE is terminating abnormally.

roolinjax
یک شنبه 30 مهر 1391, 12:05 عصر
lواقعا متشکرمم //بابت راهنمایی ///برای رستورکردن این خطارو میده میگه که داره این دیتا بیس استفاده میشه.
البته فک کنم؟؟
اینم خطاشه:
RESTORE cannot process database 'dbcn' because it is in use by this session. It is recommended that the master database be used when performing this operation.
RESTORE DATABASE is terminating abnormally.

باید خط زیر رو در ابتدای دستورات ری استور و البته بکاپ بذارید :
SqlConnection.ClearAllPools();
در ادامه این خط دستورات مربوط به بکاپ و ری استور رو بذارید.

boysilent
یک شنبه 30 مهر 1391, 12:22 عصر
ممنون ولی باز هم مشکل حل نشد


string pathe = "C:\\BackupLibrary";
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection("Data Source = localhost; Initial Catalog=dbcn ;Integrated Security = True;");
cmd.Connection.Open();


SqlConnection.ClearAllPools();
string query = "RESTORE DATABASE dbcn FROM DISK = '" + pathe + "\\backup.bak';";

cmd.CommandText = query;
cmd.ExecuteNonQuery();
cmd.Connection.Close();

MessageBox.Show("database restore: ok");

roolinjax
یک شنبه 30 مهر 1391, 13:14 عصر
ممنون ولی باز هم مشکل حل نشد


string pathe = "C:\\BackupLibrary";
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection("Data Source = localhost; Initial Catalog=dbcn ;Integrated Security = True;");
cmd.Connection.Open();


SqlConnection.ClearAllPools();
string query = "RESTORE DATABASE dbcn FROM DISK = '" + pathe + "\\backup.bak';";

cmd.CommandText = query;
cmd.ExecuteNonQuery();
cmd.Connection.Close();

MessageBox.Show("database restore: ok");

خط دستور ری استور رو به شکل زیر تغییر بدین ، انشاءاله که حل بشه :
string query = "RESTORE DATABASE dbcn FROM DISK = '" + pathe + "\\backup.bak' with replace";
تغییر :
اضافه شدن with replace به انتهای دستور
موفق باشید

حسین شهریاری
یک شنبه 30 مهر 1391, 13:31 عصر
فقط میتونم راهنمایییتون کنم، پیاده سازی باشه با خودتون:
1-برای بک آپ گیری مشکلی نیست، اکه کانکشنی هم به دیتابیس وصل باشه بازم مشکلی نداره.
2-ولی برای بازیابی کردن باید دسترسی تمامی کانکشنها به اون پایگاه داده را قطع کنین.
3-متد ClearAllPools همین کار را میکنه ولی شما باید توجه داشته باشید که با این کار دیگه ارتباطی بیت شما و SQL وجود نداره که بخاین دستوری به اون ارسال کنین،پس راهش اینه که یه رشت ارتباط دیگه باید داشته باشید که به یه دیتابیس دیگه وصل باشه یا اصلا به هیچ دیتابیسی وصل نباشه، یعنی فقط رابطی باشه بین شما و SQL .
مثلا بعد از ClearAllPools میتونین رشته ارتباط را اینبار موقتا به Master وصل کنین.
موفق باشید