در اين مورد بيشتر توضيح ميدي دوست عزيز
منظورم اينه كه اول خط اول و دوم رو اجرا كنم بعد خط سوم يا همه رو در يك دستور اجرا كنم
Printable View
سلام، دوستان
:ناراحت::گریه::ناراحت::گریه:: اراحت::گریه::ناراحت::گریه::ن راحت::گریه::ناراحت::گریه::نا احت::گریه:
کسی هست که کمکم بکنه
نحوه بکاپ گرفتن از sqlexpress رو می خواستم
هر کدی که می نویسم میگه دیتا بیسی در این شاخه وجود ندارد
این هم کدش:
SqlConnection con = new SqlConnection();
con.ConnectionString = "data source=.\\SQLEXPRESS;attachdbfilename="+Applicatio n.StartupPath+"\\TestDb.mdf;integrated security=true;user instance=true";
con.Open();
SqlCommand com=new SqlCommand();
com.Connection = con;
com.CommandText = "BACKUP DATABASE [" +Application.StartupPath+"\\TestDb.mdf] to DISK='k:\\aaa.BAk'";
com.ExecuteNonQuery();
con.Close();
جستجو كن مطلب زياده:لبخند:
پشتيبان گيري و بازيابي از پايگاه داده
سلام من با این کد از دیتابیس backup میگیرم ولی وقتی میخام restore کنم این اررور رو میده.
مشکل چیه ؟
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace Library
{
public partial class backup : Form
{
public backup()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
}
private void backup_Click(object sender, EventArgs e)
{
pictureBox1.Visible = true;
#region Select Name
string strFileName = string.Empty;
saveFileDialog1.DefaultExt = "BAK";
saveFileDialog1.FileName = "BackupFile";
saveFileDialog1.Filter = @"SQL Backup files (*.BAK) |*.BAK|All files (*.*) |*.*";
saveFileDialog1.FilterIndex = 1;
saveFileDialog1.OverwritePrompt = true;
saveFileDialog1.Title = "Backup SQL File";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
strFileName = saveFileDialog1.FileName;
Backup(strFileName);
}
#endregion
}
private void backup_Load(object sender, EventArgs e)
{
pictureBox1.Visible = false;
}
private void Backup(string strFileName)
{
#region Store File Bak
SqlCommand oCommand = null;
SqlConnection oConnection = null;
try
{
string ConectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Library.mdf;Integrated Security=True;User Instance=True";
string Command = @"backup database [" + Application.StartupPath + "\\Library.mdf] to disk ='" + strFileName + "' with init,stats=10";
this.Cursor = Cursors.WaitCursor;
oConnection = new SqlConnection(ConectionString);
if (oConnection.State != ConnectionState.Open)
oConnection.Open();
oCommand = new SqlCommand(Command, oConnection);
oCommand.ExecuteNonQuery();
this.Cursor = Cursors.Default;
pictureBox1.Visible = false;
MessageBox.Show("تهیه نسخه پشتیبان انجام شد .");
}
catch (Exception ex)
{
MessageBox.Show("Error :" + ex.Message);
}
finally
{
oConnection.Close();
oCommand.Parameters.Clear();
oCommand.Dispose();
}
#endregion
}
private void restore_Click(object sender, EventArgs e)
{
#region Select File Bak
string strFileName = string.Empty;
openFileDialog1.Filter = @"SQL Backup files (*.BAK) |*.BAK|All files (*.*) |*.*";
openFileDialog1.FilterIndex = 1;
openFileDialog1.Title = "Restore SQL File";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
strFileName = openFileDialog1.FileName;
Restore(strFileName);
}
#endregion
}
private void Restore(string strFileName)
{
#region Restore File Bak
SqlCommand oCommand = null;
SqlConnection oConnection = null;
try
{
string ConectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Library.mdf;Integrated Security=True;User Instance=True";
string Command = "ALTER DATABASE [" + Application.StartupPath + "\\Library.mdf] SET SINGLE_USER with ROLLBACK IMMEDIATE use master RESTORE DATABASE [" + Application.StartupPath + "\\db_market.mdf] FROM DISK='" + strFileName + "'";
this.Cursor = Cursors.WaitCursor;
oConnection = new SqlConnection(ConectionString);
if (oConnection.State != ConnectionState.Open)
oConnection.Open();
oCommand = new SqlCommand(Command, oConnection);
oCommand.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("بازیابی انجام شد .");
}
catch (Exception ex)
{
MessageBox.Show("Error :" + ex.Message);
}
finally
{
oConnection.Close();
oCommand.Parameters.Clear();
oCommand.Dispose();
}
#endregion
}
}
}
The file 'C:\Users\Keyvan\Desktop\C-Sharp\Library\Library\bin\Debug\Library.mdf' cannot be overwritten. It is being used by database 'C:\USERS\KEYVAN\DESKTOP\C-SHARP\LIBRARY\LIBRARY\BIN\DEBUG\LIBRARY.MDF'.
File 'Library' cannot be restored to 'C:\Users\Keyvan\Desktop\C-Sharp\Library\Library\bin\Debug\Library.mdf'. Use WITH MOVE to identify a valid location for the file.
The file 'C:\Users\Keyvan\Desktop\C-Sharp\Library\Library\bin\Debug\Library_log.ldf' cannot be overwritten. It is being used by database 'C:\USERS\KEYVAN\DESKTOP\C-SHARP\LIBRARY\LIBRARY\BIN\DEBUG\LIBRARY.MDF'.
File 'Library_log' cannot be restored to 'C:\Users\Keyvan\Desktop\C-Sharp\Library\Library\bin\Debug\Library_log.ldf'. Use WITH MOVE to identify a valid location for the file.
Problems were identified while planning for the RESTORE statement. Previous messages provide details.
RESTORE DATABASE is terminating abnormally.
Nonqualified transactions are being rolled back. Estimated rollback completion: 100%.
Changed database context to 'master'.
باید دیتابیس را به حالت stop درآورید بعد...
خوب کد restore اش رو استفاده کنید و اگر دیدید که backup اش هم بدردتون خورد میتونید استفاده کنید. ضمنا" روشی که در اون تاپیک گفتم با استفاده از stored procedure هاست که یکی از بهترین و پر سرعت ترین و امن ترین روش هاست.
متاسفانه اکثر کدهایی که برای Restore وجود داره دارای اشکال هست و من خودم این کد رو از بین چندین کد انتخاب کردم.(کاملا تست شده است).
موفق باشید
برای تمامی کسایی که دیتابیسشون رو با SQL EXPRESS اتچ کردن یعنی کانکشن استرینگشون اینجوری هست
@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|MyDB.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
بگم اگر خطایی مربوطه به پیدا نکردن دیتابیس یا گیر دادن به کانکشن استرینگ دارید کافیه اسم دیتابیستون ور اخر کانکشن اضافه کنید تا مشکلتون حل بشه.مثل این پایینی(در اینجا MyDB)
@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|MyDB.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;Database=MyDB"
بکاپ گیری
private void button10_Click(object sender, EventArgs e)
{
string bname = DateTime.Now.ToString("yyyyMMddHHmm");
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.AddExtension = true;
saveFileDialog.CheckFileExists = false;
saveFileDialog.CheckPathExists = true;
saveFileDialog.OverwritePrompt = true;
saveFileDialog.FileName = "Backup" + bname;
saveFileDialog.Filter = "Backup File (*.Bak)|*.Bak";
saveFileDialog.DefaultExt = "Bak";
saveFileDialog.RestoreDirectory = true;
saveFileDialog.InitialDirectory = System.Windows.Forms.Application.StartupPath;
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
this.Refresh();
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\LMS_DB.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 ='" + saveFileDialog.FileName + "'";
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();
this.Refresh();
//progressBar1.PerformStep();
// progressBar1.Value = 100;
MessageBox.Show("نسخه پشتيبان به طور كامل ايجاد شد ", "پيام", MessageBoxButtons.OK, MessageBoxIcon.Information);
// progressBar1.Value = 0;
}
catch
{
MessageBox.Show("اشكال در اتصال به بانك اطلاعات\nلطفا مجدد تلاش كنيد", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
ریستور
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.AddExtension = true;
openFileDialog.CheckFileExists = false;
openFileDialog.CheckPathExists = true;
openFileDialog.Filter = "Backup File (*.Bak)|*.Bak";
openFileDialog.DefaultExt = "Bak";
openFileDialog.RestoreDirectory = true;
openFileDialog.InitialDirectory = System.Windows.Forms.Application.StartupPath;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
this.Refresh();
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\LMS_DB.mdf;Integrated Security=True;Connect Timeout=10;User Instance=True");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;
cmd.Connection.Close();
string query = "ALTER DATABASE [" + dbname + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;RESTORE DATABASE [" + dbname + "] FROM DISK = '" + openFileDialog.FileName + "';ALTER DATABASE [" + dbname + "] 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();
//progressBar2.PerformStep();
//progressBar2.Value = 100;
MessageBox.Show("نسخه پشتيبان به طور كامل بازيابي شد ", "پيام", MessageBoxButtons.OK, MessageBoxIcon.Information);
// progressBar2.Value = 0;
}
catch
{
MessageBox.Show("اشكال در اتصال به بانك اطلاعات", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
بخ نظر شما با استفاده از dllهای Smo بیاییم بک آپ و ریستور بگیریم از دیتابیس مشکلی نسبت به روش ساده هستش استفاده از dll های خود vs
سلام
می خواستم از دیتابیس sql تویه vs هم backup بگیرم هم restore کنم
می شه بگید چه راههایی هست و راحترین کدومه ؟
سلام
backup
string bname = DateTime.Now.ToString("yyyy-MM-dd-HH-mm");
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.AddExtension = true;
saveFileDialog.CheckFileExists = false;
saveFileDialog.CheckPathExists = true;
saveFileDialog.OverwritePrompt = true;
saveFileDialog.FileName = "Backup" + bname;
saveFileDialog.Filter = "Backup File (*.Bak)|*.Bak";
saveFileDialog.DefaultExt = "Bak";
saveFileDialog.RestoreDirectory = true;
saveFileDialog.InitialDirectory = System.Windows.Forms.Application.StartupPath;
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
this.Refresh();
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Library.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;
cmd.Connection.Close();
SqlConnection.ClearAllPools();
string query = "BACKUP DATABASE [" + dbname + "] TO DISK ='" + saveFileDialog.FileName + "'";
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();
this.Refresh();
progressBar1.PerformStep();
progressBar1.Value = 100;
MessageBox.Show("نسخه پشتيبان به طور كامل ايجاد شد ", "پيام", MessageBoxButtons.OK, MessageBoxIcon.Information);
progressBar1.Value = 0;
restore
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.AddExtension = true;
openFileDialog.CheckFileExists = false;
openFileDialog.CheckPathExists = true;
openFileDialog.Filter = "Backup File (*.Bak)|*.Bak";
openFileDialog.DefaultExt = "Bak";
openFileDialog.RestoreDirectory = true;
openFileDialog.InitialDirectory = System.Windows.Forms.Application.StartupPath;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
this.Refresh();
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Library.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;
cmd.Connection.Close();
string query = "ALTER DATABASE [" + dbname + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;RESTORE DATABASE [" + dbname + "] FROM DISK = '" + openFileDialog.FileName + "';ALTER DATABASE [" + dbname + "] 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();
progressBar1.PerformStep();
progressBar1.Value = 100;
MessageBox.Show("نسخه پشتيبان به طور كامل بازيابي شد ", "پيام", MessageBoxButtons.OK, MessageBoxIcon.Information);
MessageBox.Show("برنامه باید دوباره راه اندازی شود ", "هشدار", MessageBoxButtons.OK, MessageBoxIcon.Information);
Application.Restart();
progressBar1.Value = 0;
سلام
از لینک زیر دانلود کن (فایل آموزشی)
http://alexmcse.blogsky.com/1392/01/13/post-13/
من از کد زیر برای ریستور کردن دیتا بیس استفاده کردم اما نمی دونم بجای use master باید چی نوشت.لطفاً راهنمایی کنید
;"'"+"ALTER DATABASE TalayPerans SET SINGLE_USER with ROLLBACK IMMEDIATE" + use master "+ "RESTORE DATABASE TalayPerans FROM DISK='" + strFileName
دوستان این کد مشکلی داره ؟
SqlConnection con = new SqlConnection(str);
string name = "PB";
string cmd = "USE MASTER BACKUP DATABASE '"+name+"' TO DISK='"+textBox1.Text+"'";
SqlCommand com=new SqlCommand(cmd,con);
con.Open();
com.ExecuteNonQuery();
con.Close();
سلام
من يك تابع تعريف كردم برايrestore كردن ولي كار نمي كنه اينم كدشprivate void Restore(string strFileName)اينم كد رويداد كليد باتومش
{
try
{
string command = "ALTER DATABASE bb SET SINGLE_USER with ROLLBACK IMMEDIATE " +
"use master " +
" RESTORE DATABASE bb FROM DISK='" + strFileName + "'";
this.Cursor = Cursors.WaitCursor;
SqlCommand oCommand = null;
SqlConnection oConnection = null;
oConnection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\bb.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
if (oConnection.State != ConnectionState.Open)
oConnection.Open();
oCommand = new SqlCommand(command, oConnection);
oCommand.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("بازياب اطلاعات از نسخه پشتيبان با موفقيت انجام شد");
}
catch (Exception ex)
{
MessageBox.Show("Error Occurd :" + ex.Message);
}string strFileName=string.Empty;
openFileDialog1.Filter = @"SQL Backup files (*.BAK) |*.BAK|All files
(*.*) |*.*";
openFileDialog1.FilterIndex = 1;
openFileDialog1.Title = "Restore SQL File";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
strFileName = saveFileDialog1.FileName;
Restore(strFileName);
سلام
Bckup
try
{
string bname = DateTime.Now.ToString("yyyy-MM-dd-HH-mm");
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.AddExtension = true;
saveFileDialog.CheckFileExists = false;
saveFileDialog.CheckPathExists = true;
saveFileDialog.OverwritePrompt = true;
saveFileDialog.FileName = "Backup" + bname;
saveFileDialog.Filter = "Backup File (*.Bak)|*.Bak";
saveFileDialog.DefaultExt = "Bak";
saveFileDialog.RestoreDirectory = true;
saveFileDialog.InitialDirectory = System.Windows.Forms.Application.StartupPath;
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
this.Refresh();
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Library.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;//گرفتن نام دیتابیس
cmd.Connection.Close();
SqlConnection.ClearAllPools();
string query = "BACKUP DATABASE [" + dbname + "] TO DISK ='" + saveFileDialog.FileName + "'";
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();
this.Refresh();
progressBar1.PerformStep();
progressBar1.Value = 100;
MessageBox.Show("نسخه پشتيبان به طور كامل ايجاد شد ", "پيام", MessageBoxButtons.OK, MessageBoxIcon.Information);
progressBar1.Value = 0;
Restore
try
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.AddExtension = true;
openFileDialog.CheckFileExists = false;
openFileDialog.CheckPathExists = true;
openFileDialog.Filter = "Backup File (*.Bak)|*.Bak";
openFileDialog.DefaultExt = "Bak";
openFileDialog.RestoreDirectory = true;
openFileDialog.InitialDirectory = System.Windows.Forms.Application.StartupPath;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
this.Refresh();
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Library.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;
cmd.Connection.Close();
string query = "ALTER DATABASE [" + dbname + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;RESTORE DATABASE [" + dbname + "] FROM DISK = '" + openFileDialog.FileName + "';ALTER DATABASE [" + dbname + "] 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();
progressBar1.PerformStep();
progressBar1.Value = 100;
MessageBox.Show("نسخه پشتيبان به طور كامل بازيابي شد ", "پيام", MessageBoxButtons.OK, MessageBoxIcon.Information);
MessageBox.Show("برنامه باید دوباره راه اندازی شود ", "هشدار", MessageBoxButtons.OK, MessageBoxIcon.Information);
Application.Restart();
progressBar1.Value = 0;
سلام خسته نباشید من دستور باز گردانی نوشتم که بانک اطلاعات رو به حالت اولش بر گردانی اگر هم وجود داشت برگرداند و جایی گزین بانک قبلی کنه ولی اشکال در ارتباط با دیتابیس میده ممنون میشم کمک کنید تا بدونم اشکال این خطا چی هستش با تشکر.
این هم کد های نوشته شده من.
string path;
private void BtnRestor_Click(object sender, EventArgs e)
{
if (txtaddress.Text.Length > 0)
{
SqlConnection con = new SqlConnection();
con.ConnectionString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirec tory|\DBPoshak.mdf;Integrated Security=True;Connect Timeout=30";
SqlCommand cmd = new SqlCommand();
try
{
con.Open();
string query = "USE master RESTORE DATABASE [DBPoshak] FROM DISK ='" + path + "'";
cmd.CommandText = query;
cmd.Connection = con;
cmd.ExecuteNonQuery();
con.Close();
FarsiMessage.ShowMessageBox("بازیابی به درستی انجام شد","بازیابی");
}
catch
{
FarsiMessage.ShowMessageBox("اشکال در ارتباط با بانک اطلاعات / خطا 105","خطا");
}
}
else
{
FarsiMessage.ShowMessageBox("!"+"مسیر انتخاب نشده است","خطا",ShowButton.تائید_تنها,Ms gIcon.Warning);
}
}
این کدای که من نوشتم ممنون میشم دلیل خطا برنامه من رو بگید که خطا اشکال در ارتباط با بانک اطلاعات رو میده.
سلام اين كد رو تو چه قسمتي بنويسم توي خود تابع ريستور يا تو رخداد كليد با توم
با سلام وتشكر ديدمش ولي كمكي به من نكرد
خواهش میکنم یکی کمک کنی من رو خیلی نیاز دارم به این کد.برای بازگردانی اطلاعات
Restore
try
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.AddExtension = true;
openFileDialog.CheckFileExists = false;
openFileDialog.CheckPathExists = true;
openFileDialog.Filter = "Backup File (*.Bak)|*.Bak";
openFileDialog.DefaultExt = "Bak";
openFileDialog.RestoreDirectory = true;
openFileDialog.InitialDirectory = System.Windows.Forms.Application.StartupPath;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
this.Refresh();
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Dmb.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;
cmd.Connection.Close();
string query = "ALTER DATABASE [" + dbname + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;RESTORE DATABASE [" + dbname + "] FROM DISK = '" + openFileDialog.FileName + "';ALTER DATABASE [" + dbname + "] 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();
progressBar1.PerformStep();
progressBar1.Value = 100;
MessageBox.Show("نسخه پشتيبان به طور كامل بازيابي شد ", "پيام", MessageBoxButtons.OK, MessageBoxIcon.Information);
MessageBox.Show("برنامه باید دوباره راه اندازی شود ", "هشدار", MessageBoxButtons.OK, MessageBoxIcon.Information);
Application.Restart();
progressBar1.Value = 0;
Backup
try
{
string bname = DateTime.Now.ToString("yyyy-MM-dd-HH-mm");
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.AddExtension = true;
saveFileDialog.CheckFileExists = false;
saveFileDialog.CheckPathExists = true;
saveFileDialog.OverwritePrompt = true;
saveFileDialog.FileName = "Backup" + bname;
saveFileDialog.Filter = "Backup File (*.Bak)|*.Bak";
saveFileDialog.DefaultExt = "Bak";
saveFileDialog.RestoreDirectory = true;
saveFileDialog.InitialDirectory = System.Windows.Forms.Application.StartupPath;
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
this.Refresh();
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Library.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;//گرفتن نام دیتابیس
cmd.Connection.Close();
SqlConnection.ClearAllPools();
string query = "BACKUP DATABASE [" + dbname + "] TO DISK ='" + saveFileDialog.FileName + "'";
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();
this.Refresh();
progressBar1.PerformStep();
progressBar1.Value = 100;
MessageBox.Show("نسخه پشتيبان به طور كامل ايجاد شد ", "پيام", MessageBoxButtons.OK, MessageBoxIcon.Information);
progressBar1.Value = 0;
سلام شما وقتی که ری استور میکنید در واقع فایل پشتیبان را با دیتا بیس جابه جا میکنید در حالی که دیتا بیس شما در حال استفاده است پس با اررور روبه رو میشید با این کد که میزارم مشکلتون حل میشه(@Masir) شامل ادرس فایل پشتیبان و اسمش
ALTER DATABASE [Database Name] SET OFFLINE with ROLLBACK IMMEDIATE RESTORE DATABASE [Database Name]
FROM DISK= @Masir with replace alter database [Database Name] set online
سلام برادرا من برای برای Restore کردن دیتابیسم همه کار کردم و برادران کمک کردن من رو ولی تو برگرداندن اطلاعات در سیستم با مشکل بر خورد کردم و توانستم به وسیله کدهای برادران اطلاعات رو به صورت bak.* پشتیبان بگیرم ولی حالا هر کار میکنم نمیشه بریش گردوند میگه سیستم نمی تونه باز گردانی کنه اطلاعات رو این دستور backup گرفتن من هستش که درست کار میکنه در فرم هم هستشprivate void BtnBackup_Click(object sender, EventArgs e)و این هم دستور Restore کردن منهستش هی برای باز گردنای اطلاعات ایراد میگیری میخوام موقع برگداندن پسوند bak رو به پسوند خودش MDF برگدونه تا اطلاعات با همون نام و پسوند یاشه و ایراد نگیره ولی هر کاری میکنم ایراد میگیری این هم دستور Restore من در فرم
{
//using (var back = new ClsRestorAndBackup())
//{
// back.BackUpMyDB();
//}
try
{
string bname = DateTime.Now.ToString("yyyy-MM-dd-HH-mm");
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.AddExtension = true;
saveFileDialog.CheckFileExists = false;
saveFileDialog.CheckPathExists = true;
saveFileDialog.OverwritePrompt = true;
saveFileDialog.FileName = "Backup" + bname;
saveFileDialog.Filter = "Backup File (*.Bak)|*.Bak";
saveFileDialog.DefaultExt = "bak";
saveFileDialog.RestoreDirectory = true;
saveFileDialog.InitialDirectory = System.Windows.Forms.Application.StartupPath;
if (saveFileDialog.ShowDialog() == DialogResult.OK)
{
try
{
this.Refresh();
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirec tory|\DBPoshak.mdf;Integrated Security=True;Connect Timeout=30");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;//گرفتن نام دیتابیس
cmd.Connection.Close();
SqlConnection.ClearAllPools();
string query = "BACKUP DATABASE [" + dbname + "] TO DISK ='" + saveFileDialog.FileName + "'";
cmd.Connection = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirec tory|\DBPoshak.mdf;Integrated Security=True;Connect Timeout=30");
//Data Source=.\\sqlexpress;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
cmd.CommandText = query;
cmd.ExecuteNonQuery();
cmd.Connection.Close();
this.Refresh();
progressBar1.PerformStep();
progressBar1.Value = 100;
MessageBox.Show("نسخه پشتيبان به طور كامل ايجاد شد ", "پيام", MessageBoxButtons.OK, MessageBoxIcon.Information);
progressBar1.Value = 0;
}
catch (Exception ex)
{
// FarsiMessegeBox.Show("خطا در پشتیبان گیری");
FarsiMessegeBox.Show(ex.Message);
}
}
}
catch
{
}
}
private void BtnRestor_Click(object sender, EventArgs e)من از دستور دیگه هم استفاده کردم برای پتیبان گیری و بازگردانی در این دستور نه میتونم پشتیبان گیری کنم و نه باز گردانی این دستورات رو در کلاس نوشتم و درفرم با تابعی صداش زدم این دستور ریستور و بکاپ گرفتن من در کلاس
{
//using (var back = new ClsRestorAndBackup())
//{
// back.RestoreMyDB();
//}
try
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.AddExtension = true;
openFileDialog.CheckFileExists = false;
openFileDialog.CheckPathExists = true;
openFileDialog.Filter = "Backup File (*.Bak)|*.Bak";
openFileDialog.DefaultExt = "BaK";
openFileDialog.RestoreDirectory = true;
openFileDialog.InitialDirectory = System.Windows.Forms.Application.StartupPath;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
//string ourPath = openFileDialog.FileName;
//string newPath = Path.ChangeExtension(ourPath, "*.mdf");
//File.Move(ourPath, newPath);
try
{
this.Refresh();
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirec tory|\DBPoshak.mdf;Integrated Security=True;Connect Timeout=30");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;
//string newPath = Path.ChangeExtension(dbname, "mdf");
//File.Move(dbname, newPath);
string ourPath = openFileDialog.FileName;
string newPath = Path.ChangeExtension(ourPath, "mdf");
File.Move(ourPath, newPath);
cmd.Connection.Close();
string query = "ALTER DATABASE [DBPoshak.mdf] SET OFFLINE with ROLLBACK IMMEDIATE RESTORE DATABASE [DBPoshak.mdf] FROM DISK= @Masir with replace alter database [DBPoshak.mdf] set online";
cmd.Connection = new SqlConnection(@"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirec tory|\DBPoshak.mdf;Integrated Security=True;Connect Timeout=30");
//" Data Source=.\\sqlexpress;Integrated Security=True;Connect Timeout=30;User Instance=True");
cmd.Connection.Open();
cmd.CommandText = query;
cmd.ExecuteNonQuery();
cmd.Connection.Close();
progressBar1.PerformStep();
progressBar1.Value = 100;
MessageBox.Show("نسخه پشتيبان به طور كامل بازيابي شد ", "پيام", MessageBoxButtons.OK, MessageBoxIcon.Information);
MessageBox.Show("برنامه باید دوباره راه اندازی شود ", "هشدار", MessageBoxButtons.OK, MessageBoxIcon.Information);
Application.Restart();
progressBar1.Value = 0;
}
catch (Exception ex)
{
// FarsiMessegeBox.Show("خطا در بازگردانی اطلاعات.");
FarsiMessegeBox.Show(ex.Message);
}
}
}
catch
{
}
}using System;و این هم تابعی که در فرم صداش زدم.
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using FarsiMsgBox;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
using FMessegeBox;
using System.IO;
using System.Diagnostics;
namespace Proje_SayeBan_Poshak
{
class ClsRestorAndBackup :IDisposable // باید توجه به namespace برنامه شود
{
//private string BackupString = @"data source=.;initial catalog=DBPoshak;integrated security=True;multipleactiveresultsets=true";//کانکشن استرین برای دست یابی به اطلاعات اصلی
//private string RestoreString = "Data Source=.;Initial Catalog=master;Integrated Security=True";//کانکشن استرین برای دست یابی به اطلاعات میستر
private string BackupString = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirec tory|\DBPoshak.mdf;Integrated Security=True;Connect Timeout=30";
//Data Source=ADMIN-PC;Initial Catalog=DBPoshak;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=Fa lse";//Connection String baraye Dastyabi be Data base Asli
private string RestoreString = @"Data Source=.;Initial Catalog=DBPoshak;Integrated Security=True";//Connection String baraye dastresi be data base Master
//Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirec tory|\DBPoshak.mdf;Integrated Security=True;Connect Timeout=30";
public void Dispose()
{
GC.SuppressFinalize(this);
}
public void RestoreMyDB()
{
//FarsiMessage.ShowMessageBox("تمام داده های ذخیره شده در پایگاه داده تغییر میکنند اگه موافق هستید دکمه بله رو انتخاب کنید", "بازگردانی اطلاعات", ShowButton.بله_خیر, MsgIcon.Question_2) == DialogResult.Yes
if (FarsiMessegeBox.Show("تمام داده های ذخیره شده در پایگاه داده تغییر میکنند اگه موافق هستید دکمه بله رو انتخاب کنید", "بازگردانی اطلاعات", FMessegeBoxButtons.YesNo, FMessegeBoxIcons.Question) == DialogResult.Yes) ;
{
SqlConnection.ClearAllPools();
using (SqlConnection con = new SqlConnection(RestoreString))
{
ServerConnection srvconn = new ServerConnection(con);
Server srvr = new Server(srvconn);
if (srvr != null)
{
try
{
Restore rstDatabase = new Restore();
rstDatabase.Action = RestoreActionType.Database;
rstDatabase.Database = "DBPoshak";//باید همین نام برای دیتابیس تنظیم شود
OpenFileDialog opfd = new OpenFileDialog();
opfd.Filter = "فایل پشتیبانی|*.bak";
opfd.Title = "بازگردانی اطلاعات";
if (opfd.ShowDialog() == DialogResult.OK)
{
string ourPath = opfd.FileName;
string newPath = Path.ChangeExtension(ourPath, "*.mdf");
File.Move(ourPath, newPath);
BackupDeviceItem bkpDevice = new BackupDeviceItem(opfd.FileName, DeviceType.File);
rstDatabase.ReplaceDatabase = true;
rstDatabase.SqlRestore(srvr);
// FarsiMessage.ShowMessageBox("اطلاعات با موفقعیت بازگردانی شدن", "بازگردانی اطلاعات", ShowButton.تائید_تنها, MsgIcon.Information_1);
FarsiMessegeBox.Show("اطلاعات با موفقعیت بازگردانی شدن", "بازگردانی اطلاعات", FMessegeBoxButtons.Ok, FMessegeBoxIcons.Information);
}
}
catch (Exception ex)
{
// FarsiMessage.ShowMessageBox("خطا در بازگردانی اطلاعات دیتابیس/ خطا 106", "اشکال در ارتباط", ShowButton.تائید_تنها, MsgIcon.Warning);
FarsiMessegeBox.Show("خطا در بازگردانی اطلاعات دیتابیس / خطا 106", "خطا در بازگردانی", FMessegeBoxButtons.Ok, FMessegeBoxIcons.Error);
}
}
}
}
}
public void BackUpMyDB()
{
using (SqlConnection con = new SqlConnection(BackupString))
{
ServerConnection srvcon = new ServerConnection(con);
Server srvr = new Server(srvcon);
if (srvr != null)
{
try
{
Backup bkdDatabase = new Backup();
bkdDatabase.Action = BackupActionType.Database;
bkdDatabase.Database = "DBPoshak";
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "پشتیبانی گرفتن فایل|*.bak";
sfd.Title = "پشتیبان گیری";
sfd.FileName = "BackUP_" + (DateTime.Now.ToShortDateString().Replace('/', '.'));
if (sfd.ShowDialog() == DialogResult.OK)
{
BackupDeviceItem bkpDevice = new BackupDeviceItem(sfd.FileName, DeviceType.File);
bkdDatabase.Devices.Add(bkpDevice);
bkdDatabase.SqlBackup(srvr);
FarsiMessegeBox.Show("پشتیبان گیرری با موفقعیت انجام شد", "پشتیبان گیری", FMessegeBoxButtons.Ok, FMessegeBoxIcons.Information);
}
}
catch (Exception ex)
{
// FarsiMessegeBox.Show(ex.ToString());
FarsiMessegeBox.Show("خطا در ایجاد پشتیبان گیری", "خطا", FMessegeBoxButtons.Ok, FMessegeBoxIcons.Error);
}
}
}
}
}
}
private void BtnRestor_Click(object sender, EventArgs e)
{
//using (var back = new ClsRestorAndBackup())
//{
// back.RestoreMyDB();
//}
از هر دستوری برای بازیابی و پشتیبان گیری استفاده کردم ولی یه دستور فقط پشتیبان گیری رو جواب داد ولی باز گردانی رو نه که موقع باز گردانی اطلاعات پسوند که موقع پشتیبان گیری bak گذاشتم رو به پسوند MDF تبدیل کنه و ایراد نگیری برای بازگردانی اطلاعات فایل دیتابیس کنار فایل اجرای هستش یعنی exe هر کاری میکنم بر نمیگرونه خواهش میکنم کمک کنید من رو خیلی لازم دارم خطاهای که میده به فارسی این ها میشه
1- نمی توانه عمل باز گردانی رو انجام بده فایل در حال استفاده شدن هستش 2- این پسوند ناشناخته هستش برای جداول
این خطا های هستش که میده ممنون میشم کمک کنید خیلی گیر کردم تو کدهای ممنون میشم کمک کنید من رو. با تشکر فراوان.
من میخوام با سی شارپ کد Restore رو بنویسم ارور میده
این کدمه
try
{
string s = @"C:\New\1392-2-13 Time 1-9-48\SabaNet.bak";
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection("Data Source=victory-pc;Initial Catalog=SabaNet;Integrated Security=True");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;
cmd.Connection.Close();
//USE [master]; RESTORE DATABASE [" + dbname + "] FROM DISK = N'" + TxtAddress.Text + "' WITH NOUNLOAD, REPLACE, STATS = 10
string query = "USE [master]; RESTORE DATABASE [" + dbname + "] FROM DISK = N'" + s + "'";
cmd.Connection = new SqlConnection("Data Source=victory-pc;Initial Catalog=SabaNet;Integrated Security=True");
cmd.Connection.Open();
cmd.CommandText = query;
cmd.ExecuteNonQuery();
cmd.Connection.Close();
MessageBox.Show("database restore: ok");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
این ارور
Exclusive access could not be obtained because the database is in use.
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master
دوست عزیز توی خوده اررور با زبون ساده گفته که دیتابیستون در حال استفادس و برای رفع این مشکل میتونید از کوئری USE MASTER استفاده کنید تا دیگه دیتابسی که میخواین restore کنید وصل نباشه
خوب کد use master رو نوشتم
سلام
مشکل شما در connection string هست.(AttachDbFilename)
در واقع connection string مورد استفاده توسط شما ،میخواد database رو به صورت موقت attach کنه،در صورتی که پشتیبان گیری برای پایگاه داده ای به کار میاد که قبلا attach شده،
اگر فایل شما به صورت کامل attach نشده باشه و connection string حاوی عبارت AttachDbFilename در بقیه جاهای برنامتون به خوبی جواب میده،به جای پشتیبان گیری از کپی برداری از فایل پایگاه داده بهره ببرید،در غیر این صورت باید connection string تصحیح بشه.
سلام من برای گرفتن بک آپ از این کد استفاده میکنم برای ری استور باید چه کدی بنویسم؟
Cursor.Current = Cursors.WaitCursor;
Directory.CreateDirectory(@"d:\SQLBackup");
con.Open();
SqlCommand command;
command = new SqlCommand(@"backup database mobile to disk ='d:\\SQLBackup\\dbbackup.bak' with init,stats=10", con);
command.ExecuteNonQuery();
con.Close();
MessageBox.Show("پشتیبان گیری با موفقیت انجام شد", "پشتیبان", MessageBoxButtons.OK, MessageBoxIcon.Information);
بنده از این کد برای برگرداندن اطلاعات استفاده میکنم.
string Filename;
OpenFileDialog openFileDialog1 = new OpenFileDialog();
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
Filename = openFileDialog1.FileName;
}
else return;
try
{
File.Copy(Filename, Application.StartupPath + @"\Database.accdb", true);
MessageBox.Show(".عمل بازیابی اطلاعات با موفقیت انجام شد");
Close();
}
catch (Exception x)
{
MessageBox.Show("خطا در بازیابی اطلاعات");
}
سلام
من موقع ری استور این ارور رو می گیرم
The tail of the log for the database "mobile" 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.
Failed to restart the current database. The current database is switched to master.
کدم اینه:
con.Open();
SqlCommand command;
command = new SqlCommand(@"ALTER DATABASE mobile SET OFFLINE with ROLLBACK IMMEDIATE restore database mobile from disk ='d:\\SQLBackup\\dbmobilebackup.bak'", con);
command.ExecuteNonQuery();
con.Close();
MessageBox.Show(".بازنشانی با موفقیت انجام شد", "پشتیبان", MessageBoxButtons.OK, MessageBoxIcon.Information);
اکسس و sql نداره . شما دارید نام دیتابیس رو با پسوندش به برنامه میدی. خودت میتونی sql ش رو بنویسی.
File.Copy(Filename, Application.StartupPath + @"\dbbackup.bak", true);
کدی که نوشتم اینجوری شد ولی بدون ارور هیچ عملیاتی انجام نمیده فقط پیامی که تو برنامه گذاشتم رو میده.
string Filename;
OpenFileDialog openFileDialog1 = new OpenFileDialog();
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
Filename = openFileDialog1.FileName;
}
else return;
try
{
File.Copy(Filename, Application.StartupPath + @"\dbmobilebackup.bak", true);
MessageBox.Show(".عمل بازیابی اطلاعات با موفقیت انجام شد");
Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString(),"خطا در بازیابی اطلاعات");
}
از این کد هم استفاده کردم ولی ارور میده
con.Open();
SqlCommand command;
command = new SqlCommand(@"ALTER DATABASE mobile SET OFFLINE with ROLLBACK IMMEDIATE restore database mobile from disk ='d:\\SQLBackup\\dbmobilebackup.bak'", con);
command.ExecuteNonQuery();
con.Close();
MessageBox.Show(".بازنشانی با موفقیت انجام شد", "پشتیبان", MessageBoxButtons.OK, MessageBoxIcon.Information);