PDA

View Full Version : بکاپ گیری



mahdivita
شنبه 13 دی 1393, 19:00 عصر
سلام
من کد های زیر رو برای بکاپ گیری و بازیابی نوشتم اما اروری که تو عکس میبینید رو میده
مشکل چیه؟؟
تو رو خدا زود راهنمایی کنید باید پروژه رو فردا تحویل بدم
ممنون
http://0up.ir/up10/guest/error_f5672.jpg


private void Button_Click_14(object sender, RoutedEventArgs e)
{
Microsoft.Win32.SaveFileDialog sfd = new Microsoft.Win32.SaveFileDialog();
string str_filename = string.Empty;
sfd.FileName = "backup_database_" + DateTime.Now.ToShortDateString().Replace("/", "_");
sfd.Filter = @"backup files(*.bak)|*.bak|all files(*.*)|*.*";
sfd.FilterIndex = 1;
sfd.OverwritePrompt = true;
sfd.Title = "***save backup files***";
if (sfd.ShowDialog() == true)
{
str_filename = sfd.FileName;
backup(str_filename);


}


}
private void backup(string str_filename)
{

try
{
this.Cursor = Cursors.Wait;

string command = @"BACKUP DATABASE real-etate to DISK='" + str_filename + "'";

SqlConnection con = new SqlConnection();
SqlCommand cmd = new SqlCommand();
con.ConnectionString = "data source=.;initial catalog=real-etate;integrated security=true";
if (con.State != ConnectionState.Open)
con.Open();

cmd.Connection = con;
cmd.CommandText = command;
cmd.ExecuteNonQuery();



this.Cursor = Cursors.Arrow;
MessageBox.Show("عملیات پشتیبان گیری موفقیت آمیز بود");





}
catch(Exception ex)
{
MessageBox.Show("عملیات پشتیبان گیری موفقیت آمیز نبود |" + ex.Message);
}






}
private void restore(string str_filename)
{
try
{
this.Cursor = Cursors.Wait;
string command = @"ALTER DATABASE real-etate SET SINGLE_USER with ROLLBACK IMMEDIATE "
+ " USE MASTER " +
" RESTORE DATABASE real-etate from DISK='" + str_filename + "' with REPLACE";

SqlConnection con = new SqlConnection();
SqlCommand cmd = new SqlCommand();
con.ConnectionString = "data source=.;initial catalog=real-etate;integrated security=true";
if (con.State != ConnectionState.Open)
con.Open();

cmd.Connection = con;
cmd.CommandText = command;
cmd.ExecuteNonQuery();


this.Cursor = Cursors.Arrow;
MessageBox.Show("عملیات بازیابی اطلاعات موفقیت آمیز بود");





}
catch (Exception ex)
{
MessageBox.Show("عملیات بازیابی اطلاعات موفقیت آمیز نبود|" + ex.Message);
}







}
private void Button_Click_4(object sender, RoutedEventArgs e)
{
Microsoft.Win32.OpenFileDialog sfd = new Microsoft.Win32.OpenFileDialog();
string str_filename = string.Empty;

sfd.Filter = @"backup files(*.bak)|*.bak|all files(*.*)|*.*";
sfd.FilterIndex = 1;

sfd.Title = "***open backup files***";

if (sfd.ShowDialog() == true)
{
str_filename = sfd.FileName;
restore(str_filename);


}
}

davidrobert
شنبه 13 دی 1393, 19:22 عصر
این کد ریستور و بکاپ هستش.
ولی ریستور و بکاب باید روی درایو غیر از درایو ویندوز باشه.
طریقه نوشتن و صدا کردن کد پیش هم هستش
پشتیبانگیری.
private string BackUpConString = @"Data Source=.\SQLEXPRESS;Initial Catalog=DBBSS;Integrated Security=True";//Connection String baraye Dastyabi be Data base Asli
private string ReStoreConString = @"Data Source=.\SQLEXPRESS;Initial Catalog=master;Integrated Security=True";//Connection String baraye dastresi be data base Master


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

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



//-------------------------------------------------------------
public void ReStorMyDB()
{
if (MessageBoxShow.Show("بازگردانی دیتابیس", "تمام داده دیتابیس تغییر میکنن!!! \n آیا موافق می باشید, انتخاب \"Yes\".", MessageBoxShow.Buttons.YesNo, MessageBoxShow.Icons.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 = "DBBSS";//Bayad ham nam ba Data base barname tanzim shavad
OpenFileDialog opfd = new OpenFileDialog();
opfd.Filter = "فایل پشتیبان گیری|*.bak";
opfd.Title = "بازگردانی دیتابیس";
if (opfd.ShowDialog() == DialogResult.OK)
{


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

rstDatabase.Devices.Add(bkpDevice);
rstDatabase.ReplaceDatabase = true;
progressBarX1.Visible = true;

progressBarX1.PerformStep();
progressBarX1.Value = 100;
progressBarX1.Text = "%" + progressBarX1.Value.ToString() + ": درصد بازگردانی";
rstDatabase.SqlRestore(srvr);
progressBarX1.Value = 0;
progressBarX1.Visible = false;
MessageBoxShow.Show("سرور", "بازگردانی دیتابیس موفق آمیز بود.", MessageBoxShow.Buttons.OK, MessageBoxShow.Icons.Information);
}
}
catch
{
MessageBoxShow.Show("خطا نرم افزاری", "خطا: در بازگردانی دیتابیس از درایوی ویندوز برای باز گردانی دیتابیس یا ساخت دیتابیس دیتابیس را غیر از درایو ویندوز انتخاب فرمائید.", MessageBoxShow.Buttons.OK, MessageBoxShow.Icons.Error);

}
}
}

}
}

public void BackUpMyDB()
{
System.Globalization.PersianCalendar pc = new System.Globalization.PersianCalendar();
string date = pc.GetYear(DateTime.Now) + "-" + pc.GetMonth(DateTime.Now) + "-" +
pc.GetDayOfMonth(DateTime.Now);
System.Globalization.PersianCalendar pcc = new System.Globalization.PersianCalendar();
DateTime tm = new DateTime();
tm = DateTime.Now;
string timenow = pcc.GetHour(tm).ToString() + "_" + pcc.GetMinute(tm).ToString() + "_" +
pcc.GetSecond(tm).ToString();


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 = "DBBSS"; //Bayad ham nam ba Data base barname tanzim shavad
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "فایل پشتیبان گییری|*.bak";
sfd.Title = "پشتیبان گیری";
sfd.FileName = "Backup_FileDataBase" + date + " " + timenow;
if (sfd.ShowDialog() == DialogResult.OK)
{
BackupDeviceItem bkpDevice = new BackupDeviceItem(sfd.FileName, DeviceType.File);
bkpDatabase.Devices.Add(bkpDevice);
progressBarX1.Visible = true;

progressBarX1.PerformStep();
progressBarX1.Value = 100;
progressBarX1.Text = "%" + progressBarX1.Value.ToString() + ": درصد پشتیبان گیری";
bkpDatabase.SqlBackup(srvr);
progressBarX1.Value = 0;
progressBarX1.Visible = false;
MessageBoxShow.Show("سرور", "پشتیبان گیری با موفقعیت به انجام رسید",
MessageBoxShow.Buttons.OK, MessageBoxShow.Icons.Information);

}
}
catch
{
MessageBoxShow.Show("پشتیبان گیری", "پشتیبان گیری از بانک اطلاعات باید دراویوی غیر از دراویو ویندوز انجام گیرد.", MessageBoxShow.Buttons.OK, MessageBoxShow.Icons.Error);


}
}
}
}
private void ذخیرهوپشتیبانگیریToolStripMenuIte m_Click(object sender, EventArgs e)
{
BackUpMyDB();
}
private void بازگردانیToolStripMenuItem_Click(object sender, EventArgs e)
{
ReStorMyDB();
}

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

mahdivita
شنبه 13 دی 1393, 19:28 عصر
شرمنده من دیتابیس رو express نکردم
اگه میشه کدی که خودم دادم رو بگید چی کنم تا درست بشه
تو wpf میخوام بزارم
ممنون :ناراحت:

davidrobert
شنبه 13 دی 1393, 19:43 عصر
خطا میگه نامی برای بکاپ شما هستش که هم نوع با فایل بکپ باشه پیدا نکرده.
این سورس با WPF هستش.ولی من با سی شارپ نوشتم این 2 تا با هم یه خورده فرق میکنن. میخواهید کد من رو امتحان کنید حتماً جواب میگیرید. این هم اموزشش.
http://uplod.ir/dj305bia0otl/Backup_Restore.7z.htm

mahdivita
شنبه 13 دی 1393, 19:51 عصر
دانلود نمیشه ارور میده

davidrobert
شنبه 13 دی 1393, 20:33 عصر
چی دانلود نمیشه این سورس که برات برای دانلود گذاشتم همون سورسی که خودم نوشتم هستش

mahdivita
شنبه 13 دی 1393, 22:41 عصر
خب عرض کردم من express نکردم
کد دیگه ندارید؟

erfan_urchin
یک شنبه 14 دی 1393, 01:31 صبح
سلام
من کد های زیر رو برای بکاپ گیری و بازیابی نوشتم اما اروری که تو عکس میبینید رو میده
مشکل چیه؟؟
تو رو خدا زود راهنمایی کنید باید پروژه رو فردا تحویل بدم
ممنون
سلام شما اسم backup رو عوض کن ببین درست نمیشه؟
مثلا اینجوری کن
private void MyBackup (string str_filename)
{
// codes
}
اگه درست نشد بیا private رو به static تغییر بده یعنی
static void MyBackup (string str_filename)
{
// codes
}
موفق باشی

mahdivita
یک شنبه 14 دی 1393, 02:23 صبح
آقا دمت گرم اوکی شد اما وقتی بکاپ رو میزنم و آدرس بهش میدم بعدش ارور زیر رو میده :
http://0up.ir/up10/guest/error_f6d39.jpg

erfan_urchin
یک شنبه 14 دی 1393, 23:42 عصر
آقا دمت گرم اوکی شد اما وقتی بکاپ رو میزنم و آدرس بهش میدم بعدش ارور زیر رو میده :
http://0up.ir/up10/guest/error_f6d39.jpg
احتمال داره مشکل از اسم دیتابیست باشه
آخه معمولا میگن تو اسم ها از خط تیره استفاده نکنید بجاش از آندرلاین استفاده کنید
شما بیا اسم دیتابیستو اینجوری کن ببین درست میشه؟؟ real_etate