# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > C#‎‎ >  مشکل در restore کردن دیتابیس

## alizi73

با سلام 

من از این کد برای restore کردن استفاده میکنم اما خطا  میده میشه بگید کجاش اشتباهه؟؟؟؟؟؟؟تو پشتیبان گیری مشکلی ندارم .

private void Restore(string strFileName)
{
try
{
string command = "ALTER DATABASE dbdormitory SET SINGLE_USER with ROLLBACK IMMEDIATE " + " use master " + " RESTORE DATABASE dbdormitory FROM DISK='" + strFileName + "'";
this.Cursor = Cursors.WaitCursor;
oConnection = new SqlConnection(pr.constr);
oConnection.Open();
oCommand = new SqlCommand(command, oConnection);
oCommand.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("باز یابی با موفقیت انجام شد");
}
catch (Exception ex)
{
MessageBox.Show("Error Occurd :" + ex.Message);
}
finally
{ oConnection.Close();
} 
اینه خطاش 
http://uupload.ir/files/y1to_errr.jpg

----------


## davidrobert

این خطا میگه مقدار صفر غیر قابل دریافت نمی باشد.
من کد ریستور و بازیابی دارم برای استفاده از اسکیور سرور که بانک رو بازیابی و بکاپ بگیرم.
http://uplod.ir/dj305bia0otl/Backup_Restore.7z.htm
این سورس و فیلم اموزشی چند ثانیه نگاه کن خیلی عالی هستش اگه دیتابیس با یابی شه در صورت وجود نداشتن اول دیتابیس ایجاد و بازگردانی میشود ولی برای بازگردانی و بکاپ گیری غیر از درایو سی ریستور و بکاپب بشه

----------


## alizi73

این فایلی که گفتی فیلمش با هیچ پلیری باز نمیشه و فایل برنامه هم خالیه.

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

----------


## davidrobert

دوست عزیز بفرمائید این سورس ریسور کردن من.
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 = "DBAPCS";//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
                        {
                            ClsShowMessageBoxError.Error(114, "", "");
                        }
                    }
                }

            }
        }
       private void بازگردانیToolStripMenuItem_Click(object sender, EventArgs e)
        {
            ReStorMyDB();
        }

این کامپوننت ها رو هم اضافه کن از اسکیول سرورت به رفرینس هاتون
12.png

----------


## asbabi

سلام. بنده اینجوری نوشتم هر وقت دلش خواست جواب میده!!!

 try
            {
                OpenFileDialog op = new OpenFileDialog();
                op.Filter = "|*.bak";
                DialogResult dr = op.ShowDialog();
                if (dr == DialogResult.OK)
                {
                    SqlConnection objConnection = new  SqlConnection("server=.; database=nameofdatabase; integrated  security=true");
                    objConnection.Open();
                    SqlCommand objCommand = new SqlCommand("ALTER  DATABASE nameofdatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE" +

                    " USE master; RESTORE DATABASE nameofdatabase FROM  DISK=N'" + op.FileName.ToString() + "' WITH RECOVERY, REPLACE",  objConnection);
                    int Successbackup = objCommand.ExecuteNonQuery();
                    for (int i = 0; i <= 100; i += 20) { progressBar1.Value = i; } 
                    if (Successbackup != 0)

                        MessageBox.Show("بازیابی اطلاعات انجام شد");
                    objCommand.CommandText = "ALTER DATABASE dbnmb SET Multi_User";
                    objCommand.ExecuteNonQuery();
                    objConnection.Close();
                    
                 }
            }
           
            catch { MessageBox.Show("خطا در بازیابی اطلاعات\n بازیابی اطلاعات انجام نشد"); }
فقط به جای nameofdatabase باید نام دیتابیس خودتونو بنویسین

----------


## dnldrbnd

با سلام 
دوست عزیز فقط کافیه شما به جای این کد در خط پنجم این کد را جایگذاری کنید  oCommand = new SqlCommand("use master", oConnection);


موفق و پیروز باشید .

----------

