نمایش نتایج 1 تا 8 از 8

نام تاپیک: قراردادن امکان پشتیبانگیری در نرم افزار

  1. #1

    قراردادن امکان پشتیبانگیری در نرم افزار

    سلام به همه دوستان
    من دارم یک نرم افزار می نویسم که می خوام توش امکان پشتیبانگیری از بانک اطلاعاتی رو بگذارم، اگه دوستان لطف کنند و من رو راهنمایی کنن که چجوری باید این کار رو انجام بدم ممنون میشم.

  2. #2
    کاربر دائمی آواتار mp_mp353
    تاریخ عضویت
    خرداد 1388
    محل زندگی
    خراسان رضوی شهرستان کاشمر
    سن
    34
    پست
    193

    نقل قول: قراردادن امکان پشتیبانگیری در نرم افزار

    سلام از چه پایگاه داده ای استفاده میکنید؟

  3. #3
    کاربر جدید
    تاریخ عضویت
    دی 1390
    محل زندگی
    ghazvin
    پست
    27

    نقل قول: قراردادن امکان پشتیبانگیری در نرم افزار


    private void Backupbutton_Click(object sender, EventArgs e)
    {
    try
    {
    SaveFileDialog saveFileDialog = new SaveFileDialog();
    saveFileDialog.AddExtension = true;
    saveFileDialog.CheckFileExists = false;
    saveFileDialog.CheckPathExists = true;
    saveFileDialog.OverwritePrompt = true;
    saveFileDialog.FileName = "Backup";
    saveFileDialog.Filter = "Backup File (*.Bak)|*.Bak";
    saveFileDialog.DefaultExt = "Bak";
    saveFileDialog.RestoreDirectory = true;
    //saveFileDialog.InitialDirectory = "D:\\";

    if (saveFileDialog.ShowDialog() == DialogResult.OK)
    {
    this.Cursor = Cursors.WaitCursor;

    Connection DBConnection = new Connection();
    DBConnection.ParamClear();
    DBConnection.CommandText(@"BACKUP DATABASE [school1] TO DISK = N'" + saveFileDialog.FileName + "' WITH NOFORMAT, NOINIT, NAME = N'accounting-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10");
    if (DBConnection.Connect())
    {
    if (DBConnection.ExecuteNonQuery())
    {
    FMessageBox.Show("عملیات تهیه پشتیبان با موفقیت به اتمام رسید", "تهیه پشتیبان", FMessageBoxButtons.OK, FMessageBoxIcons.Information);
    }
    else
    {
    FMessageBox.Show("عملیات تهیه پشتیبان انجام نگردید", "تهیه پشتیبان", FMessageBoxButtons.OK, FMessageBoxIcons.Information);
    }
    }
    else
    {
    FMessageBox.Show(DBConnection.Message, "تهیه پشتیبان", FMessageBoxButtons.OK, FMessageBoxIcons.Information);
    }

    DBConnection.Disconnect();

    this.Cursor = Cursors.Default;
    }
    }
    catch
    {
    FMessageBox.Show("عملیات تهیه پشتیبان با شکست مواجه شد . لطفاً مجدداً تلاش نمایید", "خطای پشتیبان گیری", FMessageBoxButtons.OK, FMessageBoxIcons.Error);
    }
    }


  4. #4
    کاربر جدید
    تاریخ عضویت
    دی 1390
    محل زندگی
    ghazvin
    پست
    27

    نقل قول: قراردادن امکان پشتیبانگیری در نرم افزار


    private void Restorebutton_Click(object sender, EventArgs e)
    {
    bool QueriesResult;

    openFileDialog1.Filter = "Back up (*.bak) |*.bak";
    try
    {
    if (openFileDialog1.ShowDialog() == DialogResult.OK)
    {
    this.Cursor = Cursors.WaitCursor;

    Connection DBConnection = new Connection();
    DBConnection.ParamClear();
    if (DBConnection.Connect())
    {
    DBConnection.CommandText("ALTER DATABASE [school1] SET OFFLINE WITH ROLLBACK IMMEDIATE");
    QueriesResult = DBConnection.ExecuteNonQuery();

    DBConnection.CommandText("ALTER DATABASE [school1] SET MULTI_USER");
    QueriesResult = QueriesResult && DBConnection.ExecuteNonQuery();

    DBConnection.CommandText("RESTORE DATABASE [school1] FROM DISK ='" + openFileDialog1.FileName + "' WITH RECOVERY,REPLACE");
    QueriesResult = QueriesResult && DBConnection.ExecuteNonQuery();

    if (QueriesResult)
    {
    FMessageBox.Show("عملیات به روزرسانی با موفقیت به اتمام رسید . لطفاً برای اعمال تغییرات مجدداً وارد برنامه شوید", "به روزرسانی پایگاه داده", FMessageBoxButtons.OK, FMessageBoxIcons.Information);
    }
    else
    {
    FMessageBox.Show("عملیات به روزرسانی پایگاه داده با شکست مواجه شد . لطفاً مجدداً تلاش نمایید", "خطای به روزرسانی", FMessageBoxButtons.OK, FMessageBoxIcons.Error);
    }
    }
    else
    {
    FMessageBox.Show(DBConnection.Message, "تهیه پشتیبان", FMessageBoxButtons.OK, FMessageBoxIcons.Information);
    }

    DBConnection.Disconnect();

    this.Cursor = Cursors.Default;
    }
    }
    catch
    {
    FMessageBox.Show("عملیات به روزرسانی پایگاه داده با شکست مواجه شد . لطفاً مجدداً تلاش نمایید", "خطای به روزرسانی", FMessageBoxButtons.OK, FMessageBoxIcons.Error);
    }
    }

  5. #5

    نقل قول: قراردادن امکان پشتیبانگیری در نرم افزار

    سلام
    من چون خودم خيلي درگير بكاپ و ري استور بودم، بالاخره تونستم اين كدها رو پيدا كنم، تو پروژه اي كه براي مشتري نصب كردم جواب ميده و درست كار ميكنه
    براي بكاپ يه دكمه بندازين تو فرمتون و اين كدها رو بنويسين توي بكاپ كاربر بعد از زدن يه دكمه، مسيري كه ميخواد فايلش اونجا ذخيره بشه رو انتخاب ميكنه و در واقع ذخيره ميكنه و عمل پشتيبان گيري انجام ميشه

    string strFileName = string.Empty;
    saveFileDialog1.DefaultExt = "BAK";
    saveFileDialog1.FileName = "BackupFile" + "hh";
    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)
    {
    string File = saveFileDialog1.FileName;
    Bakfile(File);
    }


    تابع Bakfile رو هم اينطوري بنويسين:

    private void Bakfile(string file)
    {
    try
    {
    string sql = @"BACKUP DATABASE Fix TO DISK='" + file + "'";
    this.Cursor = Cursors.WaitCursor;
    SqlCommand command = null;
    SqlConnection connection = null;
    connection = Connection.ConnectToFix();// من كانكشن استرينگم رو توي يه كلاس به اسم Connection انداختم. و تابع ConnectToFix رو نوشتم، شما تو اين خط ميتونين كانكشن استرينگتون رو مستقيما درج كنين
    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);
    }
    }


    ضمن اينكه توي فرمتون بايد يه saveFileDialog بندازين.
    مسلما بعد از گرفتن بكاپ، بايد بازيابي يا همون ري استور هم داشته باشين.
    اين كدها رو هم براي ري استور استفاده كنين.
    توي كد دكمه ي ري استور:

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

    }

    و اين هم تابع Restor

    private void Restore(string strFileName)
    {
    try
    {
    string sql = "ALTER DATABASE Fix SET SINGLE_USER with ROLLBACK IMMEDIATE " +
    "use master " +
    " RESTORE DATABASE Fix FROM DISK='" + strFileName + "'";
    this.Cursor = Cursors.WaitCursor;
    SqlCommand command = null;
    SqlConnection connection = null;
    connection = new SqlConnection("Data Source=.;Initial Catalog=Fix ;Integrated Security=True");
    if (connection.State != ConnectionState.Open)
    connection.Open();
    command = new SqlCommand(sql, connection);

    command.ExecuteNonQuery();
    this.Cursor = Cursors.Default;
    // MessageBox.Show("بازيابي با موفقيت انجام شد");

    this.Hide();
    }
    catch (Exception)
    {
    LblMsg.Text = "خطا در بازيابي بانك اطلاعاتي، دوباره سعي كنيد";
    }

    }


    بايد يه OpenFileDialog تو برنامه تون بندازين
    ضمن اينكه بايد دقت كنين، موقع انجام Restore كانكشن اصلي برنامه تون به ديتابيس رو باز نكرده باشين
    در واقع اولين كاري كه كاربر بعد از اجراي برنامه انجام ميده بايد ري استور ديتابيس باشه و وقتي ري استور رو انجام داد، بعدا بتونه مثلا لاگين كنه و ...

    موفق باشين.

  6. #6

    نقل قول: قراردادن امکان پشتیبانگیری در نرم افزار

    ممنون از دوستان به خاطر پاسخ هایی که دادند.
    یه سوال دیگه همدارم، توی بعضی نرم افزارها پشتیبانگیری روزانه هم داره، چه فرقی بین پشتیبانگیری روزانه و پشتیبانگیری کلی وجود داره؟

  7. #7

    نقل قول: قراردادن امکان پشتیبانگیری در نرم افزار

    نقل قول نوشته شده توسط mostafa8266 مشاهده تاپیک
    ممنون از دوستان به خاطر پاسخ هایی که دادند.
    یه سوال دیگه همدارم، توی بعضی نرم افزارها پشتیبانگیری روزانه هم داره، چه فرقی بین پشتیبانگیری روزانه و پشتیبانگیری کلی وجود داره؟
    تفاوتي نداره
    بهتره شما كلا موقع خروج از برنامه تون اين كنترل رو بذارين كه هر جايي و به هر طريقي كاربر خواست از برنامه بره بيرون، يه بكاپ گيري داشته باشه.
    توي بكاپ، شما از كل ديتابيس بكاپ ميگيرن، نه از جدول خاص يا ركورد خاصي، در نتيجه تا جايي كه من اطلاع دارم،‌ هر دوتاش يكيه.
    ضمن اينكه حواستون باشه حتما در مورد تخريب بانك اطلاعاتي يه بندي توي قراردادتون بذارين كه چون برنامه قابليت بكاپ و بازيابي داره و شما دارين اين رو به مشتري آموزش ميدين، در نتيجه اگه بنا به سهل انگاري مشتري به هر دليلي ديتابيسش از بين رفت و هيچ بكاپي نداشت، شما مسئوليتي نخواهيد داشت

    موفق باشين

  8. #8

    نقل قول: قراردادن امکان پشتیبانگیری در نرم افزار

    نقل قول نوشته شده توسط rana-writes مشاهده تاپیک
    سلام
    من چون خودم خيلي درگير بكاپ و ري استور بودم، بالاخره تونستم اين كدها رو پيدا كنم، تو پروژه اي كه براي مشتري نصب كردم جواب ميده و درست كار ميكنه
    براي بكاپ يه دكمه بندازين تو فرمتون و اين كدها رو بنويسين توي بكاپ كاربر بعد از زدن يه دكمه، مسيري كه ميخواد فايلش اونجا ذخيره بشه رو انتخاب ميكنه و در واقع ذخيره ميكنه و عمل پشتيبان گيري انجام ميشه

    string strFileName = string.Empty;
    saveFileDialog1.DefaultExt = "BAK";
    saveFileDialog1.FileName = "BackupFile" + "hh";
    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)
    {
    string File = saveFileDialog1.FileName;
    Bakfile(File);
    }


    تابع Bakfile رو هم اينطوري بنويسين:

    private void Bakfile(string file)
    {
    try
    {
    string sql = @"BACKUP DATABASE Fix TO DISK='" + file + "'";
    this.Cursor = Cursors.WaitCursor;
    SqlCommand command = null;
    SqlConnection connection = null;
    connection = Connection.ConnectToFix();// من كانكشن استرينگم رو توي يه كلاس به اسم Connection انداختم. و تابع ConnectToFix رو نوشتم، شما تو اين خط ميتونين كانكشن استرينگتون رو مستقيما درج كنين
    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);
    }
    }


    ضمن اينكه توي فرمتون بايد يه saveFileDialog بندازين.
    مسلما بعد از گرفتن بكاپ، بايد بازيابي يا همون ري استور هم داشته باشين.
    اين كدها رو هم براي ري استور استفاده كنين.
    توي كد دكمه ي ري استور:

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

    }

    و اين هم تابع Restor

    private void Restore(string strFileName)
    {
    try
    {
    string sql = "ALTER DATABASE Fix SET SINGLE_USER with ROLLBACK IMMEDIATE " +
    "use master " +
    " RESTORE DATABASE Fix FROM DISK='" + strFileName + "'";
    this.Cursor = Cursors.WaitCursor;
    SqlCommand command = null;
    SqlConnection connection = null;
    connection = new SqlConnection("Data Source=.;Initial Catalog=Fix ;Integrated Security=True");
    if (connection.State != ConnectionState.Open)
    connection.Open();
    command = new SqlCommand(sql, connection);

    command.ExecuteNonQuery();
    this.Cursor = Cursors.Default;
    // MessageBox.Show("بازيابي با موفقيت انجام شد");

    this.Hide();
    }
    catch (Exception)
    {
    LblMsg.Text = "خطا در بازيابي بانك اطلاعاتي، دوباره سعي كنيد";
    }

    }


    بايد يه OpenFileDialog تو برنامه تون بندازين
    ضمن اينكه بايد دقت كنين، موقع انجام Restore كانكشن اصلي برنامه تون به ديتابيس رو باز نكرده باشين
    در واقع اولين كاري كه كاربر بعد از اجراي برنامه انجام ميده بايد ري استور ديتابيس باشه و وقتي ري استور رو انجام داد، بعدا بتونه مثلا لاگين كنه و ...

    موفق باشين.
    سلام دوست عزیز.
    من از کد پشتیبانگیری شما در برنامم استفاده کردم ولی در هنگام اجرا و وقتی روی دکمه میزنم که پشتیبانگیری کنه این پیغامو میده ؟!!!


    ممنون میشم راهنمایی کنین؛ خیلی کارم سر همین بکاپ و ریستور گیر کرده!!

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •