PDA

View Full Version : backup and restore گرفتن پشتیبان از دیتابیس و بازگردانی آن



صفحه : 1 [2]

boysilent
جمعه 20 بهمن 1391, 11:40 صبح
سلام دوستان عزیز این کد رو برای بکاپ استفاده میکنم ولی این خطارو میده

Instance failure
!=پایگاه داده رو داخل خود C#‎ ساختم با sqlExpreess..
با تشگر

public static bool ExecuteQuery(string cmdText)
{
using (SqlConnection con = new SqlConnection(@"Server=.\\SQLEXPRESS;integrated security=true;"))
{
SqlCommand cmd = new SqlCommand(cmdText, con);
cmd.CommandType = CommandType.Text;
try
{
con.Open();
cmd.ExecuteNonQuery();
con.ChangeDatabase("master");
con.Close();

return true;
MessageBox.Show("ok");
}
catch (Exception exp)
{
if (con.State != ConnectionState.Closed)
{
con.ChangeDatabase("master");
con.Close();
}
MessageBox.Show(exp.Message);
return false;
}
}
}
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
// TODO: This line of code loads data into the 'schoolDataSet.msg' table. You can move, or remove it, as needed.
this.msgTableAdapter.Fill(this.schoolDataSet.msg);

}

private void button1_Click(object sender, EventArgs e)
{
string DataBaseName = "Database1";
string Filepath = @"C:\Users\bcmodir\Desktop\ZABAN\file.bak";
ExecuteQuery("USE master backup database " + DataBaseName + " to disk = '" + Filepath + "'");
}
}
}

Esmail Solhkhah
جمعه 20 بهمن 1391, 12:03 عصر
با فرض اینکه نام اینستنس شما درست باشه

یا اون (آ دورت بگردم) رو از اول رشته اتصال بردارید. (رجوع شود به کاربرد آ دورت بگردم در سی شارپ)
یا بجای \\ از \ استفاده کنید.

موفق باشید.

boysilent
جمعه 20 بهمن 1391, 23:16 عصر
اونو درست کردم ولی میگه که دیتابیسی که نوشتید اسمشو وجود نداره؟؟
database does not exist????
عجیبه ها

Mahmoud.Afrad
شنبه 21 بهمن 1391, 00:22 صبح
دیتابیس که اتچ نشده که شما فقط نامش رو نوشتید. باید مسیر کامل دیتابیس رو بنویسید:
string DataBaseName = "|datadirectory|\Database1.mdf";
یا
string DataBaseName = System.IO.Path.Combine(Application.StartupPath, "Database1.mdf");

دو طرف DataBaseName هم براکت بزار:
"USE master backup database [" + DataBaseName + "] to disk = '" + Filepath + "'"

boysilent
شنبه 21 بهمن 1391, 15:28 عصر
ولی درست نشد دوستان ی خطای میدی خیلی گنگه میگه سینتکس نزدیکه ؟؟؟؟؟
در خط 10 بالا
Incorrect syntax near 'C:\Users\bcmodir\Documents\Visual Studio 2010\Projects\TESTPAYGAH\TESTPAYGAH\bin\Debug\Data base1.mdf'.

boysilent
یک شنبه 22 بهمن 1391, 08:30 صبح
نشد دوست عزیز نشدمتن خطا اینه

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.
Changed database context to 'master'.

rahim_ttl
سه شنبه 24 بهمن 1391, 09:47 صبح
/// <summary>
/// اجرای کوئری بدون برگشت دیتا
/// </summary>
/// <param name="Query"></param>
/// <returns></returns>
public int ExecuteUpdate(string Query)
{
command.CommandText = Query;
int Code = 0;
try
{
Code = command.ExecuteNonQuery();
ExecuteMessage(Result.Success, null);
return Code;
}
catch(Exception ex)
{
ExecuteMessage(Result.Error,ex.Message);
return Code;
}
}

/// <summary>
/// پشتیبان گیری از دیتابیس با دریافت نام دیتابیس و مسیر ذخیره فایل بک آپ
/// </summary>
/// <param name="BackupDirectory"></param>
/// <param name="DataBaseName"></param>
public void BackupDatabase(string BackupDirectory,string DataBaseName)
{
ExecuteUpdate("BACKUP DATABASE " + DataBaseName + " TO DISK = '" + BackupDirectory + "' ");
}

/// <summary>
/// بازیابی فایل بک آپ با دریافت نام دیتابیس و مسیر فایل بک آپ
/// </summary>
/// <param name="BackupDirectory"></param>
/// <param name="DataBaseName"></param>
public void RestoreBackup(string BackupDirectory, string DataBaseName)
{
string Query = "ALTER DATABASE " + DataBaseName + " SET SINGLE_USER With RollBack IMMEDIATE USE MASTER " +
" RESTORE DATABASE " + DataBaseName + " FROM DISK = '" + BackupDirectory + "' With Replace";
ExecuteUpdate(Query);
}

mohammad2407
جمعه 27 بهمن 1391, 11:17 صبح
سلام دوستان عزیز خسته نباشید من یک فرم دارم + دو تا کلید ....

من میخوام از دیتابیسم که اسمش dbtest هست بکاپ بگیرم ولی متاسفانه قابلیت SQLDMO در نسخه 2008 حذف شده یعنی تا نسخه 2000 بوده

حالا میشه یک نمونه سورس به من بدید از گرفتن Backup/Restore به صورت حرفه ای و پیشرفته و 100 درصد هم کار کنه اگر به صورت LINQ اموزش بدید که دیگه عالی میشه چون از ConnectionString خوشم نمیاد !!:لبخند:

ممنون میشم راهنمایی کنید

البته من تاپیک های زیادی در این مورد خوندم مثل زیر ولی همه ایراد داشتن !! برای همین مجبور شدم تاپیک بزنم

نمونه برنامه های کوچک و مفيد در سي شارپ (http://barnamenevis.org/showthread.php?64210-%D9%86%D9%85%D9%88%D9%86%D9%87-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%87%D8%A7%DB%8C-%DA%A9%D9%88%DA%86%DA%A9-%D9%88-%D9%85%D9%81%D9%8A%D8%AF-%D8%AF%D8%B1-%D8%B3%D9%8A-%D8%B4%D8%A7%D8%B1%D9%BE)

ordebehesht
جمعه 27 بهمن 1391, 13:34 عصر
به این لینکها سر بزن
http://www.persiadevelopers.com/articles/sql-backup-zip.aspx
http://www.persiadevelopers.com/articles/SQL-Server-Agent.aspx

mohammad2407
جمعه 27 بهمن 1391, 13:52 عصر
دوست عزیز SQL-Demo مربوط میشه به SQLServer2000 من از 2008 استفاده میکنم دو لینکی که دادی برای من هیچ کاربردی نداره

برای کسی خوبه که از SQL Server 2000 استفاده میکنه

درنسخه 2008 چیزی به نام SQL DMO وجود نداره

من از برنامه های زیر استفاده میکنم !!!

Microsoft Visual Studio 2010
Microsoft Visual Studio 2012
SQL Server2008

ordebehesht
جمعه 27 بهمن 1391, 14:04 عصر
ببن شاید این لینک بدردت خورد البت یه فایله
http://dl.sourcebaran.com/download/152/5Problem.rar

mohammad2407
جمعه 27 بهمن 1391, 14:26 عصر
ممنون

از کد زیر که استفاده میکنم خطا میده


SqlConnection sq = new SqlConnection("Data Source=.;Integrated Security=True");
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "*.bak|*.bak";
if (sfd.ShowDialog() == DialogResult.OK)
{
SqlCommand com = new SqlCommand("backup database " + txtDBName + " to disk='"
+sfd.FileName + "'", sq);
sq.Open();
com.ExecuteNonQuery();
sq.Close();
}//if


خطا از کد زیر است ::




com.ExecuteNonQuery()


یه کد به من بدید که کار کنه و خودتون هم 100 درصد تست کرده باشد .... الان من دو روز هست که دارم روی قسمت بکاپ کار میکنم و به نتیجه هم نمیرسم !!!!

mohammad2407
جمعه 27 بهمن 1391, 15:28 عصر
مشکل کاملا حل شد

من الان وقتی دیتابیس ریستور میکنم باید یک بار برنامه ببندم و دوباره باز کنم تا تغییرات ( دیدن اطلاعات ) ببینم

ایا کدی هست برای این کار ؟؟؟؟؟؟

نیما اکبری
یک شنبه 29 بهمن 1391, 08:42 صبح
سلام من یک کد Backup گیری و Restore دارم که کد Backup به درستی کار می کند ولی موقعی که کد Restore را اجرا می کنم با خطایی زیر رو به رو می شوم .در ضمن من از Microsoft SQL Server 2008 برای بانک اطلاعاتی خود استفاده می کنم. و در موقع اجرای برنامه آنرا چه ببندم و چه باز باشد باز هم این خطا داده می شود. باید چکار کنم. تا این خطا رفع شود؟:متفکر:
100171
100172
http://barnamenevis.org/images/misc/pencil.png

veniz2008
یک شنبه 29 بهمن 1391, 10:22 صبح
سلام. پیغام خطا میگه که دیتابیس شما در حال استفاده هست و طبیعی هم هست که دیتابیس فعال رو نمیشه از درون خودش ری استور کرد. شما باید اول دیتابیس رو offline کنید و بعد اقدام به ری استور کنید. در تاپیک زیر و در پست 19 مراحل و کد ری استور رو بصورت کامل قرار دادم.
موفق باشید.
http://barnamenevis.org/showthread.p...ghlight=backup (http://barnamenevis.org/showthread.php?348780-%DA%86%DA%AF%D9%88%D9%86%DA%AF%DB%8C-%D8%AA%D9%87%DB%8C%D9%87-%DA%A9%D9%BE%DB%8C-%D8%A7%D8%B2-%D9%81%D8%A7%DB%8C%D9%84-%D9%87%D8%A7%DB%8C-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D8%A8%D9%87-%D9%85%D9%86%D8%B8%D9%88%D8%B1-%D8%AA%D9%87%DB%8C%D9%87-%D9%BE%D8%B4%D8%AA%DB%8C%D8%A8%D8%A7%D9%86&highlight=backup)

hossein_sh2008
دوشنبه 30 بهمن 1391, 22:26 عصر
سلام
دوستان من یک بانک با sql express خود سی شارپ طراحی کردم بدون sql server نصب باشه آیا امکان داره کد بک آپ و ری استور اون رو دوستان اینجا قرار بدن


با تشکر

vapa_71
دوشنبه 07 اسفند 1391, 19:39 عصر
میذارمش توی تگ c# که بقیه هم استفاده کنن

کد بکاپ

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();
MessageBox.Show("نسخه پشتيبان به طور كامل ايجاد شد ", "پيام", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch
{
MessageBox.Show("اشكال در اتصال به بانك اطلاعات\nلطفا مجدد تلاش كنيد", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
}


کد ریستور


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();
MessageBox.Show("نسخه پشتيبان به طور كامل بازيابي شد ", "پيام", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch
{
MessageBox.Show("اشكال در اتصال به بانك اطلاعات", "خطا", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}

من تست کردم عالیه اگه واسه کسی مشکل داشت شک نکنه که مثل من کانکشنش مشکل داره من کانکشن رو تغییر دادم با اجازه دوستمون

sima_ahmadi
سه شنبه 08 اسفند 1391, 09:13 صبح
من برای ری استور کردن کردن بانک کد زیر رو میزنم :اما ارورو میده بانک در حال استفادست ...چیکارش کنم؟؟؟
Cursor.Current = Cursors.WaitCursor;

try
{
if (File.Exists(@"d:\SQLBackup\svBackUp1.bak"))
{
if (MessageBox.Show("در صورت بازیابی تممی اطلاعات پایگاه داده فعلی از بین رفته و اطلاعات فایل پشتیبان جایگزین میگردد آیا مطمئن هستید؟", "بازیابی", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
//Connect SQL---------------------------------------
SqlConnection connect;
string con = @"Data Source=.;Initial Catalog=arayeshgah1;Integrated Security=True";
connect = new SqlConnection(con);
connect.Open();


//Excute SQL----------------
SqlCommand command;
command = new SqlCommand("use master", connect);
command.ExecuteNonQuery();
command = new SqlCommand(@"restore database arayeshgah1 from disk = 'd:\SQLBackup\svBackUp1.bak'", connect);
command.ExecuteNonQuery();
//----------------------------------
connect.Close();

MessageBox.Show("بازیابی با موفقیت انجام شد.", "Restore", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
else
MessageBox.Show(@"Do not make any endorsement above (or is not in the correct path)", "Restoration", MessageBoxButtons.OK, MessageBoxIcon.Information);

}
catch (Exception exp)
{
MessageBox.Show(exp.Message);
}

naser_feb8646
شنبه 12 اسفند 1391, 23:00 عصر
سلام به همه اساتید
قبل از پرسیدن سوال ازتون خواهش میکنم نگید جستجو کن مطلب در این مورد زیاده اگر براتون ممکنه یکبار مراحل رو به صورت کامل توضیح بدین
پیشاپیش ازتون ممنونم

و حالا سوالم
من یه برنامه طراحی کردم که دیتابیسش SQL EXPRESS 2008 هستش موقع نصب نرم افزار روی سیستم مشتری اول موتور SQL EXPRESS 2008 نصب میشه بعد نرم افزار
ConnectionString هم بصورت زیر تعریف شده

"Data source=.\\SQLEXPRESS;Attachdbfilename=|DataDirecto ry|\\db\\AAZ.mdf;Integrated security=true;user Instance=true"
یعنی به خود فایل mdf اشاره میکنه
سوال اول : آیا این دیتابیس الان اتچ شده؟
اگر جواب نه هست باید چیکار کنم تا اتچ بشه
همون موتور SQL EXPRESS 2008 که روی سیستم مشتری هست برای اتچ شدن کافیه یا باید نسخه کامل SQL رو نصب کنم
سوال دوم : چطور میتونم توی برنامه یک فرم بزارم که کاربر هم بتونه از دیتابیس Backup بگیره و هم فایل Backup رو Restore کنه

ازتون خیلی خیلی ممنونم

وبازهم ملتمسانه ازتون میخوام بطور کامل مراحل رو توضیح بدین تا هم من بتونم متوجه بشم و هم بقیه دوستانی که بلد نیستن بعدها براتون دعا کنن

saeedgholami
شنبه 12 اسفند 1391, 23:06 عصر
سلام
بفرما دوست عزیز
http://uplod.ir/lhqaizj2czbm/5Problem.rar.htm

saeedgholami
شنبه 12 اسفند 1391, 23:08 عصر
این 5 مسئله توش توضیح داده
Connection String
Load Without Attach
Add Picture to SQL
Attach & Detach
BackUp & Restore


موفق باشید

naser_feb8646
یک شنبه 13 اسفند 1391, 23:18 عصر
سلام دوباره
دوست عزیز من از کدی که شما داده بودین استفاده کردم
زمان backup مشکلی نیست ولی موقع restore با پیام زیر مواجه میشم


Exclusive access could not be obtained because the database is in use.
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master'.

saeedgholami
یک شنبه 13 اسفند 1391, 23:42 عصر
سلام
ببین این میتونه کمکت کنه
http://stackoverflow.com/questions/4046708/exclusive-access-could-not-be-obtained-because-the-database-is-in-use

mahnaz0098
پنج شنبه 17 اسفند 1391, 09:53 صبح
سلام
من از کد زیر برای بازیابی دیتابیس استفاده میکنم


SqlCommand scom1 = new SqlCommand();
SqlConnection.ClearAllPools();
scom1.Connection = new SqlConnection("Data source=MAHNAZ-PC;Initial Catalog=marketing;Integrated Security=true");
scom1.Connection.Open();
string dbname = scom1.Connection.Database;
scom1.Connection.Close();
SqlConnection sc = new SqlConnection("Data source=MAHNAZ-PC;Initial Catalog=master;Integrated Security=true");
SqlCommand scom = new SqlCommand("use master ALTER DATABASE [" + dbname + "] SET SINGLE_USER WITH ROLLBACK IMMEDIATE RESTORE DATABASE [" + dbname + "] FROM DISK = '" + recovery_path + "' ALTER DATABASE [" + dbname + "] SET MULTI_USER", sc);
//SqlCommand scom = new SqlCommand("ALTER DATABASE [" + dbname + "] SET OFFLINE WITH ROLLBACK IMMEDIATE RESTORE DATABASE [" + dbname + "] FROM DISK = '" + recovery_path + "' ALTER DATABASE [" + dbname + "] SET ONLINE", sc);
sc.Open();
scom.ExecuteNonQuery();
sc.Close();
MessageBox.Show("بازیابی با موفقیت انجام شد ");



ولی در زمان اجرا یک Exception روی خط


scom.ExecuteNonQuery();

نشون میده.

The tail of the log for the database \"marketing\" 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.\r\nRESTORE DATABASE is terminating abnormally.\r\nChanged database context to 'master'.\r\nNonqualified transactions are being rolled back. Estimated rollback completion: 100%



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

majidrezaei2007
پنج شنبه 17 اسفند 1391, 10:02 صبح
داره میگه که پارامتر Recovery and replace رو نزاشتین
یک سرچ انجام بدید درباره این کد ، نمونه های کاملی گیرتون میاد

patrick5053
سه شنبه 22 اسفند 1391, 08:49 صبح
سلام دوستان من از برنامم بكاپ ميگيرم ولي وقتي رستور ميكنم خطا ميده ، اينم متن خطا راهنمايي كنيد لطفا

The tail of the log for the database "m" 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.

منظور از "m" نام ديتابس هست.

patrick5053
سه شنبه 22 اسفند 1391, 09:47 صبح
private void Restore(string filename)
{
try
{
string command = @"ALTER DATABASE DBName ET SINGLE_USER with ROLLBACK IMMEDIATE " + " USE master " + " RESTORE DATABASE DBName FROM DISK= N'" + filename + "'";
//string command = @"RESTORE DATABASE DBName FROM DISK ='" + filename + "' ";
this.Cursor = Cursors.WaitCursor;
SqlCommand ocommand = null;
SqlConnection oconnection = null;
oconnection = new SqlConnection("Data Source=(local);Initial Catalog=DBName ;user id=sa");
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);
}
}

patrick5053
سه شنبه 22 اسفند 1391, 09:52 صبح
خدمت دوست عزيز هم بگم من سرچ كردم ولي همه كدها و نمونه ها همين مشكل رو داشتند.
البته چند روز اول كه اين كدها رو نوشته بودم خوب كار ميكرد نميدونم چرا يك ماه شده كه ديگه رستور نميكنه و اين ارور رو نمايش ميده

patrick5053
سه شنبه 22 اسفند 1391, 09:54 صبح
دوست عزيز شما برامون اين خطا رو معني كن ما هم ياد بگيريم اگه زحمتي نيست

vhdysf
سه شنبه 22 اسفند 1391, 10:28 صبح
از این استفاده کن:
ALTER DATABASE DbName SET SINGLE_USER with ROLLBACK IMMEDIATE;
RESTORE DATABASE DbName FROM DISK= strFileName WITH FILE = 1, NOUNLOAD, STATS = 10 ,replace ;
ALTER DATABASE DbName SET MULTI_USER with ROLLBACK IMMEDIATE ;

patrick5053
سه شنبه 22 اسفند 1391, 11:17 صبح
از این استفاده کن:
ALTER DATABASE DbName SET SINGLE_USER with ROLLBACK IMMEDIATE;
RESTORE DATABASE DbName FROM DISK= strFileName WITH FILE = 1, NOUNLOAD, STATS = 10 ,replace ;
ALTER DATABASE DbName SET MULTI_USER with ROLLBACK IMMEDIATE ;
در اين مورد بيشتر توضيح ميدي دوست عزيز
منظورم اينه كه اول خط اول و دوم رو اجرا كنم بعد خط سوم يا همه رو در يك دستور اجرا كنم

C#‎_best_Programmer
چهارشنبه 23 اسفند 1391, 00:40 صبح
http://www.bestprogrammers.blogfa.com/

5225507
یک شنبه 11 فروردین 1392, 00:37 صبح
سلام، دوستان
:ناراحت::گریه::ناراحت::گریه:: اراحت::گریه::ناراحت::گریه::ن راحت::گریه::ناراحت::گریه::نا احت::گریه:
کسی هست که کمکم بکنه
نحوه بکاپ گرفتن از sqlexpress رو می خواستم

هر کدی که می نویسم میگه دیتا بیسی در این شاخه وجود ندارد

این هم کدش:



SqlConnection con = new SqlConnection();
con.ConnectionString = "data source=.\\SQLEXPRESS;attachdbfilename="+Application.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();

ali_habibi1384
یک شنبه 11 فروردین 1392, 00:46 صبح
جستجو كن مطلب زياده:لبخند:
پشتيبان گيري و بازيابي از پايگاه داده (http://barnamenevis.org/showthread.php?323295-%D9%BE%D8%B4%D8%AA%DB%8C%D8%A8%D8%A7%D9%86-%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A8%D8%A7%D8%B2%DB%8C%D8%A7%D8%A8%DB%8C-%D9%BE%D8%A7%DB%8C%DA%AF%D8%A7%D9%87-%D8%AF%D8%A7%D8%AF%D9%87-SQL)

keyvan_s89
جمعه 16 فروردین 1392, 17:29 عصر
سلام من با این کد از دیتابیس 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'.

aryadad
جمعه 16 فروردین 1392, 17:35 عصر
باید دیتابیس را به حالت stop درآورید بعد...

keyvan_s89
جمعه 16 فروردین 1392, 17:41 عصر
سلام.
در تاپیک زیر هم backup و هم Restore رو بصورت کامل توضیح دادم.
موفق باشید.
http://barnamenevis.org/showthread.p...ghlight=backup (http://barnamenevis.org/showthread.php?348780-%DA%86%DA%AF%D9%88%D9%86%DA%AF%DB%8C-%D8%AA%D9%87%DB%8C%D9%87-%DA%A9%D9%BE%DB%8C-%D8%A7%D8%B2-%D9%81%D8%A7%DB%8C%D9%84-%D9%87%D8%A7%DB%8C-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D8%A8%D9%87-%D9%85%D9%86%D8%B8%D9%88%D8%B1-%D8%AA%D9%87%DB%8C%D9%87-%D9%BE%D8%B4%D8%AA%DB%8C%D8%A8%D8%A7%D9%86&highlight=backup)
مرسی دوست عزیز ولی من مشکلم فقط تویه restore هست.
موقع backup گرفتن هیچ اروری نمیده

veniz2008
جمعه 16 فروردین 1392, 17:46 عصر
مرسی دوست عزیز ولی من مشکلم فقط تویه restore هست.
موقع backup گرفتن هیچ اروری نمیده
خوب کد restore اش رو استفاده کنید و اگر دیدید که backup اش هم بدردتون خورد میتونید استفاده کنید. ضمنا" روشی که در اون تاپیک گفتم با استفاده از stored procedure هاست که یکی از بهترین و پر سرعت ترین و امن ترین روش هاست.
متاسفانه اکثر کدهایی که برای Restore وجود داره دارای اشکال هست و من خودم این کد رو از بین چندین کد انتخاب کردم.(کاملا تست شده است).
موفق باشید

R_Rajaee_Rad
جمعه 16 فروردین 1392, 17:48 عصر
برای تمامی کسایی که دیتابیسشون رو با 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"

keyvan_s89
جمعه 16 فروردین 1392, 18:14 عصر
خوب کد restore اش رو استفاده کنید و اگر دیدید که backup اش هم بدردتون خورد میتونید استفاده کنید. ضمنا" روشی که در اون تاپیک گفتم با استفاده از stored procedure هاست که یکی از بهترین و پر سرعت ترین و امن ترین روش هاست.
متاسفانه اکثر کدهایی که برای Restore وجود داره دارای اشکال هست و من خودم این کد رو از بین چندین کد انتخاب کردم.(کاملا تست شده است).
موفق باشید
کد های restore رو نوشتم ولی برای backup رو قاطی کردم میشه یه بار کد backup رو بزارید ؟

vapa_71
جمعه 16 فروردین 1392, 22:58 عصر
بکاپ گیری


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);
}
}
}

ordebehesht
جمعه 16 فروردین 1392, 23:00 عصر
بخ نظر شما با استفاده از dllهای Smo بیاییم بک آپ و ریستور بگیریم از دیتابیس مشکلی نسبت به روش ساده هستش استفاده از dll های خود vs

majid4
شنبه 31 فروردین 1392, 09:24 صبح
سلام

می خواستم از دیتابیس sql تویه vs هم backup بگیرم هم restore کنم

می شه بگید چه راههایی هست و راحترین کدومه ؟

keyvan_s89
شنبه 31 فروردین 1392, 09:42 صبح
سلام

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;

alexmcse
شنبه 31 فروردین 1392, 17:38 عصر
سلام
از لینک زیر دانلود کن (فایل آموزشی)
http://alexmcse.blogsky.com/1392/01/13/post-13/

majid4
یک شنبه 01 اردیبهشت 1392, 13:25 عصر
سلام

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;




دوست عزیز من از راهنماییت ولی پیغام خطا می ده می گه نمی تونه دیتابیس رو پیدا که

ali_seifi_21
چهارشنبه 04 اردیبهشت 1392, 15:43 عصر
من از کد زیر برای ریستور کردن دیتا بیس استفاده کردم اما نمی دونم بجای use master باید چی نوشت.لطفاً راهنمایی کنید

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

alexmcse
جمعه 06 اردیبهشت 1392, 18:38 عصر
سلام
http://alexmcse.blogsky.com/1392/01/13/post-13/

majid4
جمعه 13 اردیبهشت 1392, 11:09 صبح
دوستان این کد مشکلی داره ؟

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();

hamide741
جمعه 13 اردیبهشت 1392, 22:19 عصر
سلام
من يك تابع تعريف كردم براي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);

keyvan_s89
شنبه 14 اردیبهشت 1392, 11:21 صبح
سلام

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;

davidrobert
پنج شنبه 19 اردیبهشت 1392, 17:52 عصر
سلام خسته نباشید من دستور باز گردانی نوشتم که بانک اطلاعات رو به حالت اولش بر گردانی اگر هم وجود داشت برگرداند و جایی گزین بانک قبلی کنه ولی اشکال در ارتباط با دیتابیس میده ممنون میشم کمک کنید تا بدونم اشکال این خطا چی هستش با تشکر.
این هم کد های نوشته شده من.
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.تائید_تنها,MsgIcon.Warning);
}
}
این کدای که من نوشتم ممنون میشم دلیل خطا برنامه من رو بگید که خطا اشکال در ارتباط با بانک اطلاعات رو میده.

hamide741
پنج شنبه 19 اردیبهشت 1392, 19:29 عصر
سلام اين كد رو تو چه قسمتي بنويسم توي خود تابع ريستور يا تو رخداد كليد با توم

hamide741
پنج شنبه 19 اردیبهشت 1392, 19:30 عصر
با سلام وتشكر ديدمش ولي كمكي به من نكرد

davidrobert
پنج شنبه 19 اردیبهشت 1392, 20:50 عصر
خواهش میکنم یکی کمک کنی من رو خیلی نیاز دارم به این کد.برای بازگردانی اطلاعات

keyvan_s89
جمعه 20 اردیبهشت 1392, 12:45 عصر
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;

Me3ter
جمعه 20 اردیبهشت 1392, 14:48 عصر
سلام شما وقتی که ری استور میکنید در واقع فایل پشتیبان را با دیتا بیس جابه جا میکنید در حالی که دیتا بیس شما در حال استفاده است پس با اررور روبه رو میشید با این کد که میزارم مشکلتون حل میشه(@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

davidrobert
شنبه 21 اردیبهشت 1392, 11:28 صبح
سلام برادرا من برای برای Restore کردن دیتابیسم همه کار کردم و برادران کمک کردن من رو ولی تو برگرداندن اطلاعات در سیستم با مشکل بر خورد کردم و توانستم به وسیله کدهای برادران اطلاعات رو به صورت bak.* پشتیبان بگیرم ولی حالا هر کار میکنم نمیشه بریش گردوند میگه سیستم نمی تونه باز گردانی کنه اطلاعات رو این دستور backup گرفتن من هستش که درست کار میکنه در فرم هم هستش private void BtnBackup_Click(object sender, EventArgs e)
{
//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
{

}
} و این هم دستور Restore کردن منهستش هی برای باز گردنای اطلاعات ایراد میگیری میخوام موقع برگداندن پسوند bak رو به پسوند خودش MDF برگدونه تا اطلاعات با همون نام و پسوند یاشه و ایراد نگیره ولی هر کاری میکنم ایراد میگیری این هم دستور Restore من در فرم
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- این پسوند ناشناخته هستش برای جداول
این خطا های هستش که میده ممنون میشم کمک کنید خیلی گیر کردم تو کدهای ممنون میشم کمک کنید من رو. با تشکر فراوان.

merlin425
شنبه 21 اردیبهشت 1392, 14:29 عصر
من میخوام با سی شارپ کد 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

vira1368
شنبه 21 اردیبهشت 1392, 17:23 عصر
دوست عزیز توی خوده اررور با زبون ساده گفته که دیتابیستون در حال استفادس و برای رفع این مشکل میتونید از کوئری USE MASTER استفاده کنید تا دیگه دیتابسی که میخواین restore کنید وصل نباشه

merlin425
شنبه 21 اردیبهشت 1392, 18:13 عصر
خوب کد use master رو نوشتم

asgharjoon2
شنبه 21 اردیبهشت 1392, 23:44 عصر
سعی کنید برای اینکه به این مشکلات بر نخورید از توابع SMO استفاده کنید
خیلی راحت تر و قشنگ تر میشه هم بکاپ گرفت، هم Restore کرد
توابع SMO چیه میشه توضیح بدی

barnamenevisforme
یک شنبه 22 اردیبهشت 1392, 08:29 صبح
سلام
مشکل شما در connection string هست.(AttachDbFilename)
در واقع connection string مورد استفاده توسط شما ،میخواد database رو به صورت موقت attach کنه،در صورتی که پشتیبان گیری برای پایگاه داده ای به کار میاد که قبلا attach شده،
اگر فایل شما به صورت کامل attach نشده باشه و connection string حاوی عبارت AttachDbFilename در بقیه جاهای برنامتون به خوبی جواب میده،به جای پشتیبان گیری از کپی برداری از فایل پایگاه داده بهره ببرید،در غیر این صورت باید connection string تصحیح بشه.

reza69
سه شنبه 24 اردیبهشت 1392, 11:58 صبح
سلام من برای گرفتن بک آپ از این کد استفاده میکنم برای ری استور باید چه کدی بنویسم؟

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);

csharpdoost
سه شنبه 24 اردیبهشت 1392, 12:05 عصر
بنده از این کد برای برگرداندن اطلاعات استفاده میکنم.
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("خطا در بازیابی اطلاعات");
}

reza69
سه شنبه 24 اردیبهشت 1392, 12:10 عصر
بنده از این کد برای برگرداندن اطلاعات استفاده میکنم.
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("خطا در بازیابی اطلاعات");
}
این کد برای اکسز هست برای sql میخوام

reza69
سه شنبه 24 اردیبهشت 1392, 12:22 عصر
سلام
من موقع ری استور این ارور رو می گیرم
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);

csharpdoost
سه شنبه 24 اردیبهشت 1392, 12:54 عصر
اکسس و sql نداره . شما دارید نام دیتابیس رو با پسوندش به برنامه میدی. خودت میتونی sql ش رو بنویسی.

File.Copy(Filename, Application.StartupPath + @"\dbbackup.bak", true);

reza69
سه شنبه 24 اردیبهشت 1392, 14:53 عصر
کدی که نوشتم اینجوری شد ولی بدون ارور هیچ عملیاتی انجام نمیده فقط پیامی که تو برنامه گذاشتم رو میده.

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(),"خطا در بازیابی اطلاعات");
}

reza69
سه شنبه 24 اردیبهشت 1392, 14:58 عصر
از این کد هم استفاده کردم ولی ارور میده

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);

reza69
سه شنبه 24 اردیبهشت 1392, 15:12 عصر
اکسس و sql نداره . شما دارید نام دیتابیس رو با پسوندش به برنامه میدی. خودت میتونی sql ش رو بنویسی.

File.Copy(Filename, Application.StartupPath + @"\dbbackup.bak", true);

شما تو این برنامه فقط دارید فایل رو کپی میکنید برای sql نمیشه.

reza69
سه شنبه 24 اردیبهشت 1392, 18:18 عصر
سلام من موقع ری استور کردن بک اپ این ارور رو میگیرم.
RESTORE cannot process database 'mobile' 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.

اینم کدمه:

con.Open();
SqlCommand command;
command = new SqlCommand(@"restore database mobile from disk ='d:\\SQLBackup\\dbmobilebackup.bak'", con);
command.ExecuteNonQuery();
con.Close();
MessageBox.Show(".بازنشانی با موفقیت انجام شد", "پشتیبان", MessageBoxButtons.OK, MessageBoxIcon.Information);

gholami146
سه شنبه 24 اردیبهشت 1392, 18:36 عصر
برای باز گردانی اطلاعات شما باید ابتدا تمامی کانکشن ها تون رو به دیتا بیس موبایل ببندید سپس یک کانکشن به مستر ایجاد کنید نه موبایل بعد باید اون رو ری استور کنید

reza69
سه شنبه 24 اردیبهشت 1392, 18:39 عصر
برای باز گردانی اطلاعات شما باید ابتدا تمامی کانکشن ها تون رو به دیتا بیس موبایل ببندید سپس یک کانکشن به مستر ایجاد کنید نه موبایل بعد باید اون رو ری استور کنید
یعنی میگید اول دیتابیس mobile رو آفلاین کنم بعد این کد رو اجرا کنم؟

command = new SqlCommand(@"restore database master from disk ='d:\\SQLBackup\\dbmobilebackup.bak'", con);

اینجا مستر چیکار میکنه؟ اصلا چیه؟ دیتابیسه؟

reza69
سه شنبه 24 اردیبهشت 1392, 22:24 عصر
ممنون فهمیدم مشکل از کجاست
کد باید اینجوری شه.

command = new SqlCommand(@"ALTER DATABASE mobile SET OFFLINE with ROLLBACK IMMEDIATE restore database mobile from disk ='d:\\SQLBackup\\dbmobilebackup.bak' WITH REPLACE", con);

davidrobert
چهارشنبه 25 اردیبهشت 1392, 12:19 عصر
سلام به بچه های برنامه نویس میخواستم به اطلاع برنامه نویس های بریسونم اگه کسی با دانت 2010 یا 2012 کار میکنی میتونه از دستورات که برای کار با دیتابیس و هم همین طور این دستورات Backup و Restore استفاده کنی بدون هیچ مشکلی اگه در صورت اینکه با مشکل بر خورد کرد بدانه که کامپیوننت DevComponents و Telerik اجازه نمیدهد که از دستورات استفاده کنه و باعث میشه با پیغام خطا مواجه بیشه و برنامه کار نکونه و اطلاعات رو از دیتابیس نخونه و بکاپ و ریستور برنامه نده اگه کسی با همچین چیزی مواجه بدون کار این 2 تا کامپوننت هستش که نصب شده و این 2 تا عذت میکنن من این دستورات بکاپ و ریستور رو جواب نگرفتم وقتی کامپوننت های DevComponentsو Telerik رو نصب کردم با مشکل برخورد کردم ولی ویندوز روو عوض کردوم و دانت نت و اسکول سرور رو نصب کردم دوباره درست شد و بکاپ و ریستور گرفت این اطلاعی رو به این دلیل میریسونم کسی با مشکل بر خورد کرد با دیتابیس و بکاپ ریستور بدانه اشکال رو این 2 تا ایجاد کردن..

saeedchoopani
جمعه 27 اردیبهشت 1392, 23:23 عصر
سلام.از دوستان کسی میتونه کد زیر رو برای بازگردانی اطلاعات در سی شارپ توضیح بده?جای school یا mine و single user چیه؟کدوم قسمت هاش باید عوض بشه؟
private void Restore(string strFileName)
{
try
{
string command = "ALTER DATABASE school SET SINGLE_USER with ROLLBACK IMMEDIATE " + "use master " + " RESTORE DATABASE mine FROM DISK='" + strFileName + "'";
}

mousa1992
جمعه 27 اردیبهشت 1392, 23:38 عصر
سلام

اخرین پست این تاپیک (http://barnamenevis.org/showthread.php?367749-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D8%A8%D8%B9%D8%AF-%D8%A7%D8%B2-restore-%DA%A9%D8%B1%D8%AF%D9%86-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3)

موفق

saeedchoopani
شنبه 28 اردیبهشت 1392, 08:56 صبح
سلام

اخرین پست این تاپیک (http://barnamenevis.org/showthread.php?367749-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%A7%D8%B1%D8%AA%D8%A8%D8%A7%D8%B7-%D8%A8%D8%A7-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3-%D8%A8%D8%B9%D8%AF-%D8%A7%D8%B2-restore-%DA%A9%D8%B1%D8%AF%D9%86-%D8%AF%DB%8C%D8%AA%D8%A7%D8%A8%DB%8C%D8%B3)

موفق

متوجه نشدم.یعنی چی؟

mahmoud_monfaredi
یک شنبه 12 خرداد 1392, 22:20 عصر
سلام من ی قطعه کد میخام که بتونم از داده های جدولم بکاپ بگیرم و بتونم بازیابیش کنم

bazardeh
یک شنبه 12 خرداد 1392, 22:52 عصر
سلام دوست عزیز

این کدی که من تو برنامه هام استفاده میکنم یه نگاهی بنداز مشکلی نداره اگه متوجه نشدی برات توضیح میدم ، قبلش SaveFileDialog به فرمت اضافه کن

بک آپ گیری



SqlConnection sq = new SqlConnection("server=(local);database=RSR;integrated security=true;");
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "*.bak|*.bak";
if (sfd.ShowDialog() == DialogResult.OK)
{
SqlCommand com = new SqlCommand("backup database " + RSR + " to disk='" + sfd.FileName + "'", sq);
sq.Open();
com.ExecuteNonQuery();
sq.Close();
MessageBox.Show("تهیه نسخه پشتیبان از اطلاعات با موفقیت انجام شد", "پیغام", MessageBoxButtons.OK, MessageBoxIcon.Information);
}


بازیابی


SqlConnection sq = new SqlConnection("server=(local);database=RSR;integrated security=true;");
OpenFileDialog ofd = new OpenFileDialog();
SqlConnection.ClearAllPools(); // برای از بین بردن کانکشن ها از بانک
ofd.Title = "Select Backup file";
ofd.Filter = "*.bak|*.bak";
if (ofd.ShowDialog() == DialogResult.OK)
{
String query = "USE [master]; RESTORE DATABASE [" + RSR + "] FROM DISK = N'" + ofd.FileName + " ' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10";
SqlCommand com = new SqlCommand(query, sq);
sq.Open();
com.ExecuteNonQuery();
sq.Close();
MessageBox.Show("بازیابی اطلاعات از پشتیبان با موفقیت انجام شد", "پیغام", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

mahmoud_monfaredi
دوشنبه 13 خرداد 1392, 02:01 صبح
جواب نگرفتم
به RSR خطا گرفت(ابتدای برنامه نوشتم
public string RSR
خطا بر طرف شد )
تغییر دومی که دادم این بود آدرس پایگاه دادم که
SQLEXPRESS رو با آدرسی که داده بودید عوض کردم
(اگه بخام از داده های یک جدول خاص داخل فرمم بکاپ بگیرم چی )

bazardeh
دوشنبه 13 خرداد 1392, 15:19 عصر
به جای RSR نام بانک نو بزار آقا محمود عزیز :لبخندساده:

mahmoud_monfaredi
جمعه 17 خرداد 1392, 23:03 عصر
سلام
این کد بکاپ گیریم هستش که به اسم پایگاه دادم که library هستش قبل از این که برنامه رو اجرا کنم خطا میگیره
SqlCommand com = new SqlCommand("backup database " + Library + " to disk='" + sfd.FileName + "'", sq);
در بازیابی هم همین مشکل هست
این هم سورس کامل برنامه

using System.Data.SqlClient;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
SqlConnection sq = new SqlConnection(@"Data Source = .\SQLEXPRESS;
AttachDbFilename = |DataDirectory|\Library.mdf;
Integrated Security = True;
User Instance = True");
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "*.bak|*.bak";
if (sfd.ShowDialog() == DialogResult.OK)
{
SqlCommand com = new SqlCommand("backup database " + Library + " to disk='" + sfd.FileName + "'", sq);
sq.Open();
com.ExecuteNonQuery();
sq.Close();
MessageBox.Show("تهیه نسخه پشتیبان از اطلاعات با موفقیت انجام شد", "پیغام", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void button2_Click(object sender, EventArgs e)
{
SqlConnection sq = new SqlConnection(@"Data Source = .\SQLEXPRESS;
AttachDbFilename = |DataDirectory|\Library.mdf;
Integrated Security = True;
User Instance = True");
OpenFileDialog ofd = new OpenFileDialog();
SqlConnection.ClearAllPools(); // برای از بین بردن کانکشن ها از بانک
ofd.Title = "Select Backup file";
ofd.Filter = "*.bak|*.bak";
if (ofd.ShowDialog() == DialogResult.OK)
{
String query = "USE [master]; RESTORE DATABASE [" + Library + "] FROM DISK = N'" + ofd.FileName + " ' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10";
SqlCommand com = new SqlCommand(query, sq);
sq.Open();
com.ExecuteNonQuery();
sq.Close();
MessageBox.Show("بازیابی اطلاعات از پشتیبان با موفقیت انجام شد", "پیغام", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}

alexmcse
شنبه 18 خرداد 1392, 10:55 صبح
لینک دانلود نحوه بک آپ گیری و بازیابی
http://s4.picofile.com/file/7794670214/Backup_RestoreTo_sql_.rar.html

oliya24
چهارشنبه 29 خرداد 1392, 13:55 عصر
سلام دوستان خسته نباشید برای بک اپ گیری با سی شارپ ایا مدل دیتابیسها فرق میکنه منظورم اکسپرس و یا نسخ کامل هست ؟؟؟ اگر کسی از دوستان کد بک اپ و ریستور رو داره با مدلهای مختلف بانک بزاره ممنون میشم

vapa_71
چهارشنبه 29 خرداد 1392, 14:14 عصر
بکاپ
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);
}

vapa_71
چهارشنبه 29 خرداد 1392, 14:15 عصر
ریستور

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);
}
}

vapa_71
چهارشنبه 29 خرداد 1392, 14:17 عصر
این کد نام دیتابیس رو بر اساس تاریخ و زمان ذخیره میکنه و ریستور کردن هم میتونه بر اساس همون تاریخ و زمان باشه

اکسپرس هم بوده اما فکر نکنم تفاوتی داشته باشه

vapa_71
چهارشنبه 29 خرداد 1392, 14:19 عصر
این کد ها هم واسه پروسس بار هست اگه نخواستی میتونی پاکش کنی

progressBar1.PerformStep();
progressBar1.Value = 100;
progressBar2.Value = 0;

ppp1486
سه شنبه 04 تیر 1392, 17:47 عصر
درود بر همه شما دوستان
چطور می شه با استفاده از کدهای سی شارپ از برنامه ای که دیتابیس اون به
SQL SERVER 2008 متصل هست بک آپ و Restore نوشت؟؟؟
تاکید می کنم با SQL Express رو نمی خوام با دیتابیسی که به SQL SERVER 2008 وصل هست رو می خوام ممنونم می شم دوستان راهنمایی کنن

rostamkhani
سه شنبه 04 تیر 1392, 18:38 عصر
سلام

این PROCEDURE رو با SqlCommand در برنامه فراخوانی کن


CREATE PROCEDURE sp_backup
AS
BEGIN
BACKUP DATABASE [YourDatabase] TO DISK = N'C:\YourPathAndFile.bak'
WITH NOFORMAT, NOINIT,
NAME = N'Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
END
GO


نمونه های دیگر و Restore


SQL = @"RESTORE DATABASE MyDataBase TO DISK='d:\MyDATA.BAK'";
Cmd = new SqlCommand(SQL, Conn);
Cmd.ExecuteNonQuery();
Cmd.Dispose();



SQL = @"USE master BACKUP DATABASE MyDataBase TO DISK='d:\MyDATA.BAK'";



Microsoft.SqlServer.Management.Smo.Server smoServer =
new Server(new ServerConnection(server));

Database db = smoServer.Databases['MyDataBase'];
string dbPath = Path.Combine(db.PrimaryFilePath, 'MyDataBase.mdf');
string logPath = Path.Combine(db.PrimaryFilePath, 'MyDataBase_Log.ldf');
Restore restore = new Restore();
BackupDeviceItem deviceItem =
new BackupDeviceItem('d:\MyDATA.BAK', DeviceType.File);
restore.Devices.Add(deviceItem);
restore.Database = backupDatabaseTo;
restore.FileNumber = restoreFileNumber;
restore.Action = RestoreActionType.Database;
restore.ReplaceDatabase = true;
restore.SqlRestore(smoServer);

db = smoServer.Databases['MyDataBase'];
db.SetOnline();
smoServer.Refresh();
db.Refresh();

ppp1486
سه شنبه 04 تیر 1392, 18:49 عصر
این Microsoft.SqlServer.Management.Smo.Server smoServer چی هست؟؟؟ چطوری بشناسونمش به visual studio ؟؟؟؟

magic69
دوشنبه 10 تیر 1392, 00:37 صبح
درسته قدیمیه ولی چون بدون پاسخ کامل مونده جوابشو میدم.

این اررور وقتی داده میشه که شما در دستور بکاپ یا رستورتون مسیر فایل مربوطه رو نداده باشین یا اشتباه داده باشین

mohammadseven
یک شنبه 16 تیر 1392, 17:32 عصر
باسلام
بعد از اینکه Backup می گیرم برای restore کردن ی چنین پیغامی رو میده نمیدونم مشکل چیه. لطفا ی راهنمایی کنید.(از SQLServer 2012 و VS 2010 استفاده می کنم)


106794

tiyam_amiri
دوشنبه 17 تیر 1392, 12:47 عصر
backup در سی شارپ

من کد نمیخوام از طریق دیگه میخوام از پروژه ای که نوشتم بک آپ بگیرم

pooria_googooli
سه شنبه 18 تیر 1392, 11:15 صبح
Backup:
private void bbackup_Click(object sender, EventArgs e)
{
String Strbackup1,Strbackup2;
DateTime dteDate;
dteDate = DateTime.Now;


Strbackup2 = Application.StartupPath + @"\backup\" ;

saveFileDialog1.FileName = Strbackup2 ;
saveFileDialog1.InitialDirectory = Strbackup2;
saveFileDialog1.ShowDialog();

textBox1.Text = saveFileDialog1.FileName;

System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(@"backup database YOURDB to disk = '" + @textBox1.Text.ToString() + "'");
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(DataBase.cn);
cmd.Connection = con ;
con.Open();
cmd.ExecuteNonQuery();

this.Close();
}

pooria_googooli
سه شنبه 18 تیر 1392, 11:18 صبح
restor :

private void bbackup_Click(object sender, EventArgs e)

{

openFileDialog1.Title = "بازيابي اطلاعات";

openFileDialog1.FileName = "*.bak";

openFileDialog1.InitialDirectory = Application.StartupPath.ToString() + @"\backup\";

openFileDialog1.ShowDialog();

textBox1.Text = openFileDialog1.FileName;

System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(@"ALTER DATABASE YOURDB SET SINGLE_USER with ROLLBACK IMMEDIATE; use [master]; RESTORE DATABASE YOURDB FROM disk = '" + @textBox1.Text.ToString() + "' with REPLACE;ALTER DATABASE YOURDB SET MULTI_USER");

cmd.Connection = con;

con.Open();

cmd.ExecuteNonQuery();

this.Close();

}

hraeissi
سه شنبه 18 تیر 1392, 11:37 صبح
ممنون
این کد ها را در کلیک دکمه بگذارم دیگه؟

hraeissi
سه شنبه 18 تیر 1392, 11:47 صبح
Backup:
private void bbackup_Click(object sender, EventArgs e)
{
String Strbackup1,Strbackup2;
DateTime dteDate;
dteDate = DateTime.Now;


Strbackup2 = Application.StartupPath + @"\backup\" ;

saveFileDialog1.FileName = Strbackup2 ;
saveFileDialog1.InitialDirectory = Strbackup2;
saveFileDialog1.ShowDialog();

textBox1.Text = saveFileDialog1.FileName;

System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(@"backup database YOURDB to disk = '" + @textBox1.Text.ToString() + "'");
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(DataBase.cn);
cmd.Connection = con ;
con.Open();
cmd.ExecuteNonQuery();

this.Close();
}

از این داره خطا می گیره saveFileDialog1

hraeissi
سه شنبه 18 تیر 1392, 11:48 صبح
savefiledialog مشکلش حل شد فقط text box برای چیه

hraeissi
سه شنبه 18 تیر 1392, 11:50 صبح
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(DataBase.cn);

از این هم خطا گرفته

pooria_googooli
سه شنبه 18 تیر 1392, 11:51 صبح
textbox محلی کی قصد دارید فایل بک آپ اونجا ذخیره بشه داخلش هست .

hraeissi
سه شنبه 18 تیر 1392, 11:57 صبح
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(DataBase.cn);

از این هم خطا گرفته اینو چکار کنم

pooria_googooli
سه شنبه 18 تیر 1392, 12:02 عصر
به جای Database.cn باید کانکشن استرینگت را قرار بدی . توی این مثال میره از یک کلاس می خونه . شما مستقیم بهش مقدار بده . مثلا اینجوری :
System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection("server=. ; database=dbname ; uid=sa ; pwd=1234;");

hraeissi
سه شنبه 18 تیر 1392, 12:55 عصر
ممنون
وقتی backup می گیرد فایل بدون پسونده در نتیجه وقتی می خواهم بازیابی کنم فایل را نمی بیند

pooria_googooli
سه شنبه 18 تیر 1392, 13:00 عصر
دوست عزیز می خواهید من کل پروژه را اینجا قرار بدم ؟ یه ذره سرچ کنید بد نیست .

Strbackup1 = dteDate.Hour.ToString() + "_" + dteDate.Minute.ToString() + ".bak";
Strbackup2 = Application.StartupPath + @"\backup\" ;

saveFileDialog1.FileName = Strbackup2 + Strbackup1 ;

CsharpNevisi
سه شنبه 18 تیر 1392, 13:25 عصر
بچه چرا با کوئری نسخه پشتیبان میگیرید وقتی میتونید خود بانکو کپی کنید ... !!!
دوست عزیز من برای تهیه نسخه پشتیبان بانکو تو به جا دیگه کپی میکنم و برای رستور کردن بانو جایگزین بانک اصلی میکنم ... !!
کد کپیو خواستی بگو واسط بزارم ... !!!

hraeissi
سه شنبه 18 تیر 1392, 14:32 عصر
restor :

private void bbackup_Click(object sender, EventArgs e)

{

openFileDialog1.Title = "بازيابي اطلاعات";

openFileDialog1.FileName = "*.bak";

openFileDialog1.InitialDirectory = Application.StartupPath.ToString() + @"\backup\";

openFileDialog1.ShowDialog();

textBox1.Text = openFileDialog1.FileName;

System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(@"ALTER DATABASE YOURDB SET SINGLE_USER with ROLLBACK IMMEDIATE; use [master]; RESTORE DATABASE YOURDB FROM disk = '" + @textBox1.Text.ToString() + "' with REPLACE;ALTER DATABASE YOURDB SET MULTI_USER");

cmd.Connection = con;

con.Open();

cmd.ExecuteNonQuery();

this.Close();

}
بعد از دادن فایل برای برگرداندن در خط cmd.ExecuteNonQuery();
متوقف می شود
بچه چرا با کوئری نسخه پشتیبان میگیرید وقتی میتونید خود بانکو کپی کنید ... !!!
دوست عزیز من برای تهیه نسخه پشتیبان بانکو تو به جا دیگه کپی میکنم و برای رستور کردن بانو جایگزین بانک اصلی میکنم ... !!
کد کپیو خواستی بگو واسط بزارم ... !!!

چه فرقی داره ؟
کدشو بزار دیگه

CsharpNevisi
سه شنبه 18 تیر 1392, 14:42 عصر
System.IO.File.Copy(Application.StartupPath + "/1", "2");
1=اسم بانکت
2=ادرسی که میخوایی بکاپ اونجا ذخیره شه ... !!
برای رستور هم :
System.IO.File.ِDelete(Application.StartupPath + "/1");
بانکو پاک کن بعد با دستور زیر بکاپو کپی کن کنار برنامه
System.IO.File.Copy( "1", Application.StartupPath +"/2");
1=آرس بکاپ
2=اسم بانکت ... !!

sohil_ww
سه شنبه 18 تیر 1392, 14:45 عصر
System.IO.File.Copy(Application.StartupPath + "/1", "2");

وقتی بانک در حالت اجرا باشه کپی کردن به مشکل می خوره

CsharpNevisi
سه شنبه 18 تیر 1392, 14:47 عصر
وقتی بانک در حالت اجرا باشه کپی کردن به مشکل می خوره

فک نکنم تو داری کپی میگیری .. کات که نمیکنی .. !!!
من استفاده میکنم مشکلیم پیش نیومده تا حالا ... !!
تازه هر 100 ثانیه هم میگیره ... بانکمم معمولا در حال استفادست ... !!
از یه پروسسور بار هم برای نشون دادن پیشرفت کپی استفاده کردم .... که اگه حجم بانک زیاد بود ... کاربر بتونه مقدار پیشرفت عملیاتو ببینه .. !!

pooria_googooli
سه شنبه 18 تیر 1392, 15:11 عصر
بچه چرا با کوئری نسخه پشتیبان میگیرید وقتی میتونید خود بانکو کپی کنید ... !!!
دوست عزیز من برای تهیه نسخه پشتیبان بانکو تو به جا دیگه کپی میکنم و برای رستور کردن بانو جایگزین بانک اصلی میکنم ... !!
کد کپیو خواستی بگو واسط بزارم ... !!!

من با اینکار خیلی مخالفم . به نظ من دیتا بیس باید یه جا ثابت باشه و فایلش دستکاری نشه . چرا وقتی میشه بکاپ گرفت م بیایم کل دیتا بیس را از دسترس خارج کنیم ؟ راه حل شما توی شبکه چیه ؟ مثلا هرموقع قصد گرفتن پشتیبان داری کل سیستم از کار بیفته ؟

pooria_googooli
سه شنبه 18 تیر 1392, 15:12 عصر
فک نکنم تو داری کپی میگیری .. کات که نمیکنی .. !!!
من استفاده میکنم مشکلیم پیش نیومده تا حالا ... !!
تازه هر 100 ثانیه هم میگیره ... بانکمم معمولا در حال استفادست ... !!
از یه پروسسور بار هم برای نشون دادن پیشرفت کپی استفاده کردم .... که اگه حجم بانک زیاد بود ... کاربر بتونه مقدار پیشرفت عملیاتو ببینه .. !!

sql 2008 به هیچ عنوان اجازه نمیده وقتی دیتا بیس اتچ شده از روش کپی بشه یا جابه حا بشه . حتما باید دی اتچ بشه که اینم یعنی از کار افتادن کل سیستم .

pooria_googooli
سه شنبه 18 تیر 1392, 15:13 عصر
بعد از دادن فایل برای برگرداندن در خط cmd.ExecuteNonQuery();
متوقف می شود


خب بگو چه اروری میده من بگم مشکل کجاست .

CsharpNevisi
سه شنبه 18 تیر 1392, 15:18 عصر
sql 2008 به هیچ عنوان اجازه نمیده وقتی دیتا بیس اتچ شده از روش کپی بشه یا جابه حا بشه . حتما باید دی اتچ بشه که اینم یعنی از کار افتادن کل سیستم .

کاری که دوستمون میخواد بکنه ایینه که با دکمه نسخه پشتیبان بگیره .... !!!!
این یعنی این که اگر هم موقع کپی گرفتن اس کیو ال ایراد بگیره ..... تو برنامه دیتا بیس بسته است ... !!!!
شبکه هم مسئله ایه واس خودش .... !!!!
ولی این که برنامه بخواد بخوابه رو نمیفهمم یعنی چی ..... واس چی باید برنامه بخوابه .... !!!؟؟؟

hraeissi
سه شنبه 18 تیر 1392, 15:34 عصر
خب بگو چه اروری میده من بگم مشکل کجاست .

ExecuteNonQuery: Connection property has not been initialized.

pooria_googooli
سه شنبه 18 تیر 1392, 16:18 عصر
کاری که دوستمون میخواد بکنه ایینه که با دکمه نسخه پشتیبان بگیره .... !!!!
این یعنی این که اگر هم موقع کپی گرفتن اس کیو ال ایراد بگیره ..... تو برنامه دیتا بیس بسته است ... !!!!
شبکه هم مسئله ایه واس خودش .... !!!!
ولی این که برنامه بخواد بخوابه رو نمیفهمم یعنی چی ..... واس چی باید برنامه بخوابه .... !!!؟؟؟
برنامه الان در حال اجراست . این روندی که شما میگی اگر طی بشه دیتا بیس دی اتچ میشه . تکلیف اون کاربر داخل شبکه که داره اطلاعات رو میبینه چیه ؟ باید صبر کنه تا عملیات کپی تموم شه دیتا بیس اتچ بعد وصل بشه ببینه ؟ این کار اشتباهه .

CsharpNevisi
سه شنبه 18 تیر 1392, 16:32 عصر
برنامه الان در حال اجراست . این روندی که شما میگی اگر طی بشه دیتا بیس دی اتچ میشه . تکلیف اون کاربر داخل شبکه که داره اطلاعات رو میبینه چیه ؟ باید صبر کنه تا عملیات کپی تموم شه دیتا بیس اتچ بعد وصل بشه ببینه ؟ این کار اشتباهه .

تا حالا برام این مشکل پیش نیومده بود و بانک بدون هیچ اختلالی در روند برنامه کپی میشد ... و نمیدونستم که اسکیو ال اجازه این کارو نمیده ... !!!
وقت کنم حتما امتحان میکنم ... !!!
اگه اینطوری که شما میگی باشه حق با شماست ... !!!
به هر حال دوست عزیز ممنون از اطلاع رسانیت .... داریم یه پروژه تحت شبکه سنگین شروع میکنیم ... حرف شمارو بررسی میکنم ... اگه درست باشه ... شما باعث شدی که ما یه اشتباه بزرگو نکنیم ... !!
ممنون:قلب:

as29160
پنج شنبه 20 تیر 1392, 02:22 صبح
private void Restore(string strfilename)
{
// try
// {
string command = "ALTER DATABASE LIB3 SET SINGLE_USER WITH ROLLBACK IMMEDIATE " + "USE MASTER" + "RESTORE DATABASE LIB3 FROM DISK='" + strfilename + "'";
this.Cursor = Cursors.WaitCursor;

SqlCommand oCommand = null;
SqlConnection oConnection = null;
oConnection = new SqlConnection("Data Source=.;Initial Catalog=lib3;Integrated Security=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);
// }

esafb52
پنج شنبه 20 تیر 1392, 02:32 صبح
خب چه خطایی داد متن خطا رو بذار

as29160
پنج شنبه 20 تیر 1392, 02:57 صبح
خب چه خطایی داد متن خطا رو بذار

Database 'MASTERRESTORE' does not exist. Make sure that the name is entered correctly.

esafb52
پنج شنبه 20 تیر 1392, 04:21 صبح
دوست عزیز میگه دیتابیسی با چنین اسمی وجود نداره سعی کن اسم رو دقیق وارد کنی

as29160
جمعه 21 تیر 1392, 01:10 صبح
اره می دونم ولی اسم دیتا بیسم همینه درسته

hraeissi
جمعه 21 تیر 1392, 10:06 صبح
مشکل بازیابی رو چکار کنم

moh899
شنبه 29 تیر 1392, 13:40 عصر
سلام از کد زیر برای restore استفاده می کنم
use master ALTER DATABASE [newdent] SET SINGLE_USER WITH ROLLBACK IMMEDIATE RESTORE DATABASE [newdent] FROM DISK = '" + filename + "' ALTER DATABASE [newdent] SET MULTI_USER

اول خطا نمی داد ولی حالا خطای زیر رو میده
The backup set holds a backup of a database other than the existing 'newdent' database.
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master'.

hamide741
شنبه 29 تیر 1392, 20:35 عصر
try
{

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


this.Cursor = Cursors.WaitCursor;
SqlCommand oCammand = null;
SqlConnection oConnection = null;
oConnection = new SqlConnection("Data Source=.;Initial Catalog=qq;Integrated Security=True");
if (oConnection.State == ConnectionState.Closed)


oConnection.Open();
oCammand = new SqlCommand(command, oConnection);
oCammand.ExecuteNonQuery();
this.Cursor = Cursors.Default;

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

ولي اين مشكل را داره error 40 could not open a connection to SqL server

mahdi_7610
شنبه 29 تیر 1392, 21:23 عصر
سلام

کد شما اصلاح شد.


try
{
string command = @"ALTER DATABASE qq SET SINGLE_USER with ROLLBACK IMMEDIATE"
+ " USE MASTER" +
" RESTORE DATABASE qq From DISK='" + strFilename + "'with REPLACE";
this.Cursor = Cursors.WaitCursor;
SqlConnection oConnection = new SqlConnection();
SqlCommand oCammand = new SqlCommand();
oConnection.ConnectionString = "Data Source=.;Initial Catalog=qq;Integrated Security=true";
if (oConnection.State != ConnectionState.Open)
oConnection.Open();
oCammand.Connection = oConnection ;
oCammand.CommandText = command;
oCammand.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("بازيابي اطلاعات با موفقيت انجام شد");
}
catch (Exception ex)
{
MessageBox.Show("Error Occurd :" + ex.Message);
}

erfan_urchin
دوشنبه 31 تیر 1392, 16:57 عصر
از این کد استفاده کنید ببینید بازم error میده؟
restore database newdent from disk = 'E:\ My folder\BackupFile.Bak'

systam
دوشنبه 31 تیر 1392, 17:21 عصر
سلام من هرچی کد توی این سایت توی سایت code project توی سایت microsoft بود امتحان کردم نشد که نشد


توی بخش vb گذاشتم
از دوستان میخوام کمک کنند (http://barnamenevis.org/showthread.php?409618-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%A8%DA%A9%D8%A7%D9%BE-%DA%AF%DB%8C%D8%B1%DB%8C-%D8%A7%D8%B2-%D8%A8%D8%A7%D9%86%DA%A9-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87)

systam
دوشنبه 31 تیر 1392, 17:23 عصر
یک نمونه برنامه باشه که حداقل کار رو انجام بده
حداقل کپیش میکنیم چیکار کنیم
هرکی یجور دستور رو مینویسه کد رو

systam
دوشنبه 31 تیر 1392, 18:01 عصر
من الان commandtext داخلش اینه :
" USE Master RESTORE database [E:\test\test\bin\Debug\db.mdf] FROM DISK ='E:\db.BAK' WITH NORECOVERY , MOVE 'db' TO 'E:\test\test\bin\Debug\db.mdf', MOVE 'db_log' TO ' E:\test\test\bin\Debug \db_log.ldf' "


خطایی که میگیره

pooria_googooli
دوشنبه 31 تیر 1392, 18:03 عصر
شما الان دیتا بیس newdent را توی سرورت داری ؟ معمولا اگر دستور with repalce را اضافه کنی این مشکل حل میشه . یعنی به این صورت
use master ALTER DATABASE [newdent] SET SINGLE_USER WITH ROLLBACK IMMEDIATE RESTORE DATABASE [newdent] FROM DISK = '" + filename + "' WITH REPLACE ALTER DATABASE [newdent] SET MULTI_USER

roolinjax
دوشنبه 31 تیر 1392, 18:36 عصر
سلام امیدوارم این کد به دردتون بخوره
try
{
string strFileName = "Address";
SqlConnection.ClearAllPools();
SqlConnection connect= new SqlConnection("Data Source=.\\SQLExpress;Initial Catalog=dbName;Integrated Security=True");
SqlCommand command;
command = new SqlCommand("use master", connect);
command.ExecuteNonQuery();
command = new SqlCommand(@"restore database Hesabdari1 from disk = '" + strFileName + "' with replace", connect);
command.ExecuteNonQuery();
connect.Close();
}
catch
{}

sitelogin20
پنج شنبه 17 مرداد 1392, 09:14 صبح
با سلام خدمت تمامی دوستان
در حال نوشتن یک برنامه بوسیله c# هستم و در برنامه از پایگاه داده Sql server 2008 express استفاده کردم.
حالا در قسمتی از برنامه احتیاج دارم که به عنوان backup پایگاه داده را به همراه یکسری فایل و فولدر دیگه بریزم توی یک فایل zip و در اینده هم در صورت نیاز انها را به جای اصلی برگردانم یا به اصطلاح restore کنم و می خوام که اینکار رو بوسیله کد نویسی انجام بدم. متاسفانه هر چقدر که سرچ کردم نتوانستم راهی برای انجام اینکار پیدا کنیم که هم موقع backup و هم موقع restore به کار بیاد. بعضی از روش ها هنگام به اصطلاح backup گیری ارور می داد و برخی هم موقع restore کردن. متشکر می شوم اگه کسی بتونه کمک کنه. البته باید اینو بگم که کلا اطلاعاتم در مورد برنامه نویسی و پایگاه داده خیلی کم هست و متشکر می شوم که جواب دوستان به زبان ساده و در صورت امکان همراه با کدهای لازم باشه , هم در مورد backup و هم در مورد restore.
پیشاپیش متشکرم.

mymina
پنج شنبه 17 مرداد 1392, 09:26 صبح
شما به راحتی می توانید با استفاده از کلاس زیر عملیات backup , restore را انجام دهید.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
using System.IO;
using System.Data.SqlClient;
using System.Diagnostics;
using System.Windows.Forms;

namespace PreservationProje
{
class Back_Restore : IDisposable
{
//نحوه پشتیبان گیری و باز خوانی از اطلاعات پایگاه داده

private string BackUpConString = @"Data source=.;initial catalog=PreservatioData;integrated security=True;multipleactiveresultsets=True";//Connection String baraye Dastyabi be Data base Asli
private string ReStoreConString = "Data Source=.;Initial Catalog=master;Integrated Security=True";//Connection String baraye dastresi be data base Master


//------------------------------------------------------------

public void Dispose()
{
GC.SuppressFinalize(this);
}



//-------------------------------------------------------------
public void ReStorMyDB()
{
if (MessageBox.Show("همه داده های دیتابیس ممکن است تغییر نماید!!! \n yesاگر مطمئن هستید انتخاب نمایید ", "باز خوانی دیتابیس", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{

SqlConnection.ClearAllPools();
using (SqlConnection con = new SqlConnection(ReStoreConString))
{
ServerConnection srvConn = new ServerConnection(con);
Server srvr = new Server(srvConn);

if (srvr != null)
{
try
{

Restore rstDatabase = new Restore();
rstDatabase.Action = RestoreActionType.Database;
rstDatabase.Database = "PreservatioData";//Bayad ham nam ba Data base barname tanzim shavad
OpenFileDialog opfd = new OpenFileDialog();
opfd.Filter = "BackUp File|*.araDB";
if (opfd.ShowDialog() == DialogResult.OK)
{


BackupDeviceItem bkpDevice = new BackupDeviceItem(opfd.FileName, DeviceType.File);

rstDatabase.Devices.Add(bkpDevice);
rstDatabase.ReplaceDatabase = true;
rstDatabase.SqlRestore(srvr);
MessageBox.Show("بازخوانی اطلاعات با موفقیت انجام شد", "Server", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch (Exception e)
{
MessageBox.Show("ERROR: An error ocurred while restoring the database", "Application Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}

}
}

public void BackUpMyDB()
{
using (SqlConnection con = new SqlConnection(BackUpConString))
{
ServerConnection srvConn = new ServerConnection(con);
Server srvr = new Server(srvConn);

if (srvr != null)
{
try
{


Backup bkpDatabase = new Backup();
bkpDatabase.Action = BackupActionType.Database;
bkpDatabase.Database = "PreservatioData";//Bayad ham nam ba Data base barname tanzim shavad
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "BackUp File|*.araDB";
sfd.FileName = "BackUp_" + (DateTime.Now.ToShortDateString().Replace('/', '.'));
if (sfd.ShowDialog() == DialogResult.OK)
{
BackupDeviceItem bkpDevice = new BackupDeviceItem(sfd.FileName, DeviceType.File);
bkpDatabase.Devices.Add(bkpDevice);
bkpDatabase.SqlBackup(srvr);
MessageBox.Show("پشتیبان گیری از اطلاعات با موفقیت انجام شد", "Server", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch (Exception e) { MessageBox.Show(e.ToString()); }
}
}
}



}

}



و در صفحه فرم در تابعی که می خواهید با فراخوانی آن عملیات back up انجام شود دستور زیر را قرار دهید


private void Backuptool_Click(object sender, EventArgs e)
{
using (var back = new ClassBack_Restore())
{ back.BackUpMyDB(); }
}

alexmcse
دوشنبه 21 مرداد 1392, 18:37 عصر
بک آپ و ریستور

sor.na10
چهارشنبه 30 مرداد 1392, 01:42 صبح
این پروسیجر دارم با این کد ها ولی خطا میده ....... لطفا کمک کنید

ALTER PROCEDURE [dbo].[RestoreProc] @Path varchar(250)
AS
BEGIN
RESTORE DATABASE University
FROM DISK = @Path
WITH
FILE = 1,
NOUNLOAD,
REPLACE,
STATS = 10
END



اینم کد برنامه

string ConnectionString = "Server=(LOCAL);Database=University;Trusted_Connect ion=True;";
SqlConnection Connection = new SqlConnection(ConnectionString);
SqlCommand Command = new SqlCommand("RestoreProc", Connection);
Command.CommandType = CommandType.StoredProcedure;

Command.Parameters.Add("@Path", SqlDbType.VarChar).Value = TBAddress.Text;
SqlConnection.ClearAllPools();
Connection.Open();

Command.ExecuteNonQuery();
Connection.Close();


این خطا رو میده
RESTORE cannot process database 'University' 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.

amir200h
چهارشنبه 30 مرداد 1392, 02:02 صبح
شما باید اوب ارتباط با دیتابیس رو قطع کنین بعد عمل restore را انجام بدین
ALTER DATABASE University SET OFFLINE with ROLLBACK IMMEDIATE
RESTORE DATABASE University
FROM DISK = @Path
WITH
FILE = 1,
NOUNLOAD,
REPLACE,
STATS = 10

systam
چهارشنبه 30 مرداد 1392, 09:54 صبح
database be used when performing this operation.
RESTORE DATABASE is terminating abnormally.
این خطا مربوط به اینه که بانکتون در sql server خوده ویزال بازه اون رو dtache کنید درست میشه

sor.na10
پنج شنبه 31 مرداد 1392, 01:00 صبح
از پروسیجر شما استفاده کردم ولی اول کار db رو off میکنه و میگه امکان دسرسی وجود نداره

veniz2008
پنج شنبه 31 مرداد 1392, 02:42 صبح
سلام.
بعد از ری استور کردن بایستی دیتابیس آفلاین شده رو دوباره فعال کرد تا بشه از اون استفاده کرد.
استورد پروسیجر زیر رو استفاده کنید ببینید مشکلتون حل میشه یا نه. اگر خطایی رخ داد متن خطا رو بذارید.
منظور از pathfile@ همون مسیر ذخیره شدن فایل پشتیبان هست که از سمت برنامه برای sp فرستاده میشه.

create proc MyRestore
@pathfile nvarchar(400)
as
ALTER DATABASE DBAzmoon SET OFFLINE WITH ROLLBACK IMMEDIATE
RESTORE DATABASE DBAzmoon FROM DISK = @pathfile WITH REPLACE
ALTER DATABASE DBAzmoon SET ONLINE
GO

ahadabasi
سه شنبه 26 شهریور 1392, 10:11 صبح
backup
"BACKUP DATABASE Clup TO DISK='" + path + "' WITH NOFORMAT, NOINIT, SKIP, NOREWIND, NOUNLOAD, STATS = 10"
restore
@"use master" + (char)13 + @"restore database [clup] from disk =N'" + path + "' with file=1,replace,stats=10"
path همون مسیر


داداش دمت گرم این کد مشکل من رو حل کرد

bbagher
پنج شنبه 07 فروردین 1393, 18:44 عصر
گرفتن پشتیبان از پایگاه داده ی SQL با #C



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)
{
try
{
objCommand = new SqlCommand("BACKUP DATABASE [databaseName] TO DISK='" + saveFileDialog1.FileName + "'", objconnectin());
objCommand.ExecuteNonQuery();
MessageBox.Show(" تهيه نسخه پشتيبان از اطلاعات با موفقيت انجام شد ");
}
catch (Exception ex) { MessageBox.Show("Error Occurd :" + ex.Message); }
}



بازیابی پشتیبان از پایگاه داده ی SQL با #C



OpenFileDialog open = new OpenFileDialog();
open.Filter = "Backup SQL File (*.bak)|*.bak|All Files (*.*)|*.*";
open.ShowDialog();
if (open.FileName != "")
{
try
{
objCommand = new SqlCommand("alter database BimeDB set OFFLINE with ROLLBACK IMMEDIATE RESTORE DATABASE BimeDB FROM DISK = '" + open.FileName + "' WITH REPLACE", SC1.SqlConnection());
objCommand.ExecuteNonQuery();
MessageBox.Show(" بازیابی اطلاعات با موفقیت انجام شد ");
}
catch (Exception ex) { MessageBox.Show("Error Occurd :" + ex.Message); }
}

sasan9
چهارشنبه 20 فروردین 1393, 16:21 عصر
با سلام خدمت دوستان من یه سوال اساسی دارم
تمام کدهارو من امتحان کردم و جواب نگرفتم(smo , ... ,.....)
من بانکمو با خود ویژوال استودیو ایجاد کردم و sqlserver نصب نیست. تمام برنامم درست کار میکنه storedprosedure ویو و تیبلو همه چی ولی این درست نمیشه میخواستم ببینم حتما باید sqlserver نصب بشه که بتونم بک آپ بگیرم؟

objCommand = new SqlCommand("alter database BimeDB set OFFLINE with ROLLBACK IMMEDIATE RESTORE DATABASE BimeDB FROM DISK = '" + open.FileName + "' WITH REPLACE", SC1.SqlConnection());

از این دستور استفاده کردم کل بانم بهم ریخت

sasan9
چهارشنبه 20 فروردین 1393, 16:39 عصر
مشکلم برای بک آپ حل شد تمامی کدهای بک اپ درست کار میکنن باید به این نکته توجه کرد که با اسم پایگاه داده باید مسیرشم داد حالا هرجایی که باشه
ولی بانکم از دسترس خارج شده نمیدونم چکار کنم کسی نمیتونه کمک کنه؟ یه بک آپ ازش دارم