سلاماکسس هم که یه فایله که جایگزین میکنی مثل sql سرویسی نداره که یاز نگه داره
اینو خودم میدونستم
ولی اجازه جایگزینی رو نمیده
سلاماکسس هم که یه فایله که جایگزین میکنی مثل sql سرویسی نداره که یاز نگه داره
اینو خودم میدونستم
ولی اجازه جایگزینی رو نمیده
سلام
string PathToRestoreDB = Environment.CurrentDirectory + @"\ResDB.mdb";
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "backup files (*.bk)|*.bk";
if (ofd.ShowDialog() == DialogResult.OK)
{
string Filetorestore = ofd.FileName;
File.Copy(Filetorestore, PathToRestoreDB, true);
MessageBox.Show("پشتیبان با موفقیت بازیابی شد", "بازیابی پشتیبان");
}
مشکل شما توی این خطه: File.Copy(Filetorestore, PathToRestoreDB, true);
وقتی true قرار بدی اجازه جایگزینی میده.
منم مشکل restore کردن بانکم و دارم، با اینکه یه کد نوشتم اما روی یه سیستم جواب میده روی یکی دیگه جواب نمیده یا روی همون سیستمهم گاهی جواب میده گاهی جواب نمیده نمیدونم مشکل چی میتونه باشه...
string SqlStr = "USE master RESTORE DATABASE MyDB FROM DISK ='" + txtPath.Text + "' WITH REPLACE";
clsMe.exect(SqlStr);
خب فایل شما کار می کنه؛ منتها برنامه ی شما فقط بکاپ و ریستوری می کنه .
من به جای فایل mdb شما، فایل mdf خودم رو نوشتم ولی اصلا" دیگه برای بکاپ هم ارور می ده :
![]()
restore کردن به مراتب کار خیلی حساس تری هست از backup گرفتن در پروژه های بزرگ این وظیقه dba هست که ریستور کند. در هنگاه restore دیتابیس نباید توسط سایرین در حال استفاده کردن باشد.
این کد تمام بکاپ هایی که بغیر از مسیر My Documents , desktop باشد ریستور میکند
OpenFileDialog my = new OpenFileDialog();
my.Filter = "Backup files (*.bak)|*.bak";
if (my.ShowDialog() == DialogResult.OK)
{ SqlConnection.ClearAllPools();
SqlConnection objConnection = new SqlConnection("Data Source=.;Initial Catalog=" + name_db + ";Integrated Security=True");
SqlCommand objCommand = new SqlCommand();
query_string = "USE [master]; RESTORE DATABASE [" + name_db + "] FROM DISK = N'" + my.FileName + "' WITH NOUNLOAD, REPLACE, STATS = 10";
objCommand.Connection = objConnection;
objCommand.Connection.Open();
objCommand.CommandText = query_string;
objCommand.ExecuteNonQuery();
objCommand.Connection.Close();
MessageBox.Show("نسخه پشتیبان با موفقیت جایگزین شد", "پشتیبان گیری", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
من بکاپم درست کار می کنه ولی رستور هنگ می کنه
ولی رستور رو بردم از یک پروژه دیگه درست کار کرد
به خاطر اینکه رستور زمانی اتفاق می افته که برنامه run نباشه به اون دیتابیسی که می خواهیم بکاپ بگیریم
راه کار چیه دوستان؟
اگه ديتابيست اكسس هست كه با همون كدي كه قبلا گذاشتم كار خواهد كرد ... مطمئنم كه ميگم ..چون رفتم تست كردم ... حالا اگه تو برنامه شما نميشه ، مشكل از جاي ديگست.... اگه خواستي برنامه رو بزار تا كمكت كنم .
ولي اگه ديتابيست SQL Server هست ... بايد بگم تا زماني كه سرويس اس كيو ال رو Stop نكني .... نميتوني به فايل هاي ديتابيست دسترسي داشته باشه (حتي نميتوني كپي كني) . پس اول بايد يه راهي بره Stop كردن سرويس پيدا كني .
يك نكته ديگه كه هست اينه كه : اگه ديتابيست رو از داخل VS به پروژت اضافه كني ... VS يك نسخه از اون رو در پوشه اصلي در كنار فايل هاي ديگه نگه ميداره و هر سري با اجراي برنامه ..يك كپي از اون رو به ApplicationDirectory ميندازه ... پس دقت كنيد اين شمارو به اشتباه نندازه .
آخرین ویرایش به وسیله reza_mostafavi63 : یک شنبه 27 آذر 1390 در 13:51 عصر
سلام.
من از یه تابع برای گرفتن back up استفاده میکنم ولی error mide ???!!!
sqlserver2008,C#
private void Bakfile(string file)
{
try
{
string sql = @"BACKUP DATABASE TO FIX DISK='" + file + "'";
this.Cursor = Cursors.WaitCursor;
SqlCommand command = null;
SqlConnection connection = null;
connection = new SqlConnection("Data Source=.;Initial Catalog=dbtest;Integrated Security=True");
if (connection.State != ConnectionState.Open)
connection.Open();
command = new SqlCommand(sql, connection);
command.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("بكاپ انجام شد");
}
catch (Exception ex)
{
MessageBox.Show("Error Occurd :" + ex.Message);
}
error :incorrect syntax near the keyword TO.
سلام
شما اسم دیتابیسی که میخواین ازش Backup بگیرین رو ذکر نکردین.
BACKUP DATABASE DB TO DISK = 'db.bak'
سلام
اینجوری بنویس
string sql = @"BACKUP DATABASE dbtest TO DISK='" + file + "'";
this.Cursor = Cursors.WaitCursor;
SqlCommand command = null;
SqlConnection connection = null;
connection = new SqlConnection("Data Source=.;Initial Catalog=master;Integrated Security=True");
بازم خطا ،تغییری نکرد ،error قبل رو میده![]()
سلام دوست عزیز
کد کاملش رو میزارم:
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\dbName.mdf;Integrated Security=True;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("ايجاد نسخه پشتيبان با خطا مواجه گرديد ", "پيام", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
اگر بانک اتچ شده(سرور) باید اول دی تچ کنید بعد بکاپ بگیرید.
موفق باشید
ببخشید یه سوال ،من مبتدی هستم .
نیازی نیست کد رو تغییر بدم ؟
آخه error میده :Invalid value for key 'attachdbfilename'.
وقتی قسمت connection آدرس دیتا بیس خودم رو هم مینویسم بازم error میده![]()
جناب nasimsltn7@gmail.com شما نام یا مسیر دیتابیس رو مشخص نکردید از کجا بدونه از چی بکاپ بگیره.
اگر دیتابیس اتچ هست به جای dbname نام دیتابیس رو بنویسید و اگر نیست مسیر فایل دیتابیس رو به جاش بنویسید.
سعی کنید برای اینکه به این مشکلات بر نخورید از توابع SMO استفاده کنید
خیلی راحت تر و قشنگ تر میشه هم بکاپ گرفت، هم Restore کرد
سلام من تو برنامم میخوام یه قسمت به عنوان بکاپ گیری داشته باشم لطفاً راهنماییم کنید چجوری؟
از این متد ها هم میتونید استفاده کنیدprivate void backup(string DestinationPath)
{
try
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection(@"Data Source=" + System.Environment.MachineName + @"\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Dat abase.mdf;Integrated Security=True;");
cmd.Connection.Open();
string dbname = cmd.Connection.Database;//'گرفتن نام کامل دیتابیس
cmd.Connection.Close();
SqlConnection.ClearAllPools();
string query = "USE [MASTER] BACKUP DATABASE [" + dbname + "] TO DISK =N'" + DestinationPath + ".bak" + "'";
cmd.Connection = new SqlConnection("Data Source=" + System.Environment.MachineName + @"\SQLEXPRESS;Integrated Security=True;");
cmd.Connection.Open();
cmd.CommandText = query;
cmd.ExecuteNonQuery();
cmd.Connection.Close();
MessageBox.Show("نسخه پشتیبان با موفقیت ایجاد شد");
}
catch (Exception ex)
{
MessageBox.Show("در تهیه نسخه پشتیبان حطایی رخ داده است\n" + ex.ToString());
}
}
private void Restore(string BackupPathForRestore)
{
try
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto ry|\\Database.mdf;Integrated Security=True;Connect Timeout=10");
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 = N'" + BackupPathForRestore + "';ALTER DATABASE [" + dbname + "] SET MULTI_USER ;";
cmd.Connection = new SqlConnection("Data Source=.\\sqlexpress;Integrated Security=True;Connect Timeout=30;");
cmd.Connection.Open();
cmd.CommandText = query;
cmd.ExecuteNonQuery();
cmd.Connection.Close();
MessageBox.Show("بازگردانی نسخه پشتیبان با موفقیت انجام شد");
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
آخرین ویرایش به وسیله Mahmoud.Afrad : پنج شنبه 07 فروردین 1393 در 19:31 عصر
سلام
از این کد استفاده کن :
ALTER DATABASE SandoghFamily SET SINGLE_USER with ROLLBACK IMMEDIAT use master; RESTORE DATABASE SandoghFamily FROM DISK='" + openFileDialog1.FileName + "' with REPLACE;");
سلام
من تو یک پروژه ای از دیتابیس sql express 2008 در C#.Net2010 استفاده کرده ام
و توسط کانکشن دستی که کانکشن استرین می سازم بهش وصل میشم و اطلاعات رو بر میدارم و ثبت می کنم
می خوام با استفاده از یک کلاس و یک دکمه از دیتابیسم بک آپ بگیرم و بعدا با یک دکمه ی دیگر بازیابی کنم
این امر محقق نمیشه چرا که دیتا بیس من اتچ نشده
من از یک سورس کلاس آماده که از سرویس smo استفاده می کرد استفاده کردم روی دیتابیس های اتچ شده جواب میده و از master بک آپ میکیره اما از دیتا بیس من چون اتچ نشده و در آدرس برنامه ی ساخته شده هست بک آپ نمیگیره
البته همونم ککه از مستر بک آپ می گرفت بازیابیش مشکل داشت
لطفا راهنمایی کنید و در صورت امکان یک سمپل آماده و ساده برای من آپلود کنید
با تشکر از اساتید
connectionString :
Connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\QuranDB.mdf;Integrated Security=True;User Instance=True");
CreateBackup:
public void CreateBackUp(string Path)
{
string Command = @"backup database [" + Application.StartupPath + @"\QuranDB.mdf] to disk='" + Path + "'";
CMD = new SqlCommand(Command, DAl.Connection);
DAl.Connect();
CMD.ExecuteNonQuery();
DAl.DisConnect();
}
Restore .bak File :
public void RestoreBackUp(string Path)
{
SqlConnection.ClearAllPools();
DAl.Connect();
string FirstCommand = @"USE master;ALTER DATABASE ["+Application.StartupPath+"\\QuranDB.mdf] SET OFFLINE WITH ROLLBACK IMMEDIATE";
CMD = new SqlCommand(FirstCommand, DAl.Connection);
CMD.ExecuteNonQuery();
string Command = @"restore database ["+Application.StartupPath+@"\QuranDB.mdf] from disk='" + Path + "'";
CMD = new SqlCommand(Command, DAl.Connection);
CMD.ExecuteNonQuery();
DAl.DisConnect();
}
حالشو ببر![]()
آقاي موسي سلام
اون دوستمون كه اين سوالو پرسيده فكر كنم تشكر يادش رفته
بنده تست نمودم .جواب داد بهم
كمال تشكر و قدر اني رو دارم از شما
سلام
دستتون درد نکنه
من واسه امتحانات کمی درگیرم زیاد سر نمیزدم
ممنون از پاسخ کاملتون
اما من یک دانشجوی مبتدیم
این کدها رو کجا بزارم ؟
متغییر هایی که تعریف کردین از چه نوعی هست ؟ DAl چیه ؟ دیتا اداپتر هستش ؟
فقط همین کدها کافیه ؟ کد دیگری نیاز نیست ؟
آیا یوزینگ خاصی نیاز هست یا نه ؟
اون کلاسی رو که (smo) دانلود کرده بودم هم بزارم تو پروژه ؟
باید منو ببخشید که انتظار دارم یکی لقمه رو برام بجوه و بزاره دهنم اما گفتم که این به خاطر مبتدی بودنمه
انشا الله کمی که پیشرفته تر شدم زکات اینها رو میدم و با همین صحه صدری که شما اساتید دارین و جواب ما رو میدین رفتار کنم
من به این شکل نوشتم ارور میده نمیدونم دیگ چی کار کنم
DAl رو از نوع SQLDataAdapter تعریف کردم اما Connect نداشت
با یک حول کوچولو تمومه به خدا
ممنون
از لینک زیر اگه دوست داشتی میتونی استفاده کنی
http://www.persiadevelopers.com/arti...ackup-zip.aspx
سلام دوستان خوبم
معذرت دیر جواب میدم
خوشحالم کارتون راه افتادبنده تست نمودم .جواب داد بهم
كمال تشكر و قدر اني رو دارم از شما
دوست عزیز معذرت که توضیحات کامل نبودDAl رو از نوع SQLDataAdapter تعریف کردم اما Connect نداشت
DAL در واقع مخفف DataAccessLayer هست که کلاسی رو با این نام تعریف کردم و اونجا با بانک ارتباط برقرار میکنم (در مورد برنامه نویسی سه لایه مطالعه کن)
هر جا که DAl.Connect یود و یا Disconnect شما به جای اون ارتباط با بانک رو Open و Close کن
توی کد شما نمونه ای که ساختید Connection نام داره پس Connection.Open(); و ...
نه دوست عزیز نیازی به کلاس های smo نداری
سوالی بود در خدمتم
موفق باشید
ممنون مشکلم حل شد
خیلی از ما متشکرم
من تقریبا یه چنین حالتی بر خورده بودم ، وقتی کاربر می خواست برنامه رو لاگین کنه قبل از لاگین منطقی(لود شدن فرم لاگین و هیچ عمل خاصی صورت نگرفته فقط فرمی لود شده) و قبل از باز شدن هیچ اتصالی رستور انجام شه...
برای بک آپ گرفتن هم ، این کار غیر منطقی هست که شما هنگامی که برنامه در حال اجراست بک آپ بگیری ، این کارو هم میتونی هنگام خروج از برنامه دقیقا وقتی اتصالات بسته شدند انجام بدی...
![]()
دوستان این تاپیکو ببینید
سلام دوستان
اونطور که از پست های قبلی متوجه شدم خیلی از دوستان دنبال کد بکاپ و ریستور پایگاه داده هستند که درست کار کنه و مشکلی نداشته باشه. و به این دلیل تصمیم گرفتم لینک دانلود کدی رو که خودم نوشتم و کاملا جواب داده براتون بزارم که شما دوستای عزیز هم بتونید استفاده کنید.
برای دانلود روی لینک زیر کلیک کنید
دانلود سورس backup و restore از دیتابیس sql با زبان سی شارپ
پسورد:www.papro.blogfa.com
میزنم ولی Error میده:
private void button1_Click(object sender, EventArgs e)
{
try
{
bool bBackUpStatus = true;
Cursor.Current = Cursors.WaitCursor;
if (Directory.Exists(@"d:\SQLBackup"))
{
if (File.Exists(@"d:\SQLBackup\dbafshari.bak"))
{
if (MessageBox.Show(@"??? ???????? ??????? ?????? ???????", "??????? ????? ??? ???", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
File.Delete(@"d:\SQLBackup\dbafshari.bak");
}
else
bBackUpStatus = false;
}
}
else
Directory.CreateDirectory(@"d:\SQLBackup");
if (bBackUpStatus)
{
//Connect to DB
SqlConnection connect;
string con = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\dbafshari.mdf;Integrated Security=True;User Instance=True";
connect = new SqlConnection(con);
connect.Open();
//-------------------------------ww.papro.blogfa.com--------------------------------
//Execute SQL------ww.papro.blogfa.com---------
SqlCommand command;
command = new SqlCommand(@"backup database dbafshari to disk ='d:\SQLBackup\dbafshari.bak' with init,stats=10", connect);
command.ExecuteNonQuery();
//---------------------------------ww.papro.blogfa.com-------------------------------------
connect.Close();
MessageBox.Show("انجام شد", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
بانک رو هم توسط SQL Express 2005 ساختم بعد DeAttach کردم بعد کد های بالا رو زدم بازم Error
مشکل این کد چیه؟
کانکشن استرینگتون مشکل داره احتمالا.
از عواقب کپی و پیست هستش.لطفا بررسی کنید
من کد رو یه کم تغییر دادم خطای بالا رو دیگه نمیده ولی یه خطای جدید میده(ExecuteNonQuery: Connection property has not been initialized)
bool bBackUpStatus = true;
Cursor.Current = Cursors.WaitCursor;
if (Directory.Exists(@"d:\SQLBackup"))
{
if (File.Exists(@"d:\SQLBackup\MelkAra_Db.bak"))
{
if (MessageBox.Show(@"??? ???????? ??????? ?????? ???????", "??????? ????? ??? ???", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
File.Delete(@"d:\SQLBackup\MelkAra_Db.bak");
}
else
bBackUpStatus = false;
}
}
else
Directory.CreateDirectory(@"d:\SQLBackup");
if (bBackUpStatus)
{
//Connect to DB
SqlConnection connect;
string con = "Data Source=.\\SQLEXPRESS; AttachDbFilename=" + Application.StartupPath + "\\MelkAra_Db.mdf; Integrated Security=True; Connect Timeout=30; User Instance=True";
//string con = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\MelkAra_Db.mdf;Integrated Security=True;User Instance=True";
connect = new SqlConnection(con);
connect.Open();
//-------------------------------ww.papro.blogfa.com--------------------------------
//Execute SQL------ww.papro.blogfa.com---------
SqlCommand command;
command = new SqlCommand(@"backup database [" + System.Windows.Forms.Application.StartupPath + "\\MelkAra_Db.mdf] to disk ='d:\\SQLBackup\\MelkAra_Db.bak' with init,stats=10");
//command = new SqlCommand(@"backup database MelkAra_Db to disk ='d:\SQLBackup\MelkAra_Db.bak' with init,stats=10", connect);
command.ExecuteNonQuery();
//---------------------------------ww.papro.blogfa.com-------------------------------------
connect.Close();
MessageBox.Show("??????? ???? ?? ?????? ????? ??", "??????? ???", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
اینم کدمه