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

## mnasrin

backup and restore در سی شارپ
در قسمت های مختلف دوستان توضیح دادهاند ولی هیچکدام کار نمی کند
لطفا یکی کمک کنه

----------


## amirjalili

این حتما کار میکنه.. همین الان خودم نوشتم و تستش کردم.


public void SqlRestorActions(string ConnectionString)
        {
            SqlConnection DBConnection = new SqlConnection(ConnectionString);
            SqlCommand DBCommand = new SqlCommand("RESTORE DATABASE DBNAME FROM  DISK = N'C:\\' WITH  FILE = 1,  NOUNLOAD,  STATS = 10", DBConnection);
      ;
            DBConnection.Open();
            DBCommand.ExecuteNonQuery();
            DBConnection.Close();
        }

        public void SqlBackupAction(string ConnectionString)
        {
            SqlConnection SC = new SqlConnection(ConnectionString);
            string sqltxt = "";
          
            sqltxt = @"BACKUP DATABASE DATABASENAME TO DISK ='C:\\TEST.bac' WITH REPLACE ";
            SqlCommand Command = new SqlCommand(sqltxt, SC);
            SC.Open();
            Command.ExecuteNonQuery();
            SC.Close();
        }



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

----------


## ehsan11

سلام
من وقتی می خوام backup گرفته شده رو restore کنم خطای زیر رو میده کسی میدونه علتش چیه 
Invalid zero-length device name. Reissue the BACKUP statement with a valid device name.
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master 		 		  		  		 		  		  		  		  	   	 		 

با تشکر

----------


## ehsan11

سلام
نه موقع backup گیری ارور نمیده و restore را با کد

  string command = "ALTER DATABASE Pubs SET SINGLE_USER with ROLLBACK
 IMMEDIATE " +
 "use master " +
 " RESTORE DATABASE Pubs FROM DISK='" + strFileName + "'";
 this.Cursor = Cursors.WaitCursor;
 SqlCommand oCommand = null;
 SqlConnection oConnection = null;
 oConnection = new SqlConnection("Data Source=.;Initial
 Catalog=Pubs;Integrated Security=True");
 if (oConnection.State != ConnectionState.Open)
 oConnection.Open();
 oCommand = new SqlCommand(Sqlcommand, oConnection);
 oCommand.ExecuteNonQuery();
 this.Cursor = Cursors.Default; 

نوشتم

خطا

Invalid zero-length device name. Reissue the BACKUP statement with a valid device name.
 RESTORE DATABASE is terminating abnormally.
 Changed database context to 'master 		 		  		  		 		  		  		  		  	   	 		 

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

با تشکر

----------


## slashslash2009

private void Restore(string strFileName)
        {
            try
            {
                //readfile();
                SqlConnection con = new SqlConnection();
                con.ConnectionString = "Data Source=.\\sqlexpress;Initial catalog=master;Integrated Security=true";
                //con.ConnectionString = "Data Source=.;Initial catalog=master;Integrated Security=true";
                SqlCommand cmd = new SqlCommand();
                con.Open();
                string query = "USE master RESTORE DATABASE [databasename] FROM DISK ='" + strFileName + "'WITH RECOVERY, REPLACE";
                cmd.CommandText = query;
                cmd.Connection = con;
                cmd.ExecuteNonQuery();
                con.Close();
                MessageBox.Show("بازیابی به درستی انجام شد\nدوباره وارد برنامه شوید");
                Application.Exit();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Error Occurd :" + ex.Message);
            }
        }

----------


## razavi_university

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


 Microsoft.SqlServer.Management.Smo.BackupDeviceIte  m bdi = new BackupDeviceItem(fileName+"DB-Back-" + DateTime.Now.ToString().Replace('/', '-').Replace(':','-'), DeviceType.File);

                            Backup bu = new Backup();
                            bu.Database = Paya.Properties.Settings.Default.DBName;
                            bu.Devices.Add(bdi);
                            bu.Initialize = true;

                            // add percent complete and complete event handlers
                            bu.PercentComplete += new PercentCompleteEventHandler(Backup_PercentComplete  );
                            bu.Complete += new ServerMessageEventHandler(Backup_Complete);

                            Microsoft.SqlServer.Management.Smo.Server server = new Server(Paya.Properties.Settings.Default.ServerName  );
                            bu.SqlBackup(server);



Server server = new Server(Paya.Properties.Settings.Default.ServerName  );

                        BackupDeviceItem bdi = new BackupDeviceItem(fileName, DeviceType.File);

                        Restore r = new Restore();

                        r.Database = Paya.Properties.Settings.Default.DBName;
                        r.ReplaceDatabase = true;
                        r.Devices.Add(bdi);

                        //add percent complete and complete event handlers
                        r.PercentComplete += new PercentCompleteEventHandler(Restore_PercentComplet  e);
                        r.Complete += new ServerMessageEventHandler(Restore_Complete);

                        r.SqlRestore(server);

----------


## ehsan11

سلام
هر بار نمی خوام backup بگیرم اما اگه من یه رکورد جدید به دیتا بیس اضافه کنم و backupبگیرم باید همون موقع بکاپ رو restore کنم در غیر این صورت اگه از برنامه خارج شدم و دوباره وارد شدم دیگه restore نمیکنه
و همون خطا رو میده

Invalid zero-length device name. Reissue the BACKUP statement with a valid device name.
 RESTORE DATABASE is terminating abnormally.
 Changed database context to 'master 		 		  		  		 		  		  		  		  	   	 		 

اصلا این خطا معنیش چیه ؟

----------


## ehsan11

سلام
ببخشید زیادی دارم اذیت میکنم
من موقع restore هیچ کاری انجام نمیدم فقط برنامه رو اجرا و بعدش restore ولی باز این خطا رو میده
این خطا معنیش چیه؟ بعدش  تنظیم خاصی تو sql نداره؟
ممنون میشم

----------


## sagad_13

با سلام
من توی سایت کلی جستجو کردم ولی متاسفانه مطالبی که در مورد بکاپ گیری از دیتابیس تو sqlexpress بود هیچ کدوم جوابگو نبود و هرکدوم یه پیغام خطایی می داد
از دوستان خواهش می کنم بکاپ گیری و ریستور رو به صورت کامل در sqlexpress آموزش بدن تا این موضوع تو این تاپیک حل بشه
(دیتابیسم فایل های mdf و ldf  هستش)
با تشکر

----------


## SMRAH1

سلام
بارها این سئوال مطرح شده و بار ها هم جواب داده شده و حتما کار می کنه که کسی ایرادی رو مطرح نکرده (یک نمونه رو خودم گذاشتم که الان در برنامه هام دارم استفاده می کنم و کار میکنه)!
حالا اگر «هرکدوم یه پیغام خطایی می داد» رو کامل توضیح بدی،میشه راهنمایی کرد که ایراد کار «شما» کجاست یا ایراد کد!
موفق باشید

----------


## sagad_13

salam dooste man
man harchi emtehan kardam javab nadad
shayad eirad tooye connection stringame
esme data basam dbase.mdf hastesh
mishe begi conectionesh chi bayad bashe
ba tashakkor

----------


## ASKaffash

> salam dooste man
> man harchi emtehan kardam javab nadad
> shayad eirad tooye connection stringame
> esme data basam dbase.mdf hastesh
> mishe begi conectionesh chi bayad bashe
> ba tashakkor


 سلام
اتفاقا محتوای ConnectionString مهم است ConnectionString شما چیست ؟

----------


## sagad_13

کانکشن من اینه


```
Data Source=.\\SQLEXPRESS;AttachDbFilename="+Application.StartupPath+"\\dbase.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True
```

----------


## ASKaffash

سلام
خودش است این ConnectionString نمی تواند ConnectionString را عوض کنید و از روش AttachDbFilename استفاده نکنید

----------


## sagad_13

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

----------


## ASKaffash

سلام
با این ConnectionString مشکل شما حل می شود :

"Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=" + DataBaseName + ";server=";

----------


## sagad_13

سلام
بازم نشد
پیغام زیر رو میده.
تو ضمیمه کدی هم که نوشتم مشخصه

----------


## ASKaffash

> سلام
> بازم نشد
> پیغام زیر رو میده.
> تو ضمیمه کدی هم که نوشتم مشخصه


سلام
باید DataBase شما به SQLExpress قبلا Attached شده باشد

----------


## sagad_13

سلام
کل برنامه ی من با اون کانکشن استرینگی که کد اتچ رو داره کار می کنه(یعنی بانک اتچ شده) درسته؟
فقط تو این قسمت بکاپ گیری من این کانکشن استرینگی که شما دادین رو گذاشتم که بازم کار نمی کنه و اون پیغام رو می ده.
اگه اتچ نیست لطفا بگین چطور اتچ بشه؟
ممنون

----------


## ASKaffash

سلام
خیر Attached نشده است با استفاده از Sp بنام Sp_Attached اولین بار باید اتصال صورت گیرد بعد بقیه مراحل...

----------


## sagad_13

سلام
میشه کامل بهم توضیح بدین
(در ضمن ممنونم که این مشکل منو پیگیری می کنین)

----------


## ASKaffash

سلام
باید این مراحل را طی کنید تا با ConnectionString اعلام شده بتوانید Backup بگیرید :
- در ابتدای برنامه یک ارتباط با بانک Master برقرار کنید اگر خطا دریافت شد که SQLExpress احتمالا ندارید
- اگر به یک شی درون بانک خودتان ارتباط برقرار نکردید باید SP_Attached را برای ارتباط با بانک ولی با ConnectionString به جدول master اجرا کنید
پس از این مرحله با ConnectionString اعلام شده Backup و Restore خواهید داشت
یک حسن دیگر هم این است که وقتی attached می کنید بدون Stop اس کیو ال نمی توان بلائی سر بانک آورد.

----------


## sagad_13

سلام
یکم برا من سخت فهمیدنش
اینکه گفتی مستر رو ارتباط بدم.از منوی tool گزینه ی connect to database  رو زدم و بانک رو نشونم داد(.\sqlexpress)
ولی بقیشو نفهمیدم
میشه مرحله ای برای یه نفر مبتدی توضیح بدی
ممنون

----------


## ASKaffash

سلام
نمی خواستم کد بذارم ولی مجبور شدم :

            string MyDataBase = "Test";
            string MyPathName = @"D:\Temp";
            string Master_CS = "Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=master;server=";
            string MyDB_CS = "Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=" + MyDataBase + ";server=";
            string MySP_Attached = @"EXEC sp_attach_db @dbname = N'" + MyDataBase + @"',@filename1 = N'" + MyPathName + @"\" + MyDataBase + @"_Data.MDF',@filename2 = N'" + MyPathName + @"\" + MyDataBase + @"_Log.LDF'";
            try
            {
                var C = new SqlConnection(Master_CS);
                C.Open();
                new SqlCommand(MySP_Attached, C).ExecuteNonQuery();
            }
            catch { }

اینطوری اگر بانک شما متصل نباشد متصل میشود این مثال 2000 قرار دادم شما از ConnectionString مربوط به SQLExpress استفاده کنید

----------


## sagad_13

سلام
واقعا خسته نباشید و ممنونم.
من این کد رو میزارم بعدشم دستورات بکاپ رو می نویسم ولی بازم جواب نمی ده
دیتابیس من تو مسیر استارت آپ نصب برنامس. آدرس هارو هم گذاشتم و لی بازم همون پیغام قبلی رو داد
دیگه از چی میتونه باشه؟

----------


## ASKaffash

سلام
پیام را قرار دهید چون من با همین روش اصلا مشکلی ندارم.
اینهم SP مربوط به Backup گیری :

CREATE Proc BacKUpApplication
@DBDrv VarChar(1000),
@DBStr  VarChar(200)
As
Declare @DBPath VarChar(1000),@DBBack VarChar(150)
Set @DBPath=@DBDrv+@DBStr+'_BackUp.Bak'
Set @DBBack=@DBStr+'_BackUp'
ExEc sp_addumpdevice 'disk',@DBBack,@DBPath
ExEc('BackUp DataBase '+@DBStr+' To '+@DBStr+'_BackUp')

----------


## sagad_13

سلام
این کدی که نوشتین که vb هستش
من با سی شارپ دارم می نویسم
شاید بخاطر اینه که نمیشه؟

----------


## ASKaffash

سلام
VB ؟ نه با #C است.

----------


## sagad_13

ببخشید اشتباه شد
الان به عنوان یه دستور sql فرستادمش
پارامترهاش هم یه جورایی تعریف کردم
ولی بازم پیغام میده که 
excute non query: connection property has not been instalize
میشه یه نمونه برنامه بنویسین(ممنون میشم چون دیگه داره خستم میکنه)

----------


## ASKaffash

سلام
اینطوری :

            try
            {
                string MyDB = "ForTesting";
                var C = new SqlConnection("Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=" + MyDB + ";server=");
                C.Open();
                new SqlCommand(@"BacKUpApplication 'D:\','" + MyDB + "'", C).ExecuteNonQuery();
            }
            catch { }

----------


## sagad_13

سلام
کدی که نوشتم اینه:

string MyDataBase = "dbase";
string MyPathName = Application.StartupPath;
string Master_CS = "Data Source=.\\sqlexpress;Integrated Security=True";
string MyDB_CS = "Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=" + MyDataBase + ";server=";
string MySP_Attached = @"EXEC sp_attach_db @dbname = N'" + MyDataBase + @"',@filename1 = N'" + MyPathName + @"\" + MyDataBase + @"_Data.MDF',@filename2 = N'" + MyPathName + @"\" + MyDataBase + @"_Log.LDF'";
try
{
var C = new SqlConnection(Master_CS);
C.Open();
new SqlCommand(MySP_Attached, C).ExecuteNonQuery();
C.Close();
}
catch 
{
MessageBox.Show("0");
}
try
{
string MyDB = "dbase";
var C = new SqlConnection("Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=" + MyDB + ";server=");
C.Open();
new SqlCommand(@"BacKUpApplication 'D:\','" + MyDB + "'", C).ExecuteNonQuery();
}
catch
{
MessageBox.Show("1");
}
الان بازم جواب نمیده و تو جفه catch ها میره
ایرادش چیه؟ :ناراحت:

----------


## ASKaffash

> سلام
> کدی که نوشتم اینه:
> 
> string MyDataBase = "dbase";
> string MyPathName = Application.StartupPath;
> string Master_CS = "Data Source=.\\sqlexpress;Integrated Security=True";
> string MyDB_CS = "Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=" + MyDataBase + ";server=";
> string MySP_Attached = @"EXEC sp_attach_db @dbname = N'" + MyDataBase + @"',@filename1 = N'" + MyPathName + @"\" + MyDataBase + @"_Data.MDF',@filename2 = N'" + MyPathName + @"\" + MyDataBase + @"_Log.LDF'";
> try
> ...


سلام
قسمت قرمز رنگ باید به بانک master اشاره کند
string Master_CS = "Data Source=.\\sqlexpress;Integrated Security=True";

string MyDB_CS = "Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=master;server=";
بار اول باید اجرا شود و هربار که بانک متصل نباشد نیز اجرا می شود

----------


## sagad_13

سلام
قسمت قرمز رنگ رو به این کد تغییر دادم


```
Data Source=.\sqlexpress;Initial Catalog=master;Integrated Security=True
```

ولی بازم نشد
قسمت سبز رنگ رو هم منظورتونو نفهمیدم که چجوری باید تغییرش بدم
بازم همون مشکل رو داره

----------


## sagad_13

سلام
فکر کنم دیگه خسته شدین
ولی هنوز این مشکل من حل نشده
میشه کمک کنید

----------


## ASKaffash

سلام
این مثال برای 2000 است برای 2005 باید این تغییر را ایجاد کنید:

string MySP_Attached = @"EXEC sp_attach_db @dbname = N'" + MyDataBase + @"',@filename1 = N'" + MyPathName + @"\" + MyDataBase + @"_Data.MDF',@filename2 = N'" + MyPathName + @"\" + MyDataBase + @"_Log.LDF'";

قسمتهای قرمز رنگ باید متناسب با فایل Data و Log شما تغییر کند
نام کامل Log و  Data شما چیست ؟

----------


## sagad_13

سلام
اسم دیتابیسمdbase.mdf و لاگ فایلش همdbase_log.ldf هستش
این کد هم الان جواب نداد.میشه بگید کجاش ایراد داره

string MyDataBase = "dbase";
string MyPathName = Application.StartupPath;

string MyDB_CS = "Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=" + MyDataBase + ";server=";
string MySP_Attached = @"EXEC sp_attach_db @dbname = N'" + MyDataBase + @"',@filename1 = N'" + MyPathName + @"\" + MyDataBase + @"_Data.MDF',@filename2 = N'" + MyPathName + @"\" + MyDataBase + @"_Log.LDF";
try
{
var C = new SqlConnection(MyDB_CS);
C.Open();
new SqlCommand(MySP_Attached, C).ExecuteNonQuery();
C.Close();
}
catch 
{
MessageBox.Show("0");
}
try
{
string MyDB = "dbase";
var C = new SqlConnection("Persist Security Info=False;Integrated Security=SSPI;Initial Catalog=" + MyDB + ";server=");
C.Open();
new SqlCommand(@"BacKUpApplication 'D:\','" + MyDB + "'", C).ExecuteNonQuery();
}
catch
{
MessageBox.Show("1");
}

----------


## ASKaffash

سلام
اگر Path شما صحیح باشد اینطوری است :

string MySP_Attached = @"EXEC sp_attach_db @dbname = N'" + MyDataBase + @"',@filename1 = N'" + MyPathName + @"\dbase.mdf',@filename2 = N'" + MyPathName + @"\dbase_log.ldf'";

----------


## sagad_13

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

----------


## ASKaffash

سلام
درون بلاک اول فقط اولین بار باید برود وباردوم به بعد به catch میرود  ولی در catch دوم نباید برود

----------


## sagad_13

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

----------


## طبیب دل

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

ALTER DATABASE SandoghFamily SET SINGLE_USER with ROLLBACK IMMEDIAT use master; RESTORE DATABASE SandoghFamily FROM DISK='" + openFileDialog1.FileName + "'");

ولی خطای زیر رو میده

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

چی کار کنم؟

----------


## طبیب دل

خواهش میکنم کمک کنید
مشکل حیاتیه

----------


## pooyasd

بک آپ دیگه ای رو امتحان کن این بک آپ ناقص و یا در حالاستفاده در جای دیگه ای  هست .
راستی بک آپو با چی میگیری.

----------


## طبیب دل

> بک آپ دیگه ای رو امتحان کن این بک آپ ناقص و یا در حالاستفاده در جای دیگه ای هست .
> راستی بک آپو با چی میگیری.


 کد بکاپ گیری

backup database SandoghFamily to disk='" + saveFileDialog1.FileName + "'"

----------


## csharpprogramer88

سلام به همه عزيزان 
يادآوري مهم : من ديتابيس خودم را در مسير bin\Debug  كپي كردم و از كانكشن استرينگ اون استفاده مي كنم .
من با كد زير از ديتابيسم back up گرفتم


if (DialogResult.Yes == MessageBox.Show("كليك كنيدوباپشتيباني نرم افزارتماس بگيريدno كليك كنيدازاطلاعاتي كه تاامروز تهيه كرديدنسخه پشتيبان تهيه ميگردددرصورتيكه ازاين دكمه اطلاعي نداريدرويyes اگرروي", "اخطار", MessageBoxButtons.YesNo))
            {
                MessageBox.Show("در ح?ن عمل?ات به چ?ز? دست نزن?د");
                if (!Directory.Exists("c:\\backup banketelaat"))
                {
                    Directory.CreateDirectory("c:\\backup banketelaat");
                }
                try
                {
                    con.Open();
                    string query = "BACKUP DATABASE master TO DISK = 'C:\\backup banketelaat\\ensani.MDF'";
                    SqlCommand cmd = new SqlCommand();
                    cmd.CommandText = query;
                    cmd.Connection = con;
                    cmd.ExecuteNonQuery();
                    con.Close();
                    MessageBox.Show("پشت?بان گ?ر? به درست? انجام شد");
                }
                catch
                {
                    MessageBox.Show("اشکال در ارتباط با بانک اطلاعات?");
                }
            }


كه بدون مشكل اجرا شده ولي با كد زير كه از سايت جستجو كردم restore مي كنم ارور مي ده 

con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector  y|\ensani.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
            try
            {
                con.Open();
                string s1 = "ALTER DATABASE ensani SET OFFLINE WITH ROLLBACK IMMEDIATE";
                string s2 = "ALTER DATABASE ensani SET MULTI_USER";
                string query = "RESTORE DATABASE ensani FROM DISK ='C:\\backup banketelaat\\ensani.MDF' WITH RECOVERY,REPLACE";
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = s1;
                cmd.Connection = con;
                cmd.ExecuteNonQuery();

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

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

                con.Close();
                MessageBox.Show("restor به درستی انجام شد");
            }
            catch
            {
                MessageBox.Show("اشکال در ارتباط با بانک اطلاعاتی");

            }


دوستان لطف كنن و پاك نكنن چون جستجو كردم واين كدها را از سايت گرفتم البته همين كد restor زماني كه در مسير خود sql وجود دارد يعني بانك را در مسير bin\Debug كپي نكردم بدون مشكل اجرا ميشود .
  ارور صادره :

----------


## M.YasPro

سلام
فایل بک اپ ساخته میشه ؟

----------


## csharpprogramer88

> سلام
> فایل بک اپ ساخته میشه ؟


سلام
تشكر كه جواب دادي
بله back up  بدون هيچ مشكلي اجرا ميشه ولي restor ارور ميده

----------


## M.YasPro

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

----------


## hojjatshariffam

فکر کنم کاربری که ساختی تو دیتابیست ، دسترسی به تغییر اساسی در DDL رو نداره

کاربرتو ادمین کن بعد یه بار دیگه امتحان کن

اگه جواب داد می تونی توسط دوستان متخصص DBMS یه نوع یوزر مجاز و خاص درست کنی که کارت راه بیوفته

----------


## csharpprogramer88

بله از يك كانكشن استرينگ استفاده مي كنم البته يوزر خاصي تعريف نكردم دوست من به اين نكته توجه كن كه در حالتي كه ديتابيس را اتچ و در مسير bin\Debug كپي نكرده بودم و از اس كيوال استفاده مي كردم مشكلي نداشت و درست اجرا ميشد

----------


## M.YasPro

con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename="+Application  .StartupPath+"\ensani.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")

----------


## csharpprogramer88

> con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename="+Application  .StartupPath+"\ensani.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")


دوست من كانكشن شمارا هم نوشتم نشد 

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

روي اين قسمت ارور بالارا صادر مي كنه

----------


## csharpprogramer88

دوستان تو را به خد ا بررسي كنيد

----------


## com_engineer_ab

> دوستان تو را به خد ا بررسي كنيد


backup:

        #region CreateBackup
        public static bool CreateBackup(string filename)
        {
            bool sign = false;
            string file = Path.GetFileName(filename);
            string backupDir = "";
            RegistryKey registry;
            try
            {
                registry = Registry.LocalMachine.OpenSubKey("SOFTWARE").OpenS  ubKey("Microsoft").OpenSubKey("Microsoft SQL Server").OpenSubKey("MSSQL.1").OpenSubKey("MSSQLSe  rver");
                backupDir = registry.GetValue("BackupDirectory").ToString();
            }
            catch (Exception ex)
            {
                Error = ex.Message;
                //throw new Exception(" .\n .", ex);
            }
            string dbName = GetDatabaseName();
            //server = GetDatabaseServer();
            try
            {
                IDbConnection connection = newSqlConnection(string.Format("Server={1};initial catalog={0};Integrated Security=SSPI", dbName, server));
                connection.Open();
                IDbCommand command = connection.CreateCommand();
                command.CommandText = "BACKUP DATABASE " + dbName + " TO DISK=N'" + file + "' WITH FORMAT";
                command.ExecuteNonQuery();
                File.Copy(backupDir + "\\" + file, filename, true);
                File.Delete(backupDir + "\\" + file);
                connection.Close();
                sign = true;
            }
            catch (Exception ex)
            {
                Error += ex.Message;
                sign = false;
            }
            //finally
            //{
            // try
            // { connection.Close(); }
            // catch (Exception ex) { }
            //}
            return sign;
        }
        #endregion





restore

        #region RestoreBackup
        public static bool RestoreBackup(string filename, string Database_Name)
        {
            bool sign = false;
            // server = ".\\SQLEXPRESS";
            string file = Path.GetFileName(filename);
            string backupDir = "";
            RegistryKey registry;
            try
            {
                registry = Registry.LocalMachine.OpenSubKey("SOFTWARE").OpenS  ubKey("Microsoft").OpenSubKey("Microsoft SQL Server").OpenSubKey("MSSQL.1").OpenSubKey("MSSQLSe  rver");
                backupDir = registry.GetValue("BackupDirectory").ToString();
            }
            catch (Exception ex)
            {
                Error = ex.Message;
                //throw new Exception(" .\n .", ex);
            }
            string dbName = GetDatabaseName();
            IDbConnection connection = newSqlConnection(string.Format("Server={1};initial catalog={0};Integrated Security=SSPI", dbName, server));
            connection.Open();
            IDbCommand command = connection.CreateCommand();
            string defaultDB = connection.Database;
            string tmpBackupFile = backupDir + "\\" + file;
            System.Data.IDbTransaction tran;
            try
            {
                //System.Data.SqlClient.SqlTransaction transaction;
                //tran = connection.BeginTransaction(IsolationLevel.ReadCom  mitted);
                //command.Transaction = tran;
                SqlCommand Cmd_Single = newSqlCommand();
                //Cmd_Single.Connection = con;
                string Cmd_Singletext = "ALTER DATABASE " + dbName + " SET SINGLE_USER with ROLLBACK IMMEDIATE";
                command.CommandText = Cmd_Singletext;
                command.ExecuteNonQuery();

                File.Copy(filename, tmpBackupFile, true);
                connection.ChangeDatabase("master");
                command.CommandText = "RESTORE DATABASE " + defaultDB + " FROM DISK=N'" + tmpBackupFile + "' WITH REPLACE";
                command.ExecuteNonQuery();
                connection.ChangeDatabase(defaultDB);
                File.Delete(tmpBackupFile);

                Cmd_Singletext = "ALTER DATABASE " + dbName + " SET MULTI_USER";
                command.CommandText = Cmd_Singletext;
                command.ExecuteNonQuery();
                sign = true;
                // tran.Commit();
            }
            catch (Exception ex)
            {
                Error = ex.Message;
                sign = false;
                // Attempt to roll back the transaction.
                try
                {
                    // tran.Rollback();
                }
                catch (Exception ex2)
                {
                    Error += ex2.Message;
                    // This catch block will handle any errors that may have occurred
                    // on the server that would cause the rollback to fail, such as
                    // a closed connection.
                    Console.WriteLine("Rollback Exception Type: {0}", ex2.GetType());
                    Console.WriteLine(" Message: {0}", ex2.Message);
                }
            }
            connection.Close();
            return sign;
        }
        #endregion

----------


## csharpprogramer88

برادر از كد شما هيچي نفهميدم لطفا اگر امكان داره مثل كد من تغييرش بديد با تشكر

----------


## com_engineer_ab

مثل کد شما تغییرش بدم؟؟؟؟؟؟
چطور؟؟

----------


## hojjatshariffam

بک آپ گیری ایشون که همون کد شماست ، فرقی نمی کنه ، فقط با در نظر گرفتن این که به تعداد افراد برنامه نویس روش کد نویسی وجود داره

این دوستمون اول از رجیستری آدرس محل دایکتوری بک آپ اس کیو سرور رو گیر آورده ، اونجا بک آپ گرفته و بعد کپی کرده به جایی که می خواد

رستورشو هنوز بررسی نکردم ، فردا یه نگا میندازم ، الان کار دارم

موفق باشی

----------


## csharpprogramer88

> بک آپ گیری ایشون که همون کد شماست ، فرقی نمی کنه ، فقط با در نظر گرفتن این که به تعداد افراد برنامه نویس روش کد نویسی وجود داره
> 
> این دوستمون اول از رجیستری آدرس محل دایکتوری بک آپ اس کیو سرور رو گیر آورده ، اونجا بک آپ گرفته و بعد کپی کرده به جایی که می خواد
> 
> رستورشو هنوز بررسی نکردم ، فردا یه نگا میندازم ، الان کار دارم
> 
> موفق باشی


دوست عزيز اگر امكان داره كمك كنيد چون جستجو هم مي كنم نمي تونم مشكل خودم را حل كنم

----------


## amirghazali

سلام به همه دوستان و اساتید محترم.
این کمپوننتی که من قرار داده ام حاصل تغییراتی است که در ماژول اصلی که از همین سایت گرفتم ، می باشد. برای بکاپ گرفتن و ریستور کردن دیتابیس ها بصورت Online و تحت شبکه با Sql Server 2008 جواب گرفتم .
تغییراتی که من به ماژول اولیه دادم این بودش که یه event بهش اضافه کردم که لحظه پایان فعالیت فایر می شود . همچنین با استفاده از ایجاد deletege ، روند پیش رفت کار را در یک فرم بصورت فراخوانی فرم با روال ShowDialog نمایش دادم که برای برنامه نویسهای حرفه ای قابل توجه می باشد . چون که نمی خواند در هنگام گرفتن بک آپ و یا ریستور کردن دیتابیس ، کاربر فعالیت دیگری انجام دهد.
یاد آور می شوم که تکنیک بکار رفته در این کمپوننت برای بکاپ گیری و .. استفاده از smo می باشد .
امیدوارم که به درد بخور باشه.
با تشکر

----------


## iman_me

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

----------


## amirghazali

با سلام به شما دوست عزیز.
دوست من شما یه نگاهی به کامپوننت من بکنید. متوجه می شوید که حتی در حالت Online نیز Restore انجام می شه!
همچنین تحت شبکه هم جواب می ده . به نقل قول از نویسنده اصلی این کامپوننت که گفتند " بیاد داشته باشید که مسیر Backup و یا فایل Restore درون کامپیوتری هستش که Sql Server  و دیتابیس روی اون نصبه"

----------


## csharpprogramer88

> با سلام به شما دوست عزیز.
> دوست من شما یه نگاهی به کامپوننت من بکنید. متوجه می شوید که حتی در حالت Online نیز Restore انجام می شه!
> همچنین تحت شبکه هم جواب می ده . به نقل قول از نویسنده اصلی این کامپوننت که گفتند " بیاد داشته باشید که مسیر Backup و یا فایل Restore درون کامپیوتری هستش که Sql Server  و دیتابیس روی اون نصبه"


دوست من كامپوننت شما را دانلود كردم ولي متاسفانه اجرا نمي شه و خطا مي گيره دوست عزيز من زياد وقت ندارم خواهشا به كد من در صفحه قبل نگاهي بياندازيد به اين نكته مهم هم توجه كنيد كه من  در حالتي كه ديتابيس را كنار فايل exe قرار نداده بودم و كانكشن استرينگ آن را نيز تغيير نداده بودم درست اجرا مي شد

----------


## navid1n2000

شما باید توی بازیابی به یک نکته اساسی توجه کنی اونم اینه که نباید به همون دیتابیسی وصل بشی که میخوای بازیابیش کنی 
من یک کد برات میذارم اگه کارایی که میگمو درست انجام بدی مطمنم درست کار می کنه :

            con = newSqlConnection("Data Source=اسم سرور;Initial Catalog=Security;Integrated Security=True");
            try
            {
                con.Open();
                string s1 = "ALTER DATABASE اسم دیتابیست  SET OFFLINE WITH ROLLBACK IMMEDIATE";
                string s2 = "ALTER DATABASE اسم دیتابیستSET MULTI_USER";
                string query = "RESTORE DATABASE اسم دیتابیست FROM DISK ='" + Masir + "' WITH RECOVERY,REPLACE";
                SqlCommand cmd = newSqlCommand();
                cmd.CommandText = s1;
                cmd.Connection = con;
                cmd.ExecuteNonQuery();
                cmd.CommandText = s2;
                cmd.Connection = con;
                cmd.ExecuteNonQuery();
                cmd.CommandText = query;
                cmd.Connection = con;
                cmd.ExecuteNonQuery();
                con.Close();
                MessageBox.Show("بازیابی با موفقیت انجام شد ");
            }
            catch
            {
                MessageBox.Show("اشکال در ارتباط با دیتابیس ");
            }

Masir : مسیر فایل پشتیبانت هست که می تونی از یک opendialogbox بگیریش
حله؟

----------


## csharpprogramer88

> شما باید توی بازیابی به یک نکته اساسی توجه کنی اونم اینه که نباید به همون دیتابیسی وصل بشی که میخوای بازیابیش کنی 
> من یک کد برات میذارم اگه کارایی که میگمو درست انجام بدی مطمنم درست کار می کنه :
> 
>             con = newSqlConnection("Data Source=اسم سرور;Initial Catalog=Security;Integrated Security=True");
>             try
>             {
>                 con.Open();
>                 string s1 = "ALTER DATABASE اسم دیتابیست  SET OFFLINE WITH ROLLBACK IMMEDIATE";
>                 string s2 = "ALTER DATABASE اسم دیتابیستSET MULTI_USER";
> ...


برادر من شما پست اول و بقيه پست هاي منو خونديد يا نه .  ايني كه برام فرستاديد زماني كه من ديتابيس را در مسير فايل exe قرار ندادم و  طبيعي است كه قبل از اينكه كانكشن استرينگ را تغيير بدم درست كار مي كنه ولي من در پست هاي قبل هم گفتم كه ديتابيس را در مسير فايل exe قرار دادم و كد اروري كه در پست يك فرستادم را مي ده
دوست عزيز در مورد اي بيشتر توضيح بده : 
شما باید توی بازیابی به یک نکته اساسی توجه کنی اونم اینه که نباید به همون دیتابیسی وصل بشی که میخوای بازیابیش کنی

----------


## navid1n2000

> دوست عزيز در مورد اي بيشتر توضيح بده : 
> شما باید توی بازیابی به یک نکته اساسی توجه کنی اونم اینه که نباید به همون دیتابیسی وصل بشی که میخوای بازیابیش کنی


 با یه مثال مشخصش می کنیم .
ببین این کانکشن استرینگ من برای کارهای معمولیه مثل درج در دیتابیس یا حذف :

"Data Source=NIK-23B9FE4055B\\NIK;Initial Catalog=VamDB;Integrated Security=True"

یعنی دیتابیسی که من باهاش کار می کنم VamDB
ولی وقتی میخوام این دیتابیسمو بازیابی کنم (restor) نباید از طریق همین کانکشن استرینگ وصل بشم بلکه :

"Data Source=NIK-23B9FE4055B\\NIK;Initial Catalog=Security;Integrated Security=True"

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

----------


## csharpprogramer88

> با یه مثال مشخصش می کنیم .
> ببین این کانکشن استرینگ من برای کارهای معمولیه مثل درج در دیتابیس یا حذف :
> 
> "Data Source=NIK-23B9FE4055B\\NIK;Initial Catalog=VamDB;Integrated Security=True";
> 
> یعنی دیتابیسی که من باهاش کار می کنم VamDB
> ولی وقتی میخوام این دیتابیسمو بازیابی کنم (restor) نباید از طریق همین کانکشن استرینگ وصل بشم بلکه :
> 
> "Data Source=NIK-23B9FE4055B\\NIK;Initial Catalog=Security;Integrated Security=True";
> ...


دوست من بازم همون ارور را مي ده

----------


## navid1n2000

چه اروری؟؟؟؟؟؟؟؟؟/
شاید توی sql server تو دیتابیس Security وجود نداشته باشه
عوضش کن
ارور رو بگو که چیه

----------


## csharpprogramer88

> چه اروری؟؟؟؟؟؟؟؟؟/
> شاید توی sql server تو دیتابیس Security وجود نداشته باشه
> عوضش کن
> ارور رو بگو که چیه


دوست من با اين پستي كه فرستاديد معلوم اصلا پست صفحه قبل منو نخونديد خواهشا يك نگاه به پست هاي صفحه قبل بياندازيد

----------


## amirghazali

با سلام. از تاخیری که داشتم شرمنده .
کد من را بصورت زیر استفاده کنید .(برای Restore کردن و backup مثل هم هستش)

            database = "نام دیتابیس خود";
            file_name = "مسیر فایل بک آپ گرفته شده";
            if (Sql_Management.ConnectToServer("اینجا باید کانکشن استرینگ را برگردونید"))
            {
                Sql_Management.RestoreDataBase(database, file_name);
                Sql_Management.Dicconnect();
            }

----------


## amirghazali

با سلام مجدد .
این SQL_Management نام شی ساخته شده هستش که باید از قسمت Toolbox اون را به فرم اضافه کنید . :اشتباه:

----------


## amirghazali

سلام . شرمنده . یک چیز دیگه یادم اومد .
اگه کد خطای زمان کمپایل میده ، توی لیست رفرنس ها ، فایلهای dll مربوط به SqlServr را از نو load کنید .

----------


## neda_dela

با سلام
من تا حالا برای بک آپ گرفتن از اطلاعاتم می رفتم به مسیر sql و دو تا فایل mdf و ldf رو کپی می کردم تو یه درایو دیگه 
حالا برای اینکه کاربر مجبور نباشه این مسیر رو طی کنه و بتونه از طریق همین برنامه به بک آپ گیری از اطلاعات دسترسی داشته باشه باید چکار کنم ؟ چه دستوری می تونه منو کمک کنه؟
ممنون :لبخند:

----------


## طبیب دل

> با سلام
> من تا حالا برای بک آپ گرفتن از اطلاعاتم می رفتم به مسیر sql و دو تا فایل mdf و ldf رو کپی می کردم تو یه درایو دیگه 
> حالا برای اینکه کاربر مجبور نباشه این مسیر رو طی کنه و بتونه از طریق همین برنامه به بک آپ گیری از اطلاعات دسترسی داشته باشه باید چکار کنم ؟ چه دستوری می تونه منو کمک کنه؟
> ممنون


 من با این دستور sql بکاپ میکیرم

backup database your databse name to disk="مسیر بکاپ"

----------


## sia_2007

وقتی فایل ها رو کپی میکردی سرویس SQL Service در حال اجرا بود ؟
و دیتابیس Attach شده بود ؟
در این صورت باید بگویم کپی و پیست گرفتن در اغلب موارد غیر ممکنه و خطالی File in Use میده.
و در مواردی هم که کپی میشه؛ فایل کپی شده کار نمیکنه.
اگه این طوری بود که شما میگفتی ؛ هر کسی میومد پشت سرور و بدون این که نیاز به Login خاصی داشته باشه ؛ کل دیتابیس ها رو میبرد.
البته من این رو تست نکردم؛ و شکر خدا دیتابیس رو با  TDE رمزنگاری میکنم.
شما یه تست کن ببین این به اصطلاح بک آپ ها کار هم میکنند.
ممنون میشم.

----------


## neda_dela

> سلام
> http://barnamenevis.org/forum/showpo...&postcount=317


 سلام دوست من
نمونه کدتون رو دیدم خیلی به دردم خورد ممنون
بک آپش کار می کنه و درسته. من برای مسیری که باید مشخص کنم درایو g و توی یه پوشه از قبل ساخته شده ، تعیین کردم
ولی ری استور درست کار نمی کنه خطای اشکال در ارتباط رو میده
البته مسیر ری استور رو هم همون درایو g و همون پوشه تعیین کردم 
این کارم درسته ؟
اصلا این بازیابی کی به درد می خوره؟
من اومدم برای امتحان بانک اصلی که توی مسیر sql هست رو پاک کردم تا بیام و با استفاده از دکمه بازیابی که توی برنامه گذاشتم بانکم رو از درایو g بازیابی کنم اما اصلا برنامه اجرا نمیشه که طبیعی هم هست 
حالا میخام بدونم اگه یه زمونی به هر دلیلی بانک اصلی پرید و برنامه اجرا نشد این گزینه بازیابی که اصلا به در نمی خوره

----------


## M.YasPro

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

موفق باشید .

----------


## neda_dela

> سلام
> بک اپش هم کار می کنه مشکلی نداره .
> بازیابی صرفا برای بازگشت دیتابیس حذف شده به درد نمی خوره . برای بازیافت بخشی از اطلاعات خیلی به درد میخوره (زمانی که کاربر به اشتباه مثلا یه مشتری رو از یه سیستم فروش حذف می کنه و شاید برنامه شما هم ازش بپرسه که آیا میخواهید تمام خرید های این مشتری رو هم پاک کنید و اون هم بله رو انتخاب می کنه . پس بک اپ به درد می خوره )
> برای بازیابی کل دیتابیس هم شما میتونید یه برنامه کوچیک ، جدا از برنامه اصلی داشته باشید که دیتابیس بسازه یا ریستور کنه . که در زمان نبودن دیتابیس هم بالا بیاد .
> من توی برنامه هام مسیر بک اپ رو در اختیار کاربر میزارم تا هر جا خواست ذخیره کنه .
> 
> موفق باشید .


 مرسی دوست من 
آره بک آپش برای منم کار می کنه . اما ری استور کار نمی کنه و خطای اشکال در ارتباط میده 
آره خیلی خوبه که کاربر خودش مسیر رو انتخاب کنه . می تونی بیشتر کمک کنی 
ممنون میشم

----------


## M.YasPro

من منظورم ری استور بود معذرت می خوام.



> آره خیلی خوبه که کاربر خودش مسیر رو انتخاب کنه . می تونی بیشتر کمک کنی


این کد رو نگاه کن . مسیر رو از کاربر می گیره 

            string strFileName = string.Empty;
            openFileDialog1.Filter = @"sql backup file (*.bak) | *.bak|all files (*.*) |*.*";
            openFileDialog1.FilterIndex = 1;
            openFileDialog1.Title = "استفاده از فایل پشتیبان";
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {
                if (MessageBox.Show("آیا میخواهید سیستم را بازیابی کنید؟", "حراست همگام", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                {
                    Application.DoEvents();
                    strFileName = openFileDialog1.FileName;
                    restore(strFileName);
                }
            }


متن ارور رو هم بزارید بهتر میشه اظهار نظر کرد .

----------


## neda_dela

> متن ارور رو هم بزارید بهتر میشه اظهار نظر کرد .


 همون پیغامی که توی کش گذاشته شده بود رو برای ارور نشون میده
"اشکال در ارتباط با بانک اطلاعاتی"
خیلی متشکرم از پیگیری شما :لبخند:

----------


## M.YasPro

try catch رو بردارید و متن ارور رو بزارید .

----------


## ali.ghodrati

سلام دوست عزیز.منم مشکل شما رو داشتم با استفاده از کد خودت ایرادهایی رو که داشت گرفتم و در اخر هم برام جواب داد.اینم کدش. موفق باشی
backup
 string command = @"BACKUP DATABASE [" + Application.StartupPath + "\\ensani.mdf] TO DISK = N'" + strFileName + "' WITH NOFORMAT, NOINIT,  NAME = N'accounting-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10";
                this.Cursor = Cursors.WaitCursor;
                SqlCommand oCommand = null;
                SqlConnection oConnection = null;

                string scnn = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector  y|\ensani.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
                oConnection = new SqlConnection(scnn);
                if (oConnection.State != ConnectionState.Open)
                    oConnection.Open();
                oCommand = new SqlCommand(command, oConnection);
                oCommand.ExecuteNonQuery();
                this.Cursor = Cursors.Default;
                oConnection.Close();



Restore
 SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector  y|\ensani.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
                con.Open();
                string s1 = "ALTER DATABASE [" + Application.StartupPath + "\\ensani.mdf] SET OFFLINE WITH ROLLBACK IMMEDIATE";
                string s2 = "ALTER DATABASE [" + Application.StartupPath + "\\ensani.mdf] SET MULTI_USER";
                string query = "RESTORE DATABASE [" + Application.StartupPath + "\\ensani.mdf] FROM DISK ='" + strFileName + "' WITH RECOVERY,REPLACE";
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = s1;
                cmd.Connection = con;
                cmd.ExecuteNonQuery();

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

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

                con.Close();

----------


## neda_dela

> try catch رو بردارید و متن ارور رو بزارید .


 اینم متن ارور:
Exclusive access could not be obtained because the database is in use.
RESTORE DATABASE is terminating abnormally.
Changed database context to 'master'.
کد دکمه پشتیبانی:

            SqlConnection con = new SqlConnection();
            con.ConnectionString = "Data Source=.;Initial Catalog=quran;Integrated Security=True";
            SqlCommand com = new SqlCommand();
            try
            {
                con.Open();
                string query = "BACKUP DATABASE quran TO DISK = 'g:\\bk\\Backup.MDF'";
                com.CommandText = query;
                com.Connection = con;
                com.ExecuteNonQuery();
                con.Close();
                MessageBox.Show("پ¬¢ی ںë گی©ی  ى §©«¢ی ںë¤ںê ¬§");
            }
            catch
            {
                MessageBox.Show("ں¬کںé §© ں©¢ ںل  ں  ںëک ںلéںمں¢ی");
            }

کد دکمه بازیابی:

            SqlConnection con = new SqlConnection();
            con.ConnectionString = "Data Source=.;Initial Catalog=quran;Integrated Security=True";
            SqlCommand com = new SqlCommand();
            con.Open();
            string query = "USE master RESTORE DATABASE [quran] FROM DISK = 'g:\\bk\\Backup.MDF'";
            com.CommandText = query;
            com.Connection = con;
            com.ExecuteNonQuery();
            con.Close();

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

----------


## M.YasPro

این رو امتحان کنید :

Alter Database YOURDB
  SET SINGLE_USER With ROLLBACK IMMEDIATE

 
  RESTORE DATABASE YOURDB
  FROM DISK = 'address'

----------


## neda_dela

> این رو امتحان کنید :
> 
> Alter Database YOURDB
>   SET SINGLE_USER With ROLLBACK IMMEDIATE
>  
>  
>   RESTORE DATABASE YOURDB
>   FROM DISK = 'address'


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

----------


## baharvand87

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

con = new SqlConnection();
con.ConnectionString = "Data Source=.\\SqlExpress; AttachDbFileName=" +
Application.StartupPath + \\otagdb.mdf;Integrated Security=True;
con.Open();
string query = "BACKUP DATABASE[ " + Application.StartupPath + "\\otagdb.mdf] TO DISK = 'D:\\aaa\\ot.MDF'";
 
SqlCommand cmd = new SqlCommand();
cmd.CommandText = query;
cmd.Connection = con;
cmd.ExecuteNonQuery();
con.Close();

این خطا رو میده یا میگه خطا نزذیک 'D' یا اینجور چیزی ممنون میشم کمک کنید البته بیشتر با سورسی که تو برنامه دیتا بیسم باشه. بدون دیتا بیس پیدا کردم ولی مشکلم حل نشد مرسی از کمکتون :خجالت: 

Could not locate entry in sysdatabases for database ' D:\myprogram\Visual Studio 2008\otagbazargani\New folder\otag\otag\bin\Debug\otagdb.mdf'. No entry found with that name. Make sure that the name is entered correctly.
BACKUP DATABASE is terminating abnormally.

----------


## r00tkit

سلام
توی کد زیر فقط اسم database نیاز هستش  مسیر  رو پاک کن یعنی Application.StartupPath

string query = "BACKUP DATABASE[ " + Application.StartupPath + "\\otagdb.mdf] TO DISK = 'D:\\aaa\\ot.MDF'";


مثال:

 BACKUP DATABASE mydatabase TO DISK = 'C:\Temp\TSQLFundamentals2008_Full.BAK' WITH INIT;

----------


## baharvand87

سلام هرکاری میکنم نمیشه راستی من سیستم عاملم 7 هست و درایوام ntfs با اینا مشکل نداره..

string query = "BACKUP DATABASE \\otagdb.mdf TO DISK = 'D:\\aaa\\ot.MDF'";
string query = "BACKUP DATABASE otagdb.mdf TO DISK = 'D:\\aaa\\ot.MDF'";

به ترتیب این خطاها رو میده لطفا کمکم کنید :لبخند: 

Incorrect syntax near '\'.
Incorrect syntax near '.'.

----------


## behnam25214

دوست عزیز این یک نمونه هست که درست هم کار میکنه.
BACKUP DATABASE [Book Lib] TO DISK = 'C:\\up.bak'
پسوند هم لازم نیست برای Book Lib نام پایگاه داده ات بزاری

----------


## r00tkit

> سلام هرکاری میکنم نمیشه راستی من سیستم عاملم 7 هست و درایوام ntfs با اینا مشکل نداره..
> 
> string query = "BACKUP DATABASE \\otagdb.mdf TO DISK = 'D:\\aaa\\ot.MDF'";
> string query = "BACKUP DATABASE otagdb.mdf TO DISK = 'D:\\aaa\\ot.MDF'";
> 
> به ترتیب این خطاها رو میده لطفا کمکم کنید
> 
> Incorrect syntax near '\'.
> Incorrect syntax near '.'.


ان چیزی که گفتم بنویس

----------


## baharvand87

واقعا مرسی ما که کارمون را افتاد اینم شاید یکی دیگه خاست

 string query = "BACKUP DATABASE otagdb TO DISK = 'D:\\aaa\\ot.MDF'";

----------


## دختر باران

سلام
دوست عزیز چرا من نمی تونم از این متد استفاده کنم؟!
 
Application.startup


Application رو که از منو انتخاب می کنم ،بعد از زدن نقطه startup رو نمایش نمی ده که انتخاب کنم!!

آیا فضای نام خاصی رو باید تعریف کنم؟
لطفآ راهنماییم می کنین؟ ممنونم

----------


## دختر باران

کسی از دوستان می تونه جواب این سئوال رو بگه که چرا بعد از دستور Application،متد startup برای من نمایش داده نمی شه؟!

کمک بزرگی بهم می کنین اگه این مشکل رو حل کنین :لبخند:

----------


## gerdioz

سلام
از یک برنامه نویس این اشتباهات بعیده
شما با یک دیتابیس مثلا 1 وارد شدید و از همون بک آپ گرفتید
اما شما با یک دیتابیس که وجود داره و با همون وارد شده اید چطور میشه بک آپ گرفت
اول باید اون دیتابیس وجود نداشته باشه
دوم شما هنگام بک آپ گیری سعی کنید با دیتابیسی مثل master وارد شوید

----------


## حجتی نیا

جناب csharpprogramer88  :
اول باید بگم منم داره از همین کد استفاده میکنم و داره جواب میده .. بر طبق عکس که گذاشتم کدتون در  ناحیه 1و2 ایراد داره : 
1) از این کد بجاش استفاده کنین   
[" + Application.StartupPath + "\\*database-name*.mdf]2) شما باید از فایل با پسوند bak. عمل رستور رو انجام بدین نه از mdf.  در اینجا باید آدرس فایل بکاپ رو بهش بدین که میتونین از یه openFileDialog استفاده کنین مثه این :
FROM DISK ='" + openFileDialog_restore.FileName + "' WITH RECOVERY,REPLACE"درضمن در کد بکاپ هم مشکل وجود داره و اینه که باید فایل بکاپ با پسوند bak. بنویسین و نه mdf. مثه این :
@"BACKUP DATABASE [" + Application.StartupPath + "\\*database-name*.mdf] TO DISK = N'"+saveFileDialog_backup.FileName+"'  WITH FORMAT, INIT,  NAME = N'accounting-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10"; من واسه آدرس ذخیره فایل از یه saveFileDialog استفاده کردم.
این تغییرات واسه زمانیه که فایل دیتابیس (mdf.)در پوشه برنامه bin>debug در قرار داره

----------


## hojjatshariffam

آخرش یکی نشد این مشکل ما رو حل کنه
این کد واسه بک آپ گیری جواب میده :

BACKUP DATABASE [SampleDataBase] 
TO  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\BackUp\FullBackUp  .bak' 
WITH NOFORMAT, NOINIT,  NAME = N'Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
ولی این کد ارور میده:

BACKUP DATABASE [SampleDataBase] 
TO  DISK = N'D:\FullBackUp.bak' 
WITH NOFORMAT, NOINIT,  NAME = N'Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
اینم ارورشه:

Cannot open backup device 'D:\FullBackUp.bak'. 
Operating system error 5(failed to retrieve text for this error. Reason: 1815).
Msg 3013, Level 16, State 1, Line 1
BACKUP DATABASE is terminating abnormally.

واقعا دیگه کلافم کرده

----------


## حجتی نیا

> آخرش یکی نشد این مشکل ما رو حل کنه


در دستور بکاپ اینارو وارد(بولد شده) کنید :  

WITH FORMAT, INIT,  NAME = N'accounting-Full Database Backup'

اشالله درست میشه..

----------


## hojjatshariffam

> در دستور بکاپ اینارو وارد(بولد شده) کنید :  
> 
> WITH FORMAT, INIT,  NAME = N'accounting-Full Database Backup'
> 
> اشالله درست میشه..


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

----------


## Babak-Magic

سلام من این کد را برای backup گیری نوشتم ولی عمل نمیکنه مشکلش کجاست؟

SaveFileDialog sv = new SaveFileDialog();
if (sv.ShowDialog() == DialogResult.OK)
{
string location = string.Empty;
location = sv.FileName;
con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector  y|\mydbajance.mdf;Integrated Security=True;User Instance=True";
con.Open();
SqlCommand cmd = new SqlCommand();
string gr = "backup database database1 to disk='" + location + "'";
cmd.Connection = con;
cmd.CommandText = gr;
cmd.ExecuteNonQuery();
con.Close();}

----------


## mehrsa_fr

SqlCommand cmd = new SqlCommand("backup database [" + DataBase Name + "] to disk=@path with format", con);
cmd.Parameters.AddWithValue("@path", saveFileDialog1.FileName);

اینا رو بجای string gr جایگزاری کن ببین درست میشه

----------


## Babak-Magic

Could not locate entry in sysdatabases for database 'mydbajance'. No entry found with that name. Make sure that the name is entered correctly.
BACKUP DATABASE is terminating abnormally.
اینم ارورش انگار دیتابیس رو پیدا نمیکنه

----------


## neda_dela

سلام
من این کد رو گذاشتم و جواب هم گرفتم:

            if (MessageBox.Show("آیا می خواهید از بانک اطلاعاتی پشتیبان گیری نمایید؟", "حراست همگام", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                string strFileName = string.Empty;
                saveFileDialog1.Filter = @"sql backup file (*.bak) | *.bak|all files (*.*) |*.*";
                saveFileDialog1.FilterIndex = 1;
                saveFileDialog1.Title = "ذخیره ساری فایل پشتیبان";
                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    Application.DoEvents();
                    strFileName = saveFileDialog1.FileName;
                    SqlConnection con = newSqlConnection();
                    con.ConnectionString = "Data Source=.;Initial Catalog=quran;Integrated Security=True";
                    SqlCommand com = newSqlCommand();
                    try
                    {
                        con.Open();
                        string query = "BACKUP DATABASE quran TO DISK = '" + strFileName + "'";
                        com.CommandText = query;
                        com.Connection = con;
                        com.ExecuteNonQuery();
                        con.Close();
                        MessageBox.Show("پشتیبان گیری به درستی انجام شد");
                    }
                    catch
                    {
                        MessageBox.Show("اشکال در ارتباط با بانک اطلاعاتی");
                    }
                }
            }

----------


## ahrimaneahurai

این برنامه رو دانلود کن
http://www.4shared.com/file/xudslTvo/SQL_Backup.html

----------


## Babak-Magic

Could not locate entry in sysdatabases for database 'mydbajance'. No entry found with that name. Make sure that the name is entered correctly.
BACKUP DATABASE is terminating abnormally
دوستان من هر كار ميكنم باز اين ارورو ميده

----------


## حجتی نیا

if (saveFileDialog_backup.ShowDialog() == DialogResult.OK)
            {
                string command = @"BACKUP DATABASE [" + Application.StartupPath + "\\sodour.mdf] TO DISK = N'"+saveFileDialog_backup.FileName+"'  WITH FORMAT, INIT,  NAME = N'accounting-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10";
                this.Cursor = Cursors.WaitCursor;
                SqlCommand oCommand = null;
                if (objconnection.State != ConnectionState.Open)
                    objconnection.Open();
                oCommand = new SqlCommand(command, objconnection);
                oCommand.ExecuteNonQuery();
                this.Cursor = Cursors.Default;
                objconnection.Close();
                FarsiMessageBox.FMessageBox.Show("فابل پشتیبان ذخیره شد", "", FarsiMessageBox.FMessageBoxIcons.Information, 2000);
                oCommand.Dispose();
            }
این کد رو داره استفاده میکنم،یه تستی بکن (دیتابیس من تو پوشه برنامم هست بخاطر همین از  Application.StartupPath استفاده کردم)
البته کد شما اشکالی نداره فقط یه سوال : نام دیتابیس شما mydbajance اینه ولی در دستور بکاپ از نام database1 استفاده کردین،چجوریاست؟؟ :متفکر:

----------


## csharpprogramer88

توي پروفايلم بگرديد يه چيزهايي پيداميشه

----------


## Babak-Magic

ممنون حالا كاراي شما هم تست مي كنم اون Database1 هم واسه اينه كه يه ديبي ديگه هم ادد كردم كه تست كنم يادم رفته بود درست كنم اخه خيلي عجيبه در ظاهر همه چيز درسته ولي كار نميكنه

----------


## zayens

من کلی جستجو کردم و کدهای زیر دستگیرم شد پس لطفا از نمونه کدهای مسخره ی زیر استفاده نکنین چون هیچ کدوم به دردم نخورد.
در واقع همه ی اینها(به غیر از آخری) برای بکاپ گیری از دیتابیسی است که به sql Server اتچ شده نه به پروژه ی خودمون

query = "BACKUP DATABASE dbName TO DISK = N'E:\\aa.bak' WITH NOFORMAT, NOINIT, NAME = N'cc', SKIP, NOREWIND, NOUNLOAD, STATS = 10";



یا

query = "BACKUP DATABASE 'C:\\dbName.MDF' TO DISK = N'E:\\dd.bak' WITH NOFORMAT, NOINIT, NAME = N'cc', SKIP, NOREWIND, NOUNLOAD, STATS = 10";


یا

"BACKUP DATABASE X TO DISK ='" + save_back_up + "'";


یا

"BACKUP DATABASE [C:\\dbName.MDF] TO DISK = N'E:\\backup_db.BAK'";



*تا این که کد مورد نظر را پیدا کردم که برای بکاپ گیری از دیتابیس Attach شده به برنامه استفاده میشه*

cmd.CommandText = @"ALTER DATABASE [C:\Users\zayens\Documents\Visual Studio 2008\Projects\RESTORANS\RESTORANS\bin\Debug\DBREST  ORANS.MDF] SET read_write";

کد بالا 100% کار میکنه. اما حالا سوال اینجاست که وقتی برنامه را در سیستم مقصد نصب میکنم آدرس ها (.......C:\Users\zayens\Documents) عوض میشه و قطعا کار نمیکنه
به جای آدرس بالا کسی روشی سراغ داره؟
ممنون

----------


## حجتی نیا

> پس لطفا از نمونه کدهای مسخره ی زیر استفاده نکنین چون هیچ کدوم به دردم نخورد.


تو برنامه شما کارنکرده دلیل بر مسخره بودن اونا نمیشه...
این کد رو داره استفاده میکنم،با اکسپرس هم کار میکنه، دیتابیس هم به برنامه اتچ شده و در bin>debug برنامه قرار داره : (درواقع اصلاح شده کد دومی که گذاشتید با فرمت بکاپ قبلی)
 if (saveFileDialog_backup.ShowDialog() == DialogResult.OK)
            {
                string command = @"BACKUP DATABASE [" + Application.StartupPath + "\\sodour.mdf] TO DISK = N'"+saveFileDialog_backup.FileName+"'  WITH FORMAT, INIT,  NAME = N'accounting-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10";
                this.Cursor = Cursors.WaitCursor;
                SqlCommand oCommand = null;
                if (objconnection.State != ConnectionState.Open)
                    objconnection.Open();
                oCommand = new SqlCommand(command, objconnection);
                oCommand.ExecuteNonQuery();
                this.Cursor = Cursors.Default;
                objconnection.Close();
                FarsiMessageBox.FMessageBox.Show("فابل پشتیبان ذخیره شد", "", FarsiMessageBox.FMessageBoxIcons.Information, 2000);
                oCommand.Dispose();
            }
اینم رستورش که کار هم میکنه :
  objconnection.Open();
            if (openFileDialog_restore.ShowDialog() == DialogResult.OK)
                if (openFileDialog_restore.FileName.EndsWith(".bak") == true)
                {
                                       string s1 = "ALTER DATABASE [" + Application.StartupPath + "\\sodour.mdf] SET OFFLINE WITH ROLLBACK IMMEDIATE";
                    string s2 = "ALTER DATABASE [" + Application.StartupPath + "\\sodour.mdf] SET MULTI_USER";
                    string query = "RESTORE DATABASE [" + Application.StartupPath + "\\sodour.mdf] FROM DISK ='" + openFileDialog_restore.FileName + "' WITH RECOVERY,REPLACE";
                    SqlCommand cmd = new SqlCommand();
                    cmd.CommandText = s1;
                    cmd.Connection = objconnection;
                    cmd.ExecuteNonQuery();

                    cmd.CommandText = s2;
                    cmd.Connection = objconnection;
                    cmd.ExecuteNonQuery();

                    cmd.CommandText = query;
                    cmd.Connection = objconnection;
                    cmd.ExecuteNonQuery();

                    cmd.Dispose();
                                       Application.Restart();
                }
                else
                    FarsiMessageBox.FMessageBox.Show("فایل با پسوند .bak انتخاب کنید", "خطا", FarsiMessageBox.FMessageBoxButtons.OK, FarsiMessageBox.FMessageBoxIcons.Error, FarsiMessageBox.FMessageBoxDefaultButtons.Button3)  ;
هردو رو در سیستمی که برنامه توش نصبه تست کردم  و کار میکنه...

----------


## zayens

اولین کدتون را امتحان کردم
البته کد زیر را هم بهش اضافه کردم

objconnection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector  y|\DBRESTORANS.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;");

بعد از دادن آدرس مورد نظر و نام دلخواه یه فایل بکاپ ایجاد میشه
اما یه مشکلاتی داره
1- هیچ پسوندی نداره(که البته نمیدونم باید داشته باشه یا نه)
2- بعد از ایجاد بکاپ برنامه ارور میده
ارور زیر را داد
Invalid column name 'is_compressed'.
Invalid column name 'compressed_backup_size'.
Could not insert a backup or restore history/detai
l record in the msdb database. This may
 indicate a problem with the msdb database. 
The backup/restore operation was still successful.
Processed 272 pages for database
 'C:\Users\zayens\Documents\Visual Studio 2008\Projects\RESTORANS\RESTORANS\bin\Debug
\DBRESTORANS.mdf', file 'RESTAURANT' on file 1.
Processed 1 pages for database
 'C:\Users\zayens\Documents\Visual Studio 2008\Projects\RESTORANS\RESTORANS\bin\Debug\
DBRESTORANS.mdf', file 'RESTAURANT_log' on file 1.
BACKUP DATABASE successfully processed
 273 pages in 0.236 seconds (9.037 MB/sec).

----------


## حجتی نیا

> 1- هیچ پسوندی نداره(که البته نمیدونم باید داشته باشه یا نه)


باید داشته باشه،پسوندش توسط savefileDialog انتخاب میشه(عکس)
خطای دوم احتمالا واسه همینه،تست کنین..

----------


## zayens

> باید داشته باشه،پسوندش توسط savefileDialog انتخاب میشه(عکس)
> خطای دوم احتمالا واسه همینه،تست کنین..


پسوند درست شد ولی خطا همچنان باقی است
این کد منه ببینید آیا مشکلی توش هست؟

        private void btnSaveBakup_Click(object sender, EventArgs e)
        {
            objconnection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector  y|\DBRESTORANS.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;");
            if (saveFileDialog_backup.ShowDialog() == DialogResult.OK)
            {
                string command = "BACKUP DATABASE [" + Application.StartupPath + "\\DBRESTORANS.mdf] TO DISK = N'" + saveFileDialog_backup.FileName + "' WITH FORMAT, INIT";
                this.Cursor = Cursors.WaitCursor;
                SqlCommand oCommand = null;
                if (objconnection.State == ConnectionState.Closed)
                    objconnection.Open();
                oCommand = new SqlCommand(command, objconnection);
                oCommand.ExecuteNonQuery();
                this.Cursor = Cursors.Default;
                objconnection.Close();
                oCommand.Dispose();
            }
        }

----------


## zayens

این هم کد دکمه ی restore

        private void btnRestore_Click_1(object sender, EventArgs e)
        {
            objconnection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector  y|\DBRESTORANS.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True;");
            objconnection.Open();
            if (openFileDialog_restore.ShowDialog() == DialogResult.OK)
                if (openFileDialog_restore.FileName.EndsWith(".bak") == true)
                {
                    string s1 = "ALTER DATABASE [" + Application.StartupPath + "\\DBRESTORANS.mdf] SET OFFLINE WITH ROLLBACK IMMEDIATE";
                    string s2 = "ALTER DATABASE [" + Application.StartupPath + "\\DBRESTORANS.mdf] SET MULTI_USER";
                    string query = "RESTORE DATABASE [" + Application.StartupPath + "\\DBRESTORANS.mdf] FROM DISK ='" + openFileDialog_restore.FileName + "' WITH RECOVERY,REPLACE";
                    SqlCommand cmd = new SqlCommand();
                    cmd.CommandText = s1;
                    cmd.Connection = objconnection;
                    cmd.ExecuteNonQuery();
                    cmd.CommandText = s2;
                    cmd.Connection = objconnection;
                    cmd.ExecuteNonQuery();
                    cmd.CommandText = query;
                    cmd.Connection = objconnection;
                    cmd.ExecuteNonQuery();
                    cmd.Dispose();
                    Application.Restart();
                }
                else
                    MessageBox.Show(" \n ");

        }

این کد هم در قسمت ;()cmd.ExecuteNonQuery اروری مثل ارور قبل را میده:

*ERROR*
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.
Processed 272 pages for database
 'C:\Users\zayens\Documents\Visual Studio 2008
\Projects\RESTORANS\RESTORANS\bin\Debug\
DBRESTORANS.mdf', file 'RESTAURANT' on file 1.
Processed 1 pages for database
 'C:\Users\zayens\Documents\Visual Studio 2008
\Projects\RESTORANS\RESTORANS\bin\Debug
\DBRESTORANS.mdf', file 'RESTAURANT_log' on file 1.
RESTORE DATABASE successfully processed
 273 pages in 0.248 seconds (8.600 MB/sec)

----------


## حجتی نیا

> این کد منه ببینید آیا مشکلی توش هست؟


درقسمت بکاپ، دستور اونو کامل بنویس همونجوری من نوشتم...

----------


## zayens

دستور را عین مال شما کردم
بازم ارور فرقی نکرد
کلمات زیر را در گوگل سرچ کردم
Invalid column name 'is_compressed'.
Invalid column name 'compressed_backup_size'
تو بعضی سایتهای خارجی گفته بودن بدلیل ورژن دیتابیس هست.
من از sqlExpress2008 استفاده میکنم. 
چون دیتابیسم روی SQL2008 ساخته شده بود و VS هم اکسپرس2005 را ساپورت میکنه
منم اجبارا اکسپرس 2008 را جداگانه نصب کردم که VS بتونه دیتابیسم را به پروژم اتچ کنه
کسی میتونه بگه الآن باید چیکار کنم؟ :گریه:

----------


## caspiansea

با سلام
میخواستم بدونم که طوری میشه از اطلاعات بانکم توی برنامه یه backup بگیریم و بتونم همون backup رو توی برنامه بازیابی کنم.
با تشکر

----------


## ایمان مدائنی

بايد از دستور بكاپ و ري استور استفاده كني !

يك نمونه برنامه هست برات ميذارم كارتو راه ميندازه !

----------


## caspiansea

دستت دردنکنه مهندس
--------------------



> دستت دردنکنه مهندس


 راستی اگه اطلاعاتو برگردونم اطلاعات قبلی که توی بانکه چی می شه؟؟؟؟؟؟؟؟؟؟از بین که نمیره؟؟؟؟؟؟؟؟؟؟

----------


## javad_r_85

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

----------


## aryan2005

سلام 
هنگامی که از دستور Bakup  استفاده می کنم در اجرا خطائی مبنی بر نبود نام بانک ظاهر می شود ضمن اینکه بانک من از نوع َAttached درSQLExpress است

----------


## mmd2009

با سلام

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

موفق باشید

----------


## ØµØ¨Ø§Ø­ ÙØªØ­Û

private void button1_Click(object sender, EventArgs e)
        {
            SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;Integrated Security=True");
            SqlCommand com=new SqlCommand();
            com.Connection = con;
            con.Open();
            com.CommandText="Use master backup database [phonebank] to disk=N'd:\\o'";
            com.ExecuteNonQuery();
            con.Close();
        }

----------


## ØµØ¨Ø§Ø­ ÙØªØ­Û

Ø§ÛÙ Ú©Ø¯ Ø¨Ø§ÙØ§Ø±Ù ÙÙÛÙ Ø§ÙØ§Ù ØªØ³Øª Ú©Ø±Ø¯Ù ÙÛÚ Ø¹ÛØ¨Û ÙÙ ÙØ¯Ø§Ø´Øª

----------


## hsn_sstp

Ø³ÙØ§Ù 
ÛÚ© Ø¨Ø±ÙØ§ÙÙ Ø¯Ø§Ø±Ù Ú©Ù Ø¨Ø§ÙÚ© Ø§Ø·ÙØ§Ø¹Ø§ØªÛØ´ sql 2005 ÙØ³ØªØ´ Ù Ø§Ø² Ø¯Ø§Ø®Ù ÙØ­ÛØ·  visual stadio ÙØ³ÙØª server explorer ÙØ¯ÛØ±ÛØªØ´ ÙÛÚ©ÙÙ. ÛØ¹ÙÛ sql server 2005 Ø¨ØµÙØ±Øª Ø¬Ø¯Ø§ ÙØµØ¨ ÙÚ©Ø±Ø¯Ù.
ÙÛ Ø®ÙØ§Ù Ø§Ø² Ø¯ÛØªØ§Ø¨ÛØ³Ù backup Ø¨Ú¯ÛØ±Ù Ù Ø§ÙÙÙ Ø±ÛØ³ØªÙØ± Ú©ÙÙ Ø®ÛÙÛ Ø§Ø² Ú©Ø¯ ÙØ§ÛÛ Ú©Ù ØªÙØ§ÛÙ Ø³Ø§ÛØª Ø¨ÙØ¯ Ø±Ø§ Ø§ÙØªØ­Ø§Ù Ú©Ø±Ø¯Ù ÙÙÛ Ø¬ÙØ§Ø¨ ÙØ¯Ø§Ø¯.
Ø¨Ú©Ø§Ù¾ ÙÛÚ¯ÛØ±Ù ÙÙÛ ÙÙØªÛ Ø±ÛØ³ØªÙØ± ÙÛÚ©ÙÙ ØªØºÛÛØ±Ø§Øª Ø¨Ù Ø­Ø§ÙØª ÙØ¨Ù Ø¨Ø±ÙÙÛ Ú¯Ø±Ø¯Ù.
Ø¨Ø§ÛØ¯ ÚÚ©Ø§Ø± Ú©ÙÙØ

----------


## gerdioz

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 ÙÙÙÙ ÙØ³ÛØ±

----------


## Glx.Mzf

Ø§ÛÙ Ú©Ø¯ ØªÙ Ø±ÙØ§ÙÙ Ø®ÙØ¯Ù Ø¨Ø¯ÙÙ ÙÛÚ ÙØ´Ú©ÙÛ Ø§Ø¬Ø±Ø§ ÙÛØ´Ù : 

        private void ToolStripMenuItemCreatBackUp_Click(object sender, EventArgs e)
        {
            try
            {
                SaveFileDialog saveFileDialog = new SaveFileDialog();
                saveFileDialog.AddExtension = true;
                saveFileDialog.CheckFileExists = false;
                saveFileDialog.CheckPathExists = true;
                saveFileDialog.OverwritePrompt = true;
                saveFileDialog.DereferenceLinks = true;
                saveFileDialog.FileName = "Backup";
                saveFileDialog.Filter = "Backup File (*.Bak)|*.Bak";
                saveFileDialog.DefaultExt = "Bak";
                saveFileDialog.RestoreDirectory = true;
                saveFileDialog.InitialDirectory = "C:\\";
                if (saveFileDialog.ShowDialog() == DialogResult.OK)
                {
                    SqlCommand sqlCommand = new SqlCommand();
                    sqlCommand.Connection = sqlConnection;
                    sqlCommand.CommandText = "BACKUP DATABASE MontazeriAbbasAbad TO DISK = @Destination WITH FORMAT";
                    sqlCommand.Parameters.Add("@Destination", SqlDbType.VarChar);
                    temp = saveFileDialog.FileName;
                    sqlCommand.Parameters["@Destination"].Value = saveFileDialog.FileName;
                    if (temp.StartsWith("C:\\"))
                    {
                        MessageBox.Show(" . ", telBookName);
                        saveFileDialog.ShowDialog();
                    }
                    else
                    {
                        sqlConnection.Open();
                        this.Cursor = Cursors.WaitCursor;
                        sqlCommand.ExecuteNonQuery();
                        MessageBox.Show(" ", telBookName);
                    }
                }
            }
            catch (Exception)
            {
                MessageBox.Show(" ", telBookName);
            }
        }



Restore :

        private void ToolStripMenuItemLoadBackUpFile_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            openFileDialog1.ShowDialog();
            if ((openFileDialog1.FileName != "") && (openFileDialog1.FileName != "openFileDialog1"))
            {
                try
                {
                    string filename = openFileDialog1.FileName;
                    sqlCommand.Connection = sqlConnection;
                    sqlCommand.CommandText = "ALTER DATABASE MontazeriAbbasAbad SET SINGLE_USER WITH ROLLBACK IMMEDIATE USE master;"
                    + " RESTORE DATABASE MontazeriAbbasAbad FROM DISK =N'" + filename + "' WITH REPLACE ";
                    sqlCommand.Connection = sqlConnection;
                    sqlConnection.Open();
                    this.Cursor = Cursors.WaitCursor;
                    sqlCommand.ExecuteNonQuery();
                    sqlCommand.CommandText = " ALTER DATABASE MontazeriAbbasAbad SET MULTI_USER ";
                    sqlCommand.ExecuteNonQuery();
                    MessageBox.Show(" ", telBookName);
                }
                catch
                {
                    MessageBox.Show(" ", telBookName);
                }
            }
        }

----------


## hsn_sstp

Ø¯Ø³ØªØªÙÙ Ø¯Ø±Ø¯ ÙÚ©ÙÙ ÙÙÛ Ø¨Ø§Ø²Ù Ø¬ÙØ§Ø¨ ÙÚ¯Ø±ÙØªÙ
 :ÙØªÙÚ©Ø±:  ÛÚ© ÙÚ©ØªÙ Ø¯ÛÚ¯Ù Ø§ÛÙÚ©Ù Ø­Ø¬Ù ÙØ§ÛÙ Ø¯ÛØªØ§Ø¨ÛØ³Ù Ø­Ø¯ÙØ¯ 2.5MB ÙØ³ØªØ´ ÙÙÛ Ø­Ø¬Ù ÙØ§ÛÙ Ø¨Ú©Ø§Ù¾ Ø­Ø¯ÙØ¯ 805KB Ø§ÛÙ ÙÙÚ©ÙÙ ØºÛØ±Ø¹Ø§Ø¯Û Ø¨Ø§Ø´ÙØ
ÙØ·ÙØ§ Ú©ÙÚ© Ú©ÙÛØ¯ Ù¾Ø±ÙÚÙ ÙÙØ´ ØªÙÙÙÙ Ø´Ø¯Ù ÙÙÛ ÙÛÙ ÙØ³ÙØªØ´ Ú¯ÛØ± Ú©Ø±Ø¯Ù :Ú¯Ø±ÛÙ:

----------


## hsn_sstp

Ø¯Ø³ØªØªÙÙ Ø¯Ø±Ø¯ ÙÚ©ÙÙ Ø®ÙØ¯Ù ØªÙÙØ³ØªÙ Ø¬ÙØ§Ø¨Ø´Ù Ù¾ÛØ¯Ø§ Ú©ÙÙ. Ø§ÛÙØ¬Ø§ ÙÛØ²Ø§Ø±Ù ØªØ§ Ø¨ÙÛÙ Ø¯ÙØ³ØªØ§Ù Ø¨ØªÙÙÙ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÙ


Backup:
   private void btnbackup_Click(object sender, EventArgs e)
  {
  SaveFileDialog saveFileDialog = new SaveFileDialog();
  saveFileDialog.AddExtension = true;
  saveFileDialog.CheckFileExists = false;
  saveFileDialog.CheckPathExists = true;
  saveFileDialog.OverwritePrompt = true;
  saveFileDialog.FileName = "Backup" + information.datebackup;
  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|\\DBNAME.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);
  }
  }
  }






-------------------------------------------------------------------------
Restor:


    private void btnrestor_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|\\DBNAME.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);
  }
  }
  }

----------


## HAMRAHSOFT.IR

> Ø¨Ø§ÙØ¯ Ø§Ø² Ø¯Ø³ØªÙØ± Ø¨ÙØ§Ù¾ Ù Ø±Ù Ø§Ø³ØªÙØ± Ø§Ø³ØªÙØ§Ø¯Ù ÙÙÙ !
> 
> ÙÙ ÙÙÙÙÙ Ø¨Ø±ÙØ§ÙÙ ÙØ³Øª Ø¨Ø±Ø§Øª ÙÙØ°Ø§Ø±Ù ÙØ§Ø±ØªÙ Ø±Ø§Ù ÙÙÙØ¯Ø§Ø²Ù !


Ø¨Ø±Ø§Ù Ø§Ø³ÙÙÙÙ 2008 Ø¬ÙØ§Ø¨ ÙÙÙØ¯Ù

----------


## zahra_no

Ø¯ÙØ³ØªØ§Ù ÙÙ Ø§Ø² ØªÙØ§Ù Ø±ÙØ´ÙØ§Û Ú©Ù ØªÙ Ø§ÛÙ Ø³Ø§ÛØª Ø¯Ø± ÙÙØ±Ø¯ backup Ú¯ÛØ±Û Ú¯ÙØªÙ Ø´Ø¯Ù Ø§Ø³ØªÙØ§Ø¯Ù Ú©Ø±Ø¯Ù
ÙÙÛ ØªÙØ§Ù Ø±ÙØ´ÙØ§ Ø¨Ù Ø§ÛÙ Ø®Ø·Ø§ ÙÛØ±Ø³Ù

ÙÚ© ÙÛÚ©ÙÛÙ ÙØ´Ú©Ù Ø§Ø² ÚÛ ÙÛØªÙÙÙ Ø¨Ø§Ø´ÙØ

Cannot open backup device 'C:\b.bak'. Operating system error 5(Access is denied.).
BACKUP DATABASE is terminating abnormally.

----------


## Esmail Solhkhah

*Ú©Ø¯ØªÙÙ Ø±Ù Ø¨Ø²Ø§Ø±ÛØ¯ Ø¨Ø±Ø±Ø³Û ÙÛÚ©ÙÙ*

----------


## zahra_no

https://barnamenevis.org/showthread.p...8C%D8%B1%DB%8C


ÙÙ Ø§ÛÙ Ú©Ø¯ Ø±Ù Ø±Ù Ø¨Ø±ÙØ§ÙÙ Ø§Ù Ú¯Ø°Ø§Ø´ØªÙ Ø§Ù

Ø§Ú¯Ù ÙØ§Ø²Ù Ø´Ø¯ Ø®ÙØ¯ Ø¨Ø±ÙØ§ÙÙ Ø±Ù ÙÙ ÙÛØ²Ø§Ø±Ù

----------


## Esmail Solhkhah

> https://barnamenevis.org/showthread.p...8C%D8%B1%DB%8C
> 
> 
> ÙÙ Ø§ÛÙ Ú©Ø¯ Ø±Ù Ø±Ù Ø¨Ø±ÙØ§ÙÙ Ø§Ù Ú¯Ø°Ø§Ø´ØªÙ Ø§Ù
> 
> Ø§Ú¯Ù ÙØ§Ø²Ù Ø´Ø¯ Ø®ÙØ¯ Ø¨Ø±ÙØ§ÙÙ Ø±Ù ÙÙ ÙÛØ²Ø§Ø±Ù


*Ø§ÙÙØ¬Ø§ Ù¾Ø³ØªÛ Ø§Ø² Ø´ÙØ§ ÙÙÛØ¨ÛÙÙ

Ú©Ø¯ Ø±Ù ÙÙÛÙØ¬Ø§ Ø¢Ù¾ Ú©ÙÛØ¯*

----------


## zahra_no

Ø§ÛÙ Ø¬Ø§ Ø³Ù Ø±ÙØ´  backup Ø±Ù Ú¯Ø°Ø§Ø´ØªÙ Ø§Ù
Ú©Ù Ø§Ø² Ø³Ù Ø±ÙØ´ ÙÙ Ø§Ø³ØªÙØ§Ø¯Ù Ú©Ø±Ø¯Ù ÙÙÛ ÙÙØ§Ù Ø®Ø·Ø§ Ø±Ù ÙÛØ¯Ù


private void backup1_Click(object sender, EventArgs e)
        {
            if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                SqlConnection c = new SqlConnection(@"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=PIM;Data Source=ZAHRA-PC\SQLEXPRESS");
                try
                {
                    c.Open();
                    SqlCommand cm = new SqlCommand(@"BACKUP DATABASE PIM TO DISK ='" + this.saveFileDialog1.FileName + "'", c);
                    //SqlCommand cm = new SqlCommand(@"USE PIM BACKUP DATABASE PIM TO  DISK ='" + this.saveFileDialog1.FileName + "'", c);
                    cm.ExecuteNonQuery();
                    c.Close();
                    MessageBox.Show("Ù¾Ø´ØªÛØ¨Ø§Ù Ú¯ÛØ±Û Ø¨Ø§ ÙÙÙÙÛØª Ø§ÙØ¬Ø§Ù Ø´Ø¯");
                }
                catch (SqlException ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }

        private void backup2_Click(object sender, EventArgs e)
        {
            if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                SqlCommand cmd = new SqlCommand();
                cmd.Connection = new SqlConnection(@"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=PIM;Data Source=ZAHRA-PC\SQLEXPRESS");
                cmd.Connection.Open();
                string dbname = cmd.Connection.Database;//
                DatabaseAssistant.DbAssistant db = new DatabaseAssistant.DbAssistant(@"ZAHRA-PC\SQLEXPRESS", dbname);
                db.PerformBackUp(this.saveFileDialog1.FileName, DatabaseAssistant.AnimationStyle.Style1);
            }
        }

        private void backup3_Click(object sender, EventArgs e)
        {
            if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                this.server = new SQLServer2Class();
                this.backup = new Backup2Class();
                this.server.LoginSecure = true;
                this.server.Connect(@"ZAHRA-PC\SQLEXPRESS", Missing.Value, Missing.Value);
                database = (Database2)server.Databases.Item("PIM", Missing.Value);
                backup.Database = database.Name;
                backup.Files = this.saveFileDialog1.FileName;
                backup.SQLBackup(server);
                server.DisConnect();
                backup = null;
                server = null;
            }
        }

----------


## Esmail Solhkhah

Ø´Ø±ÙÙØ¯Ù Ø¨Ø±Ù Ø±ÙØª 

ÚØ´Ù Ø¨Ø±Ø±Ø³Û ÙÛÚ©ÙÙ

----------


## Esmail Solhkhah

> Ø§ÛÙ Ø¬Ø§ Ø³Ù Ø±ÙØ´  backup Ø±Ù Ú¯Ø°Ø§Ø´ØªÙ Ø§Ù
> Ú©Ù Ø§Ø² Ø³Ù Ø±ÙØ´ ÙÙ Ø§Ø³ØªÙØ§Ø¯Ù Ú©Ø±Ø¯Ù ÙÙÛ ÙÙØ§Ù Ø®Ø·Ø§ Ø±Ù ÙÛØ¯Ù
> 
> 
> private void backup1_Click(object sender, EventArgs e)
>         {
>             if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
>             {
>                 SqlConnection c = new SqlConnection(@"Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=PIM;Data Source=ZAHRA-PC\SQLEXPRESS");
> ...


*
ØªÙ Ø§ÙÙÛ Initial Catalog=PIM Ø±Ù Ø¨Ø±Ø¯Ø§Ø±ÛØ¯ ÚÙÙ ÙÙÙØ¹ Ø¨Ú©Ø§Ù¾ Ú¯ÛØ±Û Ø¯ÛØªØ§Ø¨ÛØ³ Ø¬Ø§Ø±Û Ø¨Ø§ÛØ¯ ÙØ³ØªØ± Ø¨Ø§Ø´Ù

Ø¯Ø±Ø¶ÙÙ ØªÙ Ø±ÙØª Ø¯Ø±Ø§ÛÙ Ø°Ø®ÛØ±Ù ÙÚ©ÙÛØ¯ ÛÙ ÙØ³ÛØ± Ø¹Ø§Ø¯Û ÙØ«Ù C:\backup*

----------


## Esmail Solhkhah

ØªÙ Ø¯ÙÙÛ Ø§Ø² DatabaseAssistant Ø§Ø³ØªÙØ§Ø¯Ù Ú©Ø±Ø¯ÛØ¯ Ú©Ù ÙÙ ÙØ¯Ø§Ø±ÙØ´

----------


## Esmail Solhkhah

Ø´ÙØ§ ÙÙÙÙ ÙØªØ¯ Ø§ÙÙ Ø±Ù Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯ ÙÙØ±Ø¯ Ø­ÙÙ

ÙÙØ· Ø¨Ù Ø¯ÛØªØ§Ø¨ÛØ³ ÙØ³ØªØ± Ø§Ø´Ø§Ø±Ù Ú©ÙÛØ¯ ØªÙ Ú©Ø§ÙÚ©Ø´Ù Ø§Ø³ØªØ±ÛÙÚ¯ ÛØ§ Ø§ØµÙØ§ Ø¯ÛØªØ§Ø³ÙØ±Ø³ Ø±Ù ÙØ°Ø§Ø±ÛØ¯.

ÙÙÙÙ Ø¨Ø§Ø´ÛØ¯.

----------


## mehrdad1991h

Ø³ÙØ§Ù
ÙÙ ÙÛØ§Ø² Ø¯Ø§Ø±Ù ÛÙ ÙÙØ± Ø¨Ø±Ø§Ù Ø§ÛÙ ÙØ§ÛÙ Ø±Ø§ Ø±ÛØ³ØªÙØ± Ú©ÙÙ
1.rar
Ú©Ø³Û Ø§ÙØ§Ù ÙÛØªÙÙÙ Ø±ÛØ³ØªÙØ± Ú©ÙÙ Ø¨Ø±Ø§ÙØ
Ø®ÛÙÛ ÙÙÙÙÙ ÙÛØ´Ù Ø§Ú¯Ù Ø±ÛØ³ØªÙØ±Ø´ Ú©ÙÛØ¯
Ø³Ù¾Ø§Ø³

----------


## amin_rezaee

> Ø³ÙØ§Ù
> ÙÙ ÙÛØ§Ø² Ø¯Ø§Ø±Ù ÛÙ ÙÙØ± Ø¨Ø±Ø§Ù Ø§ÛÙ ÙØ§ÛÙ Ø±Ø§ Ø±ÛØ³ØªÙØ± Ú©ÙÙ
> 1.rar
> Ú©Ø³Û Ø§ÙØ§Ù ÙÛØªÙÙÙ Ø±ÛØ³ØªÙØ± Ú©ÙÙ Ø¨Ø±Ø§ÙØ
> Ø®ÛÙÛ ÙÙÙÙÙ ÙÛØ´Ù Ø§Ú¯Ù Ø±ÛØ³ØªÙØ±Ø´ Ú©ÙÛØ¯
> Ø³Ù¾Ø§Ø³


Ú©Ø¯ restore:
public string RestoreDB(string StrFileName)
        {
            try
            {
                string command = "USE MASTER ALTER DATABASE AminLibraryDB SET OFFLINE WITH ROLLBACK IMMEDIATE RESTORE DATABASE AminLibraryDB FROM DISK='" + StrFileName +
                "' WITH REPLACE ,RESTART ALTER DATABASE AminLibraryDB SET ONLINE WITH ROLLBACK IMMEDIATE";
                SqlCommand oCommand = null;
                if (con.State != ConnectionState.Open)
                    con.Open();
                oCommand = new SqlCommand(command, con);
                oCommand.ExecuteNonQuery();
                Result = "Success";
            }
            catch (Exception ex)
            {
                Result = ex.ToString();
            }
            finally
            {
                con.Close(); 
            }
            return Result;
        }

----------


## alirezamli

> Ø¯Ø³ØªÙØ± Ø±Ø§ Ø¹ÛÙ ÙØ§Ù Ø´ÙØ§ Ú©Ø±Ø¯Ù
> Ø¨Ø§Ø²Ù Ø§Ø±ÙØ± ÙØ±ÙÛ ÙÚ©Ø±Ø¯
> Ú©ÙÙØ§Øª Ø²ÛØ± Ø±Ø§ Ø¯Ø± Ú¯ÙÚ¯Ù Ø³Ø±Ú Ú©Ø±Ø¯Ù
> Invalid column name 'is_compressed'.
> Invalid column name 'compressed_backup_size'
> ØªÙ Ø¨Ø¹Ø¶Û Ø³Ø§ÛØªÙØ§Û Ø®Ø§Ø±Ø¬Û Ú¯ÙØªÙ Ø¨ÙØ¯Ù Ø¨Ø¯ÙÛÙ ÙØ±ÚÙ Ø¯ÛØªØ§Ø¨ÛØ³ ÙØ³Øª.
> ÙÙ Ø§Ø² sqlExpress2008 Ø§Ø³ØªÙØ§Ø¯Ù ÙÛÚ©ÙÙ. 
> ÚÙÙ Ø¯ÛØªØ§Ø¨ÛØ³Ù Ø±ÙÛ SQL2008 Ø³Ø§Ø®ØªÙ Ø´Ø¯Ù Ø¨ÙØ¯ Ù VS ÙÙ Ø§Ú©Ø³Ù¾Ø±Ø³2005 Ø±Ø§ Ø³Ø§Ù¾ÙØ±Øª ÙÛÚ©ÙÙ
> ÙÙÙ Ø§Ø¬Ø¨Ø§Ø±Ø§ Ø§Ú©Ø³Ù¾Ø±Ø³ 2008 Ø±Ø§ Ø¬Ø¯Ø§Ú¯Ø§ÙÙ ÙØµØ¨ Ú©Ø±Ø¯Ù Ú©Ù VS Ø¨ØªÙÙÙ Ø¯ÛØªØ§Ø¨ÛØ³Ù Ø±Ø§ Ø¨Ù Ù¾Ø±ÙÚÙ Ø§ØªÚ Ú©ÙÙ
> Ú©Ø³Û ÙÛØªÙÙÙ Ø¨Ú¯Ù Ø§ÙØ¢Ù Ø¨Ø§ÛØ¯ ÚÛÚ©Ø§Ø± Ú©ÙÙØ


ÙÙ ÙÙ Ø¯ÙÛÙØ§Ù Ø§ÛÙ ÙØ´Ú©Ù Ø±Ø§ Ø¯Ø§Ø±Ù Ú©Ø³Û Ø§Ø² Ø¯ÙØ³ØªØ§Ù ÙÛØªÙÙÙ Ø±Ø§ÙÙÙØ§ÛÛ Ú©ÙÙ Ø
Ø¨Ø§ ØªØ´Ú©Ø± Ø§Ø² Ø¯ÙØ³ØªØ§Ù

----------


## csharpprogramer88

> ÙÙ ÙÙ Ø¯ÙÛÙØ§Ù Ø§ÛÙ ÙØ´Ú©Ù Ø±Ø§ Ø¯Ø§Ø±Ù Ú©Ø³Û Ø§Ø² Ø¯ÙØ³ØªØ§Ù ÙÛØªÙÙÙ Ø±Ø§ÙÙÙØ§ÛÛ Ú©ÙÙ Ø
> Ø¨Ø§ ØªØ´Ú©Ø± Ø§Ø² Ø¯ÙØ³ØªØ§Ù


 ØªÙ Ù¾Ø±ÙÙØ§ÛÙÙ Ø¨Ú¯Ø±Ø¯ Ø´Ø§ÛØ¯ ÛÙ ÚÛØ²Ø§ÛÛ Ú¯ÛØ±Øª Ø¨ÛØ§Ø¯

----------


## alirezamli

Ø¯ÙØ³Øª Ø¹Ø²ÛØ² Ú¯Ø´ØªÙ ÙÙÛ ÚÛØ²Û Ø¯Ø³ØªÚ¯ÛØ±Ù ÙØ´Ø¯ Ø§Ú¯Ø± ÙÛÙÚ©Ø´ Ø±Ø§ Ø¨Ø°Ø§Ø±ÛØ¯ ÙÙÙÙÙ ÙÛØ´Ù

----------


## csharpprogramer88

> Ø¯ÙØ³Øª Ø¹Ø²ÛØ² Ú¯Ø´ØªÙ ÙÙÛ ÚÛØ²Û Ø¯Ø³ØªÚ¯ÛØ±Ù ÙØ´Ø¯ Ø§Ú¯Ø± ÙÛÙÚ©Ø´ Ø±Ø§ Ø¨Ø°Ø§Ø±ÛØ¯ ÙÙÙÙÙ ÙÛØ´Ù


ÙÙ Ø®ÛÙÛ ÙÙØªÙ Ø³Ø§ÛØª ÙÙÛØ¢Ù Ø¨Ø±ÙØ§ÙÙ ÙÙÛØ³Û ÙÙ Ø²ÛØ§Ø¯ ÙÙÛÚ©ÙÙ Ø¯ÙÛÙ Ø¨Ú¯ÛØ¯ ÙØ´Ú©ÙØªØ§Ù ÚÛÙ ÙÙÛ Ø¨Ø±Ø§Û Ø¨Ú©Ø§Ù¾ Ù Ø±ÛØ³ØªÙØ± Ú©Ø¯ ØªÙ Ù¾Ø±ÙÙØ§ÛÙÙ ÙØ³Øª ÙÙÛ ÙÛÙÚ©Ø´Ù ÙÙÛØ¯ÙÙÙ

----------


## Esmail Solhkhah

Ø¯ÙØ³Øª Ø¹Ø²ÛØ² Ø¯ÛØªØ§Ø¨ÛØ³ Ø±Ù Ø±ÛØ³ØªÙØ± Ú©Ø±Ø¯Ù ÙÙØ±Ø¯Û ÙØ¯Ø§Ø´Øª Ø ÙÙØ· Ø¯ÙØª Ú©ÙÛØ¯ Ø¯ÙØªØ§ Ø¨Ú©Ø§Ù¾ Ø±Ù Ø´Ø§ÙÙ ÙÛØ´Ù 

Ø¨ÙØ¯Ù Ø¢Ø®Ø±ÛØ´Ù Ø±ÛØ³ØªÙØ± Ú©Ø±Ø¯Ù

Ú©Ø¯ØªÙÙ ÙÙ Ø¨Ø¯ÙÙ ÙÙØ±Ø¯ Ø§Ø¬Ø±Ø§ ÙÛØ´Ù

ÙØ·ÙØ¦Ù ÙØ³ØªÛØ¯ ØªÙØ¸ÛÙØ§Øª SQL SERVER Ø´ÙØ§ Ø¨Ø§ Ø§ÙÙÛ Ú©Ù ØªÙ Ú©Ø§ÙÚ©Ø´Ù Ø§Ø³ØªØ±ÛÙÚ¯ Ø¯Ø§Ø¯ÛØ¯ Ø¨Ø±Ø§Ø¨Ø±Ù Ø

----------


## mehrdad1991h

Ø¨ÙÙ ÛÚ©Ø³Ø§Ù ÙØ³ØªÙØ¯
Ù Ø§ÛÙ Ø®ÙØ¨ ÙÙÙ ÙÙÛÙØ§ Ø±ÛØ³ØªÙØ± ÙÛÚ©ÙÙ ÙÙÛ Ø¨Ø±ÙØ§ÙÙ ÙÙÛØ´ÙØ§Ø³Ø¯Ø´
Ø¨Ø±ÙØ§ÙÙ Ø±Ø§ Ø§Ø¬Ø±Ø§ ÙÙÛÚ©ÙÙ ÙØ¨Ù Ø§Ø² ÙØ±ÙØ¯ Ø¨Ù ØµÙØ­Ù ÙØ§Ú¯ÛÙ ÙÛÚ¯Ù Ø§Ø±ØªØ¨Ø§Ø· Ø¨Ø§ Ù¾Ø§ÛÚ¯Ø§Ù Ø¯Ø§Ø¯Ù Ø¨Ø±ÙØ±Ø§Ø± ÙØ´Ø¯

----------


## Esmail Solhkhah

ÛØ¹ÙÛ Ø´ÙØ§ Ø§ÙØ§Ù Ø§ÛÙ Ø¯ÛØªØ§Ø¨ÛØ³Û Ø±Ù Ú©Ù Ø¨ÙØ¯Ù ÙØ±Ø³ØªØ§Ø¯Ù Ø§ØªÚ Ú©Ø±Ø¯ÛØ¯

Ù SQL SERVER Ø¨Ø§ Ø§ÛÙØ³ØªÙØ³ SQLEXPRESS ÙØµØ¨ Ø´Ø¯Ù Ù Authentication ÙÙ Ø¯Ø±Ø³ØªÙ 

Ø§Ú¯Ù ÙÙÙ Ø§ÛÙØ§ Ø¯Ø±Ø³ØªÙ Ú©Ø¯ Ø®Ø·Ø§ Ø±Ù Ø¨ÛØ²Ø­ÙØª Ø¨Ø°Ø§Ø±ÛØ¯ (Ø§ÙØ¨ØªÙ Ú©Ø§ÙÙ Ø¨Ø§ Message Ù StackTrace)

----------


## eligol

Ø³ÙØ§Ù
ÙÙ Ø¯Ù button Ø¯Ø§Ø±Ù Ú©Ù Ø¨Ø§ ÛÚ©Û ÙÛ Ø®ÙØ§Ù Ø¹ÙÙ Ø¨Ú©Ø§Ù¾ Ø±Ø§ Ø§ÙØ¬Ø§Ù Ø¨Ø¯ÙØ¯ Ù Ø¨Ø§ Ø¯ÛÚ¯Ø±Û Ø¹ÙÙ Ø¨Ø§Ø²ÛØ§Ø¨Û Ø§Ø² Ø¨Ø±ÙØ§ÙÙ ÙÙÛØ³Ø§Ù Ø®ÙØ§ÙØ´ ÙÛ Ú©ÙÙ Ú©ÙÚ©Ù Ú©ÙÙ
ÙÙ Ø§ÛÙ Ú©Ø¯ Ø±Ø§ ÙÙØ´ØªÙ ÙÙÛ ÙÙÛ Ø¯ÙÙÙ ÚØ±Ø§ Ø¨Ú©Ø§Ù¾ ÙÙÛÚ¯ÛØ±Ù
  private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                
                saveFileDialog1.DefaultExt = "BAK";
                saveFileDialog1.FileName = "BackupFile" + DateTime.Now.ToShortDateString();
                saveFileDialog1.Filter = @"SQL Backup files (*.BAK) |*.BAK|All files (*.*) |*.*";
                saveFileDialog1.FilterIndex = 1;
                saveFileDialog1.OverwritePrompt = true;
                saveFileDialog1.Title = "Backup SQL File";
               
                string strfilename;
                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    
                   strfilename = saveFileDialog1.FileName;
                   string command = @"BACKUP DATABASE brt_Data TO DISK='" + strfilename + "'";
                    con = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto  ry|\\brt_Data.mdf;Integrated Security=True;User Instance=True");
                    if (con.State != ConnectionState.Open)
                        con.Open();
                    SqlCommand ocammand = new SqlCommand(command, con);
                    ocammand.ExecuteNonQuery();
                    MessageBox.Show("complate"); 
                }
            }
            catch
            {
                MessageBox.Show("error"); 
            }
        }

----------


## pooria_googooli

Ø¨Ø§ Ú©Ø¯ Ø²ÛØ± ÙÛØªÙÙÛ Ø¨Ú© Ø¢Ù¾ Ø¨Ú¯ÛØ±Û :

            String Strbackup1,Strbackup2;
            DateTime dteDate;
            dteDate = DateTime.Now;

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

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

            textBox1.Text = saveFileDialog1.FileName;

            System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(@"backup database tel to disk = '" + @textBox1.Text.ToString() + "'");
            //System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(@"backup database AccSlick1 to disk = 'd:\a.bak'");
            System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(DataBase.cn);
            cmd.Connection = con ;
            con.Open();
            cmd.ExecuteNonQuery();

            this.Close();

Ø§ÛÙÙ Ú©Ø¯ Ø¨Ø§Ø²ÛØ§Ø¨Û Ø§Ø·ÙØ§Ø¹Ø§Øª :
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 AccSlick1 SET SINGLE_USER with ROLLBACK IMMEDIATE; RESTORE DATABASE AccSlick1  FROM disk = " + @textBox1.Text.ToString() + " with REPLACE;ALTER DATABASE AccSlick1 SET MULTI_USER");
            System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(@"ALTER DATABASE tel SET SINGLE_USER with ROLLBACK IMMEDIATE; use [master]; RESTORE DATABASE tel  FROM disk = '" + @textBox1.Text.ToString() + "' with REPLACE;ALTER DATABASE tel SET MULTI_USER");

            //System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(@"use [master]; RESTORE DATABASE AccSlick1  FROM disk = 'G:\\a.bak' with REPLACE;");

            //System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection("Data Source=.;Initial Catalog=master;user=sa;PWD=1234");
            System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(DataBase.cn);
            cmd.Connection = con;
            con.Open();
            cmd.ExecuteNonQuery();
            this.Close();

----------


## eligol

> Ø¨Ø§ Ú©Ø¯ Ø²ÛØ± ÙÛØªÙÙÛ Ø¨Ú© Ø¢Ù¾ Ø¨Ú¯ÛØ±Û :
> 
> String Strbackup1,Strbackup2;
> DateTime dteDate;
> dteDate = DateTime.Now;
> 
> Strbackup1 = "backup.bak";
> Strbackup2 = Application.StartupPath + @"\backup\" ;
> 
> ...


Ø¨Ø§ Ø§ÛÙ Ú©Ø¯ ÙÙ ÙÙ ÙØªÛØ¬Ù ÙÚ¯Ø±ÙØªÙ Ú©Ø³Û Ú©Ø¯ Ø¨ÙØªØ±Û ÙØ¯Ø§Ø±Ù Ú©Ù Ø¬ÙØ§Ø¨ Ø¯Ø§Ø¯Ù Ø¨Ø§Ø´Ù

----------


## elena2007

string command = @"BACKUP DATABASE [" + Application.StartupPath + "\\photograph.mdf] TO DISK = '" + Application.StartupPath + "\\backup.bak' WITH NOFORMAT, NOINIT,  NAME = N'accounting-Full Database Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10";
            this.Cursor = Cursors.WaitCursor;
            SqlCommand oCommand = null;
            SqlConnection oConnection = null;

            string scnn = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector  y|\photograph.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
            oConnection = new SqlConnection(scnn);
            if (oConnection.State != ConnectionState.Open)
                oConnection.Open();
            oCommand = new SqlCommand(command, oConnection);
            oCommand.ExecuteNonQuery();
            this.Cursor = Cursors.Default;
            oConnection.Close();
            MessageBox.Show("Ù¾Ø´ØªÛØ¨Ø§ÙÛ Ø§Ø² Ø§Ø·ÙØ§Ø¹Ø§Øª Ø¨Ø§ ÙÙÙÙÛØª Ø§ÙØ¬Ø§Ù Ø´Ø¯");

SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector  y|\photograph.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
                con.Open();
                string s1 = "ALTER DATABASE [" + Application.StartupPath + "\\photograph.mdf] SET OFFLINE WITH ROLLBACK IMMEDIATE";
                string s2 = "ALTER DATABASE [" + Application.StartupPath + "\\photograph.mdf] SET MULTI_USER";
                string query = "RESTORE DATABASE [" + Application.StartupPath + "\\photograph.mdf] FROM DISK ='" + Application.StartupPath + "\\backup.bak' WITH RECOVERY,REPLACE";
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = s1;
                cmd.Connection = con;
                cmd.ExecuteNonQuery();

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

                cmd.CommandText = query;
                cmd.Connection = con;
                cmd.ExecuteNonQuery();
                con.Close();
                MessageBox.Show("Ø¨Ø§Ø²Ú¯Ø±Ø¯Ø§ÙÛ Ø§Ø·ÙØ§Ø¹Ø§Øª Ø¨Ø§ ÙÙÙÙÛØª Ø§ÙØ¬Ø§Ù Ø´Ø¯");

----------


## bazardeh

Ø§Ú¯Ø± Ø¬ÙØ§Ø¨ ÙÚ¯Ø±ÙØªÛØ¯ Ù¾ÛØºØ§ÙÛ Ú©Ù Ø¨Ù Ø´ÙØ§ ÙÛØ¯Ù Ø±Ù Ø¯Ø± Ø§ÛÙØ¬Ø§ ÙØ±Ø§Ø± Ø¯ÙÛØ¯

----------


## mahdi5121

Ø¨Ø§ Ø³ÙØ§Ù ...
ÙÙØªÛ Ø§Ø² Ø·Ø±ÛÙ Ø¨Ø±ÙØ§ÙÙ Ø§ÛÛ Ú©Ù ÙÙØ´ØªÙ Ø¨Ù Ø¯ÛØªØ§ Ø¨ÛØ³ ÙÙØ±Ø¯ ÙØ¸Ø± ÙØµÙ ÙÛ Ø´ÙØ ÙÛ ØªÙÙÙ Ø§Ø² ÙÙÙÙ Ø¯ÛØªØ§ Ø¨ÛØ³ Ø¨Ú©Ø§Ù¾ Ø¨Ú¯ÛØ±Ù Ø§ÙØ§ ÙÙØªÛ ÙÛ Ø®ÙØ§Ù Ú©Ù Ø§ÙÙ Ø±Ù Ø±ÛØ³ØªÙØ± Ú©ÙÙØ Ø§Ø±ÙØ± ÙÛ Ø¯ÙØ ÙÚ©Ø± Ú©ÙÙ Ø¨Ù Ø®Ø§Ø·Ø± Ø§ÛÙÙ Ú©Ù ÙÛ Ú¯Ù ÙØ§ÛÙ ÙØ§ÛÛ Ú©Ù ÙÛ Ø®ÙØ§ Ø¨Ø±Ú¯Ø±Ø¯ÙÙÛ Ø¯Ø± Ø­Ø§Ù Ø­Ø§Ø¸Ø± ÙÙØ¬ÙØ¯ÙØ Ø¨Ù Ø®Ø§Ø·Ø± ÙÙÛÙ ÙÛ Ø®ÙØ§Ù Ú©Ù Ø§ÙÙ Ø¯ÛØªØ§ Ø¨ÛØ³ Ø­Ø°Ù Ø¨Ø´Ù Ù Ø¨Ø¹Ø¯ Ø±ÛØ³ØªÙØ±Û Ø¨Ø´Ù Ú©Ù Ø¯Ø± Ø§ÛÙ ØµÙØ±Øª ÙÙ Ø§Ø±ÙØ± ÙÛ Ø¯Ù Ú©Ù Ø¯ÛØªØ§ Ø¨ÛØ³ Ø¯Ø± Ø­Ø§Ù Ø§Ø³ØªÙØ§Ø¯Ù Ø§Ø³Øª ÛØ¹ÙÛ Ø¨Ø±ÙØ§ÙÙ Ø¯Ø§Ø±Ù Ø§Ø² Ø§ÙÙ Ø§Ø³ØªÙØ§Ø¯Ù ÙÛ Ú©ÙÙ.

Ø­Ø§ÙØ§ ÚÛÚ©Ø§Ø± Ú©ÙÙ Ú©Ù ÙÙØªÛ Ø¨Ø±ÙØ§ÙÙ Ø¯Ø± Ø­Ø§Ù Ø§Ø¬Ø±Ø§Ø³Øª Ù Ø¯Ø§Ø±Ù Ø§Ø² Ø¯ÛØªØ§ Ø¨ÛØ³ Ø§Ø³ØªÙØ§Ø¯Ù ÙÛ Ú©ÙÙ Ø¨Ø´Ù  Ø¨Ú©Ø§Ù¾ ÙÙÙÙ Ø¯ÛØªØ§ Ø¨ÛØ³ Ø±Ù  Ø±ÛØ³ØªÙØ± Ú©Ø±Ø¯..

ÙÙÙÙÙ ...

----------


## reza_mostafavi63

ÙØ§ÙÙØ´Ù ÙØ§ÙÙ ÙÙ ØªÙ Ø¨Ø±ÙØ§ÙÙ Ø§ÙØ¬Ø§Ø¯ ÙØ±Ø¯Ù Ø±Ù Close ÙÙ ÙØ§ Ø¨ÙØªØ± Ø§Ø² Ø§ÙÙ ÙØ³Ø§ÙÙ Null ÙØ±Ø§Ø± Ø¨Ø¯Ù ØªØ§ Ø§Ø±ØªØ¨Ø§Ø· ÙØ·Ø¹ Ø¨Ø´Ù Ø§ÙØ¨ØªÙ Ø§Ú¯Ù MultiUser Ø¨Ø§Ø´Ù Ø¨Ø§ÙØ¯ ÙÙÙ Ø§Ø±ØªØ¨Ø§Ø· ÙØ§ Ø§Ø² Ø¨ÙÙ Ø¨Ø±Ù .... Ø§ÙÙØ·ÙØ±Ù ÙÙ ÙÙÙ Ø¨Ø´Ù

----------


## bahram1100

Ú©Ø§ÙÚ©Ø´ÙÙØ§Û ÙÙ ÙÙØ´ close ÙØ³ØªÙØ¯.
Ø±Ø§Ù Ø¯ÛÚ¯Ù ÚÛÙØ

----------


## mahdi5121

Ú©Ø§ÙÚ©Ø´Ù Ø±Ù  CloseÚ©Ø±Ø¯Ù ÙÙÛ ÙØ´Ø¯.

----------


## reza_mostafavi63

ØªØ³Øª ÙØ±Ø¯Ù Ø¯Ø±Ø³Øª ÙØ§Ø± ÙØ±Ø¯ . ÙØ·ÙØ¦Ù Ø¨Ø´ÙØ¯ ÙÙ Close ÙØ³Øª .
System.IO.File.Delete("DB.mdb");

----------


## AliSaeedi_v

Ø³ÙØ§Ù Ø¯Ø§Ø¯Ø§Ø´ ÙÙ Ø§ÙØ±ÙØ² Ú©Ø¯ restoreØ±Ù ÙÙØ´ØªÙ Ø±Ø¨Ø·Û Ø¨Ù Ø§ÛÙ Ú©Ù Ø¨Ø§ÙÚ© ÙØ¬ÙØ¯ Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´Ù ÙØ¯Ø§Ø´Øª Ø¨Ø±Ø§Øª ÙÛØ²Ø§Ù
Ø§ÙØªØ­Ø§Ù Ú©Ù!!

            string cs = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog='master';Data Source=ALIREZA-PC";
            string cm = @"RESTORE DATABASE [EDB] FROM DISK ='c:\users\alireza\desktop\edb.bak'";
            SqlConnection con = newSqlConnection(cs);
            con.Open();
            SqlCommand cmd = newSqlCommand(cm, con);

            cmd.ExecuteNonQuery();
            con.Close();

----------


## sobaisobai

> ØªØ³Øª ÙØ±Ø¯Ù Ø¯Ø±Ø³Øª ÙØ§Ø± ÙØ±Ø¯ . ÙØ·ÙØ¦Ù Ø¨Ø´ÙØ¯ ÙÙ Close ÙØ³Øª .
> System.IO.File.Delete("DB.mdb");


 Ø³ÙØ§Ù
Ø¯ÙØ³Øª Ø¹Ø²ÛØ² Ø¯Ø±Ø³Øª Ú©Ø§Ø± ÙÙÛÚ©ÙÙ
ÙÙÙ ÙÙÛÙ ÙØ´Ú©Ù Ø±Ù Ø¯Ø§Ø±Ù
ØªØ§ ÙÙØªÛ Ø¨Ø±ÙØ§ÙÙ Ø¨Ø³ØªÙ ÙØ´Ù Ø§Ø¬Ø§Ø²Ù Ø¯Ø³ØªØ±Ø³Û Ø¨Ù Ø¯ÛØªØ§Ø¨ÛØ³ ÙØ¬ÙØ¯ ÙØ¯Ø§Ø±Ù

----------


## sobaisobai

> Ø³ÙØ§Ù Ø¯Ø§Ø¯Ø§Ø´ ÙÙ Ø§ÙØ±ÙØ² Ú©Ø¯ restoreØ±Ù ÙÙØ´ØªÙ Ø±Ø¨Ø·Û Ø¨Ù Ø§ÛÙ Ú©Ù Ø¨Ø§ÙÚ© ÙØ¬ÙØ¯ Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´Ù ÙØ¯Ø§Ø´Øª Ø¨Ø±Ø§Øª ÙÛØ²Ø§Ù
> Ø§ÙØªØ­Ø§Ù Ú©Ù!!
> string cs = "Integrated Security=SSPI;Persist Security Info=False;Initial Catalog='master';Data Source=ALIREZA-PC";
> string cm =@"RESTORE DATABASE [EDB] FROM DISK ='c:\users\alireza\desktop\edb.bak'";
> SqlConnection con = newSqlConnection(cs);
> con.Open();
> SqlCommand cmd = newSqlCommand(cm, con);
> 
> cmd.ExecuteNonQuery();
> con.Close();


 ÙØ§Ø³Ù Ø¯ÛØªØ§Ø¨ÛØ³ Ø§Ú©Ø³Ø³ ÚÛØ

----------


## zarrinnegar

Ø²ÙØ§ÙÛ Ú©Ù Ø¨Ø±Ø§Û restore Ú©Ø±Ø¯Ù Ø¯ÛØªØ§Ø¨ÛØ³ Ø¨Ù sql ÙØµÙ ÙÛØ´Û ÙØ§Ù Ø¯ÛØªØ§Ø¨ÛØ³ Ø±Ù ÚÛ ÙÛØ²ÙÛØ ÙÙÙÙ Ø¯ÛØªØ§Ø¨ÛØ³ Ø®ÙØ¯ØªÙØ ÛØ§ master Ø±ÙØ

Ø§Ú¯Ù master Ø±Ù Ø¨Ø²ÙÛ Ú©Ø§Ø± ÙÛÚ©ÙÙ ÙÚ¯Ø± Ø§ÛÙÚ©Ù ÛØ§ sql Ø¨Ø§Ø²Ù Ù ØªÙØ´ Ø¯ÛØªØ§Ø¨ÛØ³ Ø¨Ø§Ø²Ù Ù ÛØ§ Ú©Ø§Ø±Ø¨Ø± Ø¯ÛÚ¯Ù Ø§Û Ø¯Ø§Ø±Ù Ú©Ø§Ø± ÙÛÚ©ÙÙ ÙØ´Ú©Ù Ø³ÙÙ ÙÙ Ø§ÛÙÙ Ú©Ù ÙÛÚÙØ§ÙØª Ø¨Ø§Ø²Ù Ù Ú©Ø§ÙÚ©Ø´Ù Ø¨Ù sql Ø²Ø¯Ù Ù Ø¨Ø§Ø² ÙÙÙØ¯Ù Ø¨Ø§ exe Ø¨Ø±ÙØ§ÙÙ Ú©Ø§Ø±Ú©Ù ÙÛÚÙØ§Ù Ø±Ù Ø¨Ø¨ÙØ¯ ÚØ§Ø±ÙÛ Ø¯ÛÚ¯Ù ÙØ¬ÙØ¯ ÙØ¯Ø§Ø±Ù :ÙØ¨Ø®ÙØ¯: 

Ø§Ú©Ø³Ø³ ÙÙ Ú©Ù ÛÙ ÙØ§ÛÙÙ Ú©Ù Ø¬Ø§ÛÚ¯Ø²ÛÙ ÙÛÚ©ÙÛ ÙØ«Ù sql Ø³Ø±ÙÛØ³Û ÙØ¯Ø§Ø±Ù Ú©Ù ÛØ§Ø² ÙÚ¯Ù Ø¯Ø§Ø±Ù

----------


## sobaisobai

> اکسس هم که یه فایله که جایگزین میکنی مثل sql سرویسی نداره که یاز نگه داره


سلام
اینو خودم میدونستم
ولی اجازه جایگزینی رو نمیده

----------


## Mahmoud Zaad

> سلام
> اینو خودم میدونستم
> ولی اجازه جایگزینی رو نمیده


سلام
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 قرار بدی اجازه جایگزینی میده.

----------


## az.heidarzadeh

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

                    string SqlStr = "USE master RESTORE DATABASE MyDB FROM DISK ='" + txtPath.Text + "' WITH REPLACE";
                    clsMe.exect(SqlStr);

----------


## sobaisobai

> سلام
> 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("پشتیبان با موفقیت بازیابی شد", "بازیابی پشتیبان");
> ...


 سلام
دوست عزیز
اینم میدونستم!!
وقتی برنامه درحال اجراست اجازه Restore کردن رو نمیده
میگه فایل مورد نظر توسط یه برنامه دیگه اشغال شده

----------


## Mahmoud Zaad

> سلام
> دوست عزیز
> اینم میدونستم!!
> وقتی برنامه درحال اجراست اجازه Restore کردن رو نمیده
> میگه فایل مورد نظر توسط یه برنامه دیگه اشغال شده


این فایل رو از اینترنت گرفتم همین کدهایی هست که نوشتم،ببین برای شما کار میکنه!

----------


## mahdi5121

خب فایل شما کار می کنه؛ منتها برنامه ی شما فقط بکاپ و ریستوری می کنه .
من به جای فایل mdb شما، فایل mdf خودم رو نوشتم ولی اصلا" دیگه برای بکاپ هم ارور می ده :

----------


## linux

restore کردن به مراتب کار خیلی حساس تری هست از backup گرفتن در پروژه های بزرگ این وظیقه  dba هست که ریستور کند. در هنگاه restore دیتابیس نباید توسط سایرین در حال استفاده کردن باشد.

----------


## elahejafari

این کد تمام بکاپ هایی که بغیر از مسیر 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);
              }

----------


## sadaf_

من بکاپم درست کار می کنه ولی رستور هنگ می کنه 
ولی رستور رو بردم از یک پروژه دیگه درست کار کرد 
به خاطر اینکه رستور زمانی اتفاق می افته که برنامه run نباشه به اون دیتابیسی که می خواهیم بکاپ بگیریم 
راه کار چیه دوستان؟

----------


## reza_mostafavi63

اگه ديتابيست اكسس هست كه با همون كدي كه قبلا گذاشتم كار خواهد كرد ... مطمئنم كه ميگم ..چون رفتم تست كردم ... حالا اگه تو برنامه شما نميشه ، مشكل از جاي ديگست.... اگه خواستي برنامه رو بزار تا كمكت كنم . 

ولي اگه ديتابيست SQL Server هست ... بايد بگم تا زماني كه سرويس اس كيو ال رو Stop نكني .... نميتوني به فايل هاي ديتابيست دسترسي داشته باشه (حتي نميتوني كپي كني) . پس اول بايد يه راهي بره Stop كردن سرويس پيدا كني .

يك نكته ديگه كه هست اينه كه : اگه ديتابيست رو از داخل VS به پروژت اضافه كني ... VS يك نسخه از اون رو در پوشه اصلي در كنار فايل هاي ديگه نگه ميداره و هر سري با اجراي برنامه ..يك كپي از اون رو به ApplicationDirectory ميندازه ... پس دقت كنيد اين شمارو به اشتباه نندازه .

----------


## nasimsltn7@gmail.com

سلام.
من از یه تابع برای گرفتن 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.*

----------


## omid_csh

سلام
شما اسم دیتابیسی که میخواین ازش Backup بگیرین رو ذکر نکردین.
BACKUP DATABASE DB TO  DISK = 'db.bak'

----------


## nasimsltn7@gmail.com

> سلام
> شما اسم دیتابیسی که میخواین ازش Backup بگیرین رو ذکر نکردین.
> BACKUP DATABASE DB TO  DISK = 'db.bak'


من sql string رو تغییر دادم ولی بازم همون error رو میده  :افسرده: 
   string sql = @"BACKUP DATABASE TO FIX DISK= 'dbtest.bak''"+file+"'";

----------


## omid_csh

سلام
اینجوری بنویس
            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");

----------


## nasimsltn7@gmail.com

بازم خطا ،تغییری نکرد ،error قبل رو میده :افسرده:

----------


## ma.rad

سلام دوست عزیز
کد کاملش رو میزارم:
                        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);
                    }

----------


## ma.rad

اگر بانک اتچ شده(سرور) باید اول دی تچ کنید بعد بکاپ بگیرید.
موفق باشید

----------


## nasimsltn7@gmail.com

ببخشید یه سوال ،من مبتدی هستم .
نیازی نیست کد رو تغییر بدم ؟
آخه error میده :Invalid value for key 'attachdbfilename'.
وقتی قسمت connection آدرس دیتا بیس خودم رو هم مینویسم بازم error میده  :افسرده:

----------


## nasimsltn7@gmail.com

> اگه ممکنه پروژه رو بفرستید.


بفرمایید این برنامه من هستش.

----------


## Mahmoud.Afrad

جناب *nasimsltn7@gmail.com*   شما نام یا مسیر دیتابیس رو مشخص نکردید  از کجا بدونه از چی بکاپ بگیره.
اگر دیتابیس اتچ هست به جای dbname  نام دیتابیس رو بنویسید و اگر نیست  مسیر  فایل دیتابیس رو به جاش بنویسید.

----------


## uniqueboy_ara

سعی کنید برای اینکه به این مشکلات بر نخورید از توابع SMO استفاده کنید
خیلی راحت تر و قشنگ تر میشه هم بکاپ گرفت، هم Restore کرد

----------


## الماس شهر

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

----------


## Mahmoud.Afrad

از این متد ها هم میتونید استفاده کنید        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());
            }
        }

----------


## jivago

سلام
از این کد استفاده کن :

ALTER DATABASE SandoghFamily SET SINGLE_USER with ROLLBACK IMMEDIAT use master; RESTORE DATABASE SandoghFamily FROM DISK='" + openFileDialog1.FileName + "' with REPLACE;");

----------


## conroe7000

سلام 
من تو یک پروژه ای از دیتابیس sql express 2008 در C#‎.Net2010 استفاده کرده ام 
و توسط کانکشن دستی که کانکشن استرین می سازم بهش وصل میشم و اطلاعات رو بر میدارم و ثبت می کنم
می خوام با استفاده از یک کلاس و یک دکمه از دیتابیسم بک آپ بگیرم و بعدا با یک دکمه ی دیگر بازیابی کنم
این امر محقق نمیشه چرا که دیتا بیس من اتچ نشده
من از یک سورس کلاس آماده که از سرویس smo  استفاده می کرد استفاده کردم روی دیتابیس های اتچ شده جواب میده و از master  بک آپ میکیره اما از دیتا بیس من چون اتچ نشده و در آدرس برنامه ی ساخته شده هست بک آپ نمیگیره 
البته همونم ککه از مستر بک آپ می گرفت بازیابیش مشکل داشت
لطفا راهنمایی کنید و در صورت امکان یک سمپل آماده و ساده برای من آپلود کنید
با تشکر از اساتید

----------


## mousa1992

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

حالشو ببر  :چشمک:

----------


## king_of_lionsss

آقاي موسي سلام
اون دوستمون كه اين سوالو پرسيده فكر كنم تشكر يادش رفته 
بنده تست نمودم .جواب داد بهم 
كمال تشكر و قدر اني رو دارم از شما

----------


## conroe7000

سلام
 دستتون درد نکنه 
من واسه امتحانات کمی درگیرم زیاد سر نمیزدم
ممنون از پاسخ کاملتون

اما من یک دانشجوی مبتدیم
این کدها رو کجا بزارم ؟
متغییر هایی که تعریف کردین از چه نوعی هست ؟ DAl چیه ؟ دیتا اداپتر هستش ؟
فقط همین کدها کافیه ؟ کد دیگری نیاز نیست ؟
آیا یوزینگ خاصی نیاز هست یا نه ؟
اون کلاسی رو که (smo) دانلود کرده بودم هم بزارم تو پروژه ؟
باید منو ببخشید که انتظار دارم یکی لقمه رو برام بجوه و بزاره دهنم اما گفتم که این به خاطر مبتدی بودنمه 
انشا الله کمی که پیشرفته تر شدم زکات اینها رو میدم و با همین صحه صدری که شما اساتید دارین و جواب ما رو میدین رفتار کنم

----------


## conroe7000

من به این شکل نوشتم ارور میده نمیدونم دیگ چی کار کنم 
DAl  رو از نوع SQLDataAdapter  تعریف کردم اما Connect  نداشت



با یک حول کوچولو تمومه به خدا
ممنون

----------


## ordebehesht

از لینک زیر اگه دوست داشتی میتونی استفاده کنی
http://www.persiadevelopers.com/arti...ackup-zip.aspx

----------


## mousa1992

سلام دوستان خوبم
معذرت دیر جواب میدم



> بنده تست نمودم .جواب داد بهم 
> كمال تشكر و قدر اني رو دارم از شما


 خوشحالم کارتون راه افتاد 



> DAl  رو از نوع SQLDataAdapter  تعریف کردم اما Connect  نداشت


 دوست عزیز معذرت که توضیحات کامل نبود
DAL در واقع مخفف DataAccessLayer هست که کلاسی رو با این نام تعریف کردم و اونجا با بانک ارتباط برقرار میکنم (در مورد برنامه نویسی سه لایه مطالعه کن)
هر جا که DAl.Connect یود و یا Disconnect شما به جای اون ارتباط با بانک رو Open و Close کن
توی کد شما نمونه ای که ساختید Connection نام داره پس Connection.Open(); و ...
نه دوست عزیز نیازی به کلاس های smo نداری 
سوالی بود در خدمتم
موفق باشید

----------


## ordebehesht

> من به این شکل نوشتم ارور میده نمیدونم دیگ چی کار کنم 
> DAl  رو از نوع SQLDataAdapter  تعریف کردم اما Connect  نداشت
> 
> 
> 
> با یک حول کوچولو تمومه به خدا
> ممنون


dal فکر کنم از یه کلاس نمونه سازی کرده و توش رشته اتصال رو ذخیره کرده

----------


## conroe7000

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

----------


## mohamadreza#

من تقریبا یه چنین حالتی بر خورده بودم ، وقتی کاربر می خواست برنامه رو لاگین کنه قبل از لاگین منطقی(لود شدن فرم لاگین و هیچ عمل خاصی صورت نگرفته فقط فرمی لود شده) و قبل از باز شدن هیچ اتصالی رستور انجام شه...

برای بک آپ گرفتن هم ، این کار غیر منطقی  هست که شما هنگامی که برنامه در حال اجراست بک آپ بگیری ، این کارو هم میتونی هنگام خروج از برنامه دقیقا وقتی اتصالات بسته شدند انجام بدی...

 :لبخند:

----------


## mousa1992

دوستان این تاپیکو ببینید

----------


## firoozi90

سلام دوستان 
اونطور که از پست های قبلی متوجه شدم خیلی از دوستان دنبال کد بکاپ و  ریستور پایگاه داده هستند که درست کار کنه و مشکلی نداشته باشه. و به این  دلیل تصمیم گرفتم لینک دانلود کدی رو که خودم نوشتم و کاملا جواب داده  براتون بزارم که شما دوستای عزیز هم بتونید استفاده کنید.
برای دانلود روی لینک زیر کلیک کنید
*
دانلود سورس backup و restore از دیتابیس sql با زبان سی شارپ*
*پسورد:www.papro.blogfa.com*

----------


## danialafshari

میزنم ولی 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
مشکل این کد چیه؟

----------


## firoozi90

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

----------


## danialafshari

> کانکشن استرینگتون مشکل داره احتمالا.
> از عواقب کپی و پیست هستش.لطفا بررسی کنید


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

----------


## h_m0zhdeh

من کد رو یه کم تغییر دادم خطای بالا رو دیگه نمیده ولی یه خطای جدید میده(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);
            }


اینم کدمه

----------


## h_m0zhdeh

فهمیدم مشکل از چی بود
آقای danialafshari این کد رو امتحان کنید همونطور که گفتم تغییر یافته کد دوستمون firoozi90  هست.
امیدوارم شما هم مثل من جواب بگیرید


  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", connect);
                //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);
            }

----------


## firoozi90

دوستان همونطور که گفتم مشکل شما کانکشن استرینگتون هست.من در پروژه ی مربوط به کد خودم دیتابیس را کپی کردن در پوشه ی دیباگ برنامه و سپس کانکشنم رو به اون وصل کردم که دیگه نیازی به اتچ کردن دیتابیس نباشه.
حالا شما می تونید کانکشن استرینگ من رو عوض کنید و کانکشن خودتون رو بزارید

----------


## پیام حیاتی

سلام
چطور میتونم برای برنامه دفترچه تلفن یه دکمه Bakup ایجاد کنم؟

----------


## danialafshari

دیتابیس برنامتون چیه؟

----------


## پیام حیاتی

دیتابیس SQL هست.

----------


## vapa_71

دوستان من این کد رو از توی تایپیک ها گیر آوردم اما ارور میده کسی میدونه مشکل چیه
از دیروز دارم میگردم اما کد مناسبی پیدا نکردم

bool bBackUpStatus = true;

            Cursor.Current = Cursors.WaitCursor;

            if (Directory.Exists(@"d:\SQLBackup"))
            {
                if (File.Exists(@"d:\SQLBackup\Report_db1.bak"))
                {
                    if (MessageBox.Show(@"اولی", "اولی", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        File.Delete(@"d:\SQLBackup\Report_db1.bak");
                    }
                    else
                        bBackUpStatus = false;
                }
            }
            else
                Directory.CreateDirectory(@"d:\SQLBackup");

            if (bBackUpStatus)
            {
                //Connect to DB
                SqlConnection connect = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector  y|\Report_db.mdf;Integrated Security=True;User Instance=True");
                connect.Open();
                //-------------------------------ww.papro.blogfa.com--------------------------------

                //Execute SQL------ww.papro.blogfa.com---------
                SqlCommand command;
                command = new SqlCommand(@"backup database Report_db to disk ='d:\SQLBackup\Report_db1.bak' with init,stats=10", connect);
                command.ExecuteNonQuery();
                //---------------------------------ww.papro.blogfa.com-------------------------------------

                connect.Close();

                MessageBox.Show("دومی", "دومی", MessageBoxButtons.OK, MessageBoxIcon.Information);

----------


## vapa_71

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

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

----------


## sgn2006

سلام
این خطا می گه Report_db  وجود نداره ، این دیتا بیس رو درست کردی؟
مسیرش درسته؟ یعنی همچین مسیری وجود داره؟

----------


## vapa_71

دیتابیس داخل پوشه خود برنامه هست

----------


## sgn2006

به این لینک یه نگاهی بنداز
http://archive.msdn.microsoft.com/SQ...ringTitle=Home

یه پروسیجر تعریف می کنه که به صورت اتوماتیک می تونی از همه DB هات Backup بگیری و همچنین هنگام صدا زدن پروسیجر هم می تونی اسم DB رو بدی

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

----------


## sgn2006

اینم خوبه 
http://www.codeproject.com/Articles/...uler-Framework

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

----------


## sgn2006

این err که داره می ده خیلی غیر منطقیه ...
شما connection زدی به SQLEXPRESS\. بعد داری یه دیتا بیس بک آپ می گیری...

حالا می گه دیتا بیس وجود نداره : (چند دلیل داره)
1- دیتا بیس وجود نداره
2- اسم رو اشتباه زدی
3- اون مسیر  ReadOnly هست
4- مسیر اشتباه 
5- کانکت نشده (برای کانکت شدن فقط connectionstring کافی نیست یه کاری باهاش انجام بده ببین کار می کنه)

البته یه چیزی می گم مطمئن نیستم : زمانی که داری connection را تعریف می کند از \ استفاده کردی توی #C همچین مواقعی از \\ استفاده می کنن البته یادم نیست توی command  هم همینجور باشه...

----------


## vapa_71

این کد رو توی یکی از تایپیک ها دیدم و واسه خودم تغییر دادم دیتابیس من express هست و داخل پوشه خود برنامه قرار داره

----------


## mortezasar

سلام دوست عزیز سرچ و پیدا کردنش فقط 30 ثانیه طول کشید 
اینم آدرس تاپیک
https://barnamenevis.org/showthread.p...8C%D8%B1%DB%8C

----------


## vapa_71

> سلام دوست عزیز سرچ و پیدا کردنش فقط 30 ثانیه طول کشید 
> اینم آدرس تاپیک
> https://barnamenevis.org/showthread.p...8C%D8%B1%DB%8C


داداش حداقل یه نگاه مینداختی خب منم از همین کد استفاده کردم دیگه

----------


## vapa_71

بچه ها این نمونه برنامه منه اگه کسی میتونه واسه این برنامه یک بکاپ و ریستور بذاره تا منم اشتباهم رو متوجه بشم

ممنون از دوستان

----------


## uniqueboy_ara

اینم از جواب شما :)

----------


## vapa_71

این ارور واسه چیه ؟

----------


## vapa_71

به گزارش گیری گیر داده مشه یک مقدار در مورد کاری که کردی توضیح بدی تا خودم انجام بدم
البته نیاز به توضیح کلی دارم چون تازه کارم

----------


## ma.rad

> این ارور واسه چیه ؟


خطایی که تو قسمت error ها گرفته چیه اون ها رو بزار

----------


## danialafshari

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

----------


## vapa_71

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


خدا خیرت بده پدرم در اومد 2 روزه دارم از این تایپیک به اون تایپیک اگه لطف کنی بذاری که ممنون میشم

فقط من بانکم توی خود برنامه هست و به صورت experess هست و توی C#‎ ساختمش

----------


## danialafshari

بفرمائید:
ریستور رو هنوز وقت نکردم ولی این بک آپ:
SQL Server 2005

----------


## vapa_71

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

----------


## danialafshari

دیتابیس رو attach کردی؟

----------


## vapa_71

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

----------


## vapa_71

این کل برنامه است اگه میشه لطف کنین و علتشو بهم بگین

----------


## danialafshari

سلام
من sql 2005 نصبه و attach نمیشه فکر می کنم اگر شما در اون سیستم در management دیتابیس رو attach کنید دیگه مشکلی پیش نیاد

----------


## vapa_71

من دیتابیس رو داخل خود C#‎ ساختم چطوری باید attach کنم ؟

----------


## danialafshari

sql management رو باید سر سیستم مقابل نصب کنی و سرویس

----------


## vapa_71

روی اون سیستم هم همون sql و ویژوال استدیو نصبه ها ؟ لازمه اسکیوال جدا نصب کنم ؟

----------


## vapa_71

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

----------


## vapa_71

اینم ارور توی برنامه  :ناراحت:

----------


## hosseinzamani13677

من همیشه به شکل زیر Backup  میگیرم مشکلیم ندارم، ببین شاید بدردت بخوره
            saveFileDialog1.FileName = "";
            saveFileDialog1.Filter = "Backup File|*.bak";
            saveFileDialog1.ShowDialog();
            if (saveFileDialog1.FileName != "")
            {
                btnBackup.Enabled = false;
                this.Cursor = Cursors.WaitCursor;
                string strBackupCommand = "USE MASTER BACKUP DATABASE [نام دیتابیس] TO DISK = N'" + saveFileDialog1.FileName + "' WITH NOFORMAT, NOINIT, " +
                    "NAME = N'" + saveFileDialog1.FileName + "-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10";
                SettingClass.Backup(strBackupCommand);
                MessageBox.Show("پشتیبان گیری با موفقیت صورت گرفت", "کاربر گرامی");
                btnBackup.Enabled = true;
                this.Cursor = Cursors.Default;
            }
            else
            {
                MessageBox.Show("نام فایلی برای پشتیبان گیری اعلام نگردید", "کاربر گرامی", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign);
            }

        public static void SettingClass(string SqlCom)
        {
            com.CommandText = SqlCom;
            com.CommandType = System.Data.CommandType.Text;
            com.Connection = new SqlConnection(ConnectionString);
            SqlDataReader dr = null;
            try
            {
                com.Connection.Open();
                dr = com.ExecuteReader();
            }
            catch
            {
            }
            finally
            {
                if (com.Connection.State == ConnectionState.Open)
                    com.Connection.Close();
            }
        }

----------


## danialafshari

سلام کد درون کلاس رو نزاشتید



> SettingClass.Backup(strBackupCommand);

----------


## vapa_71

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

----------


## vapa_71

به نظرت سیستم دومی چی کم داره من همون نسخه از ویژوال و نت فرم رو روش نصب کردم

----------


## danialafshari

> به نظرت سیستم دومی چی کم داره من همون نسخه از ویژوال و نت فرم رو روش نصب کردم


فکر میکنم نیاز هست که Sql management , service نصب بشه و بانک attach بشه
شاید عصر یا شب تست کردم

----------


## vapa_71

> فکر میکنم نیاز هست که Sql management , service نصب بشه و بانک attach بشه
> شاید عصر یا شب تست کردم


آخه روی سیستم خودم sql نضب نیست و اصلا با پروژه شما هم کاری نکردم و مشکلی هم نداشت
جالب اینه فایل بکاپ هم ایجاد میشه اما چون ریستور ندارم نمیشه چکش کرد

----------


## vapa_71

داداش من این کد رو پیدا کردم هم بکاپش واسم کار میکنه هم ریستورش اما یک مشکل داره وقتی 1 بار بکاپ میگیره برای بار دوم فایل قبلی رو پاک نمیکنه که بکاپ جدید رو جایگزین کنه و همون بکاپ اول باقی میمونه
فایل بکاپ رو داخل خود پوشه برنامه میسازه

SqlCommand cmd = new SqlCommand();
            cmd.Connection = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirecto  ry|\\Report_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 ='" + Application.StartupPath + "\\backup.bak'";
            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("database backup: ok");

----------


## vapa_71

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

----------


## danialafshari

شرط براش بزار و از کلاس system.io استفاده کن می تونی قبلی رو پاک کنی !

----------


## vapa_71

آدرس دهیش چطوره توی مثال شما خوب بود اما چون ریستور نداشت از این کد استفاده کردم خواستم اون شرط شما رو بذارم اما چون مسیر ذخیره سازی توی خود پوشه برنامه هست نمیدونستم چکار کنم

----------


## hosseinzamani13677

کد کلاس
        public static void SettingClass(string SqlCom)
        {
            com.CommandText = SqlCom;
            com.CommandType = System.Data.CommandType.Text;
            com.Connection = new SqlConnection(Connectionstring);
            SqlDataReader dr = null;
            try
            {
                com.Connection.Open();
                dr = com.ExecuteReader();
            }
            catch
            {
            }
            finally
            {
                if (com.Connection.State == ConnectionState.Open)
                    com.Connection.Close();
            }
        }

----------


## hosseinzamani13677

کد بازگرداندن فایل پشتیبان  Restore
  openFileDialog1.FileName = "";
                openFileDialog1.Filter = "Backup File|*.bak";
                openFileDialog1.Title = "بازیابی بانک اطلاعاتی";
                openFileDialog1.ShowDialog();
                if (openFileDialog1.FileName != "")
                {
                    String strRestoreCommand = "USE MASTER RESTORE DATABASE [نام بانک] FROM DISK = N'" + openFileDialog1.FileName + "' WITH FILE = 1, NOUNLOAD, " +
                        "REPLACE, STATS = 10";
                    SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=نام بانک;Integrated Security=True");
                    try
                    {
                        SqlDataReader dr = null;
                        con.Open();
                        SqlCommand sqlCommand = new SqlCommand(strRestoreCommand, con);
                        dr = sqlCommand.ExecuteReader();
                        MessageBox.Show("بازیابی اطلاعات با موفقیت انجام پذیرفت", "کاربر گرامی");
                    }
                    catch
                    {
                        return;
                    }
                    finally
                    {
                        con.Close();
                    }

----------


## vapa_71

دوست عزیز شما کانکشن رو چطور تعریف کردین ؟

----------


## h_m0zhdeh

با سلام 
من یه کد برای restore کرن دیتا بیس نوشتم که از اکثر راههای پیشنهادی دوستان استفاده کردم ولی خطای 
exclosive access could not be obtained because the database is in use.
RESTORE DATABASE is terminating abnormally.
changed database context to 'master' 

رو میده ، که گویا یه مشکلی با دیتابیس master داره 
کسی میدونه مشکل من چیه؟(فقط نگید connection string چون با همین connection کد backup داره درست کار می کنه)
میشه منو راهنمایی کنید؟؟؟؟؟؟؟ :افسرده: 

  Cursor.Current = Cursors.WaitCursor;
 
            try
            {
                if (File.Exists(@"d:\BackupProjectMelkAra\MelkAra_Db.  bak"))
                {
                    if (MessageBox.Show("آیا از جایگزینی اطلاعات فایل پشتیبان گیری اطمینان دارید؟", "جایگزینی فایل پشتیبان", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        //Connect SQL-------ww.papro.blogfa.com--------------------------------
                        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-----------------------
 
                        //Excute SQL----------------
                        SqlCommand command;
                        //command = new SqlCommand("use master", connect);
                        //command.ExecuteNonQuery();


                        //command = new SqlCommand(@"USE [master]; RESTORE DATABASE [" + Application.StartupPath + "\\MelkAra_Db.mdf] FROM DISK = N'MelkAra_Db.bak' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10", connect);
                         //command = new SqlCommand(@"restore database MelkAra_Db from disk = 'd:\BackupProjectMelkAra\MelkAra_Db.bak'", connect);
                        command = new SqlCommand(@"USE [master]; RESTORE DATABASE [" + Application.StartupPath + "\\MelkAra_Db.mdf] FROM DISK = 'd:\\BackupProjectMelkAra\\MelkAra_Db.bak'  WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10", connect);
                        
                        command.ExecuteNonQuery();
                        //---------------------------------ww.papro.blogfa.com------------------------------
                        connect.Close();
 
                        MessageBox.Show("جایگزینی فایل پشتیبانی با موفقیت انجام شد", "جایگزینی فایل پشتیبان", 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);
            }

----------


## Alfred188

درود، برای restore کردن باید اول دسترسی به بانک رو قطع کنید (در صورت امکان از یه برنامه جانبی استفاده کنید)
من از این کد استفاده می کنم

string connStr2 = "Data Source=.\\SQLEXPRESS;Initial Catalog=master;Integrated Security=True";
        string pro = "Data Source=.\\SQLEXPRESS;Integrated Security=True";

        private void radButton2_Click(object sender, EventArgs e)
        {
            openFileDialog1.DefaultExt = "BAK";
            openFileDialog1.FileName = "backup file ";
            openFileDialog1.Filter = @"SQL Backup Files (*.BAK)|*.BAK |All Files(*.*)|*.*)";
            openFileDialog1.Title = "Backup SQl files";

       
                bool fg = false;
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {

                    //Drop database
                    string sql0 = "DROP DATABASE [ِDatabaseName]";
                    SqlConnection thisconnection0 = new SqlConnection(pro);
                    SqlCommand mycommand0 = new SqlCommand(sql0, thisconnection0);
                    try
                    {
                        thisconnection0.Open();
                        mycommand0.ExecuteNonQuery();
                    }
                    catch {
                        fg = false;
                        MessageBox.Show("خطا در بازیابی پشتیبان،کد 149");
                    }
                    finally
                    {
                        thisconnection0.Close();
                    }
                  
                    bool nj = false;

                    string connString = "Data Source=.\\SQLEXPRESS;Initial Catalog=master;Integrated Security=True";
                    string cmdText = "select * from master.dbo.sysdatabases where name='DatabaseName'";

                    bool bRet = false;
                    using (SqlConnection sqlConnection = new SqlConnection(connString))
                    {
                        sqlConnection.Open();
                        using (SqlCommand sqlCmd = new SqlCommand(cmdText, sqlConnection))
                        {
                            SqlDataReader reader = sqlCmd.ExecuteReader();
                            bRet = reader.HasRows;
                            nj = reader.HasRows;
                            reader.Close();
                        }
                        sqlConnection.Close();
                        
                    }

                    if ((fg == true)&&(nj==false))
                    {
                        try
                            {
                        //restore database
                                using (SqlConnection conn1 = new SqlConnection(connStr2))
                                {
                                    string sqlStmt = String.Format("RESTORE DATABASE [ِDatabaseName] from DISK='{0}'", openFileDialog1.FileName);
                                    using (SqlCommand bu3 = new SqlCommand(sqlStmt, conn1))
                                    {
                                        conn1.Open();
                                        bu3.ExecuteNonQuery();
                                        conn1.Close();
                                    }
                                    label1.Text = "با موفقیت انجام شد";


                                }//end of using connection
                            }
                        catch
                        {
                            MessageBox.Show("خطا در بازیابی پشتیبان،کد 151");
                        }

                    }
                    else
                    {
                        MessageBox.Show("خطا در بازیابی پشتیبان،کد 150");
                    }

                }//end of open dialog
           
        }


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

----------


## veniz2008

سلام. پیغام خطا میگه که دیتابیس شما در حال استفاده هست و طبیعی هم هست که دیتابیس فعال رو نمیشه از درون خودش ری استور کرد. شما باید اول دیتابیس رو offline کنید و بعد اقدام به ری استور کنید. در تاپیک زیر و در پست 19 مراحل و کد ری استور رو بصورت کامل قرار دادم.
موفق باشید.
https://barnamenevis.org/showthread.p...ghlight=backup

----------


## h_m0zhdeh

اینم تغییراتی که به کدم دادم و درست شد
امیدوارم به درد کسایی که این تاپیک رو می بینند بخوره :بوس: 


 Cursor.Current = Cursors.WaitCursor;
 
            try
            {
                if (File.Exists(@"d:\BackupProjectMelkAra\MelkAra_Db.  bak"))
                {
                    if (MessageBox.Show("آیا از جایگزینی اطلاعات فایل پشتیبان گیری اطمینان دارید؟", "جایگزینی فایل پشتیبان", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                    {
                        //Connect SQL-------ww.papro.blogfa.com--------------------------------
                        SqlConnection connect;
                        string con = "Data Source=.\\SQLEXPRESS; AttachDbFilename=" + Application.StartupPath + "\\MelkAra_Db.mdf; Integrated Security=True; Connect Timeout=30; User Instance=True";
                      
                        connect = new SqlConnection(con);
                        connect.Open();

                        SqlCommand command;

                        //بستن تمامی کانکشن ها
                        string Alter1 = @"ALTER DATABASE [" + Application.StartupPath + "\\MelkAra_Db.mdf ] SET Single_User WITH Rollback Immediate";
                        SqlCommand Alter1Cmd = new SqlCommand(Alter1, connect);
                        Alter1Cmd.ExecuteNonQuery();
                        // بازگردانی اطلاعات پشتیبانی گرفته شده
                        command = new SqlCommand(@"USE [master]; RESTORE DATABASE [" + Application.StartupPath + "\\MelkAra_Db.mdf] FROM DISK = 'd:\\BackupProjectMelkAra\\MelkAra_Db.bak'  WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10", connect);
                        command.ExecuteNonQuery();
                        // باز کردن تمامی کانکشن ها
                        string Alter2 = @"ALTER DATABASE [" + Application.StartupPath + "\\MelkAra_Db.mdf] SET Multi_User";
                        SqlCommand Alter2Cmd = new SqlCommand(Alter2, connect);
                        Alter2Cmd.ExecuteNonQuery();

                        //---------------------------------ww.papro.blogfa.com------------------------------
                        connect.Close();
 
                        MessageBox.Show("جایگزینی فایل پشتیبانی با موفقیت انجام شد", "جایگزینی فایل پشتیبان", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.Close();
                    }
                }
                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);
            }

----------


## boysilent

سلام دوستان عزیز این کد رو برای بکاپ استفاده میکنم ولی این خطارو میده 
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

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

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

موفق باشید.

----------


## boysilent

اونو درست کردم ولی میگه که دیتابیسی که نوشتید اسمشو وجود نداره؟؟
database does not exist????
عجیبه ها

----------


## Mahmoud.Afrad

دیتابیس که اتچ نشده که شما فقط نامش رو نوشتید. باید مسیر کامل دیتابیس رو بنویسید:
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

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

----------


## boysilent

نشد دوست عزیز نشدمتن خطا اینه 
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

/// <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

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

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

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

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

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

*نمونه برنامه های کوچک و مفيد در سي شارپ*

----------


## ordebehesht

به این لینکها سر بزن
http://www.persiadevelopers.com/arti...ackup-zip.aspx
http://www.persiadevelopers.com/arti...ver-Agent.aspx

----------


## mohammad2407

دوست عزیز SQL-Demo مربوط میشه به SQLServer2000 من از 2008 استفاده میکنم دو لینکی که دادی برای من هیچ کاربردی نداره 

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

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

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

Microsoft Visual Studio 2010
Microsoft Visual Studio 2012
SQL Server2008

----------


## ordebehesht

ببن شاید این لینک بدردت خورد البت یه فایله
http://dl.sourcebaran.com/download/152/5Problem.rar

----------


## mohammad2407

ممنون 

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


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

مشکل کاملا حل شد 

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

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

----------


## نیما اکبری

سلام من یک کد Backup  گیری و Restore دارم که کد Backup   به درستی کار می کند ولی موقعی که کد Restore را اجرا می کنم با خطایی زیر رو به رو می شوم .در ضمن من از Microsoft SQL Server 2008 برای بانک اطلاعاتی خود استفاده می کنم. و در موقع اجرای  برنامه آنرا چه ببندم و چه باز باشد باز هم این خطا داده می شود. باید چکار کنم. تا این خطا رفع شود؟ :متفکر: 
2013-02-15_171924.jpg
2013-02-15_171627.jpg

----------


## veniz2008

سلام. پیغام خطا میگه که دیتابیس شما در حال استفاده هست و طبیعی هم هست که  دیتابیس فعال رو نمیشه از درون خودش ری استور کرد. شما باید اول دیتابیس  رو offline کنید و بعد اقدام به ری استور کنید. در تاپیک زیر و در پست 19  مراحل و کد ری استور رو بصورت کامل قرار دادم.
موفق باشید.
https://barnamenevis.org/showthread.p...ghlight=backup

----------


## hossein_sh2008

سلام
دوستان من یک بانک با sql express خود سی شارپ طراحی کردم بدون sql server نصب باشه آیا امکان داره کد بک آپ و ری استور اون رو دوستان اینجا قرار بدن


با تشکر

----------


## vapa_71

میذارمش توی تگ 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

من برای ری استور کردن کردن بانک کد زیر رو میزنم :اما ارورو میده بانک در حال استفادست ...چیکارش کنم؟؟؟  	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

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

و حالا سوالم
من یه برنامه طراحی کردم که دیتابیسش 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

سلام
بفرما دوست عزیز
http://uplod.ir/lhqaizj2czbm/5Problem.rar.htm

----------


## saeedgholami

این 5 مسئله توش توضیح داده
Connection String  
Load Without Attach  
Add Picture to SQL  
Attach & Detach  
BackUp & Restore


موفق باشید

----------


## naser_feb8646

سلام دوباره
دوست عزیز من از کدی که شما داده بودین استفاده کردم
زمان 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

سلام
ببین این میتونه کمکت کنه
http://stackoverflow.com/questions/4...base-is-in-use

----------


## mahnaz0098

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

 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

داره میگه که پارامتر Recovery and replace رو نزاشتین
یک سرچ انجام بدید درباره این کد ، نمونه های کاملی گیرتون میاد

----------


## patrick5053

سلام دوستان من از برنامم بكاپ ميگيرم ولي وقتي رستور ميكنم خطا ميده ، اينم متن خطا راهنمايي كنيد لطفا

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

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

خدمت دوست عزيز هم بگم من سرچ كردم ولي همه كدها و نمونه ها همين مشكل رو داشتند.
البته چند روز اول كه اين كدها رو نوشته بودم خوب كار ميكرد نميدونم چرا يك ماه شده كه ديگه رستور نميكنه و اين ارور رو نمايش ميده

----------


## patrick5053

دوست عزيز شما برامون اين خطا رو معني كن ما هم ياد بگيريم اگه زحمتي نيست

----------


## vhdysf

از این استفاده کن:
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

> از این استفاده کن:
> 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

http://www.bestprogrammers.blogfa.com/

----------


## 5225507

سلام، دوستان
 :ناراحت:  :گریه:  :ناراحت:  :گریه:  :ناراحت:  :گریه:  :ناراحت:  :گریه:  :ناراحت:  :گریه:  :ناراحت:  :گریه:  :ناراحت:  :گریه: 
کسی هست که کمکم بکنه
نحوه بکاپ گرفتن از sqlexpress رو می خواستم

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

این هم کدش:



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

جستجو كن مطلب زياده :لبخند گشاده!: 
پشتيبان گيري و بازيابي از پايگاه داده

----------


## keyvan_s89

سلام من با این کد از دیتابیس 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

باید دیتابیس را به حالت stop درآورید بعد...

----------


## keyvan_s89

> سلام.
> در تاپیک زیر هم backup و هم Restore رو بصورت کامل توضیح دادم.
> موفق باشید.
> https://barnamenevis.org/showthread.p...ghlight=backup


مرسی دوست عزیز ولی من مشکلم فقط تویه restore هست.
موقع backup گرفتن هیچ اروری نمیده

----------


## veniz2008

> مرسی دوست عزیز ولی من مشکلم فقط تویه restore هست.
> موقع backup گرفتن هیچ اروری نمیده


 خوب کد restore اش رو استفاده کنید و اگر دیدید که backup اش هم بدردتون خورد میتونید استفاده کنید. ضمنا" روشی که در اون تاپیک گفتم با استفاده از stored procedure هاست که یکی از بهترین و پر سرعت ترین و امن ترین روش هاست.
متاسفانه اکثر کدهایی که برای Restore وجود داره دارای اشکال هست و من خودم این کد رو از بین چندین کد انتخاب کردم.(کاملا تست شده است).
موفق باشید

----------


## R_Rajaee_Rad

برای تمامی کسایی که دیتابیسشون رو با 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

> خوب کد restore اش رو استفاده کنید و اگر دیدید که backup اش هم بدردتون خورد میتونید استفاده کنید. ضمنا" روشی که در اون تاپیک گفتم با استفاده از stored procedure هاست که یکی از بهترین و پر سرعت ترین و امن ترین روش هاست.
> متاسفانه اکثر کدهایی که برای Restore وجود داره دارای اشکال هست و من خودم این کد رو از بین چندین کد انتخاب کردم.(کاملا تست شده است).
> موفق باشید


 کد های restore رو نوشتم ولی برای backup رو قاطی کردم میشه یه بار کد backup رو بزارید ؟

----------


## vapa_71

بکاپ گیری

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

بخ نظر شما با استفاده از dllهای Smo بیاییم بک آپ و ریستور بگیریم از دیتابیس مشکلی نسبت به روش ساده هستش استفاده از dll های خود vs

----------


## majid4

سلام

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

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

----------


## keyvan_s89

سلام

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

سلام 
از لینک زیر دانلود کن (فایل آموزشی)
http://alexmcse.blogsky.com/1392/01/13/post-13/

----------


## majid4

> سلام
> 
> backup
> 
> 
> string bname = DateTime.Now.ToString("yyyy-MM-dd-HH-mm");
> SaveFileDialog saveFileDialog = new SaveFileDialog();
> saveFileDialog.AddExtension = true;
> saveFileDialog.CheckFileExists = false;
> ...



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

----------


## ali_seifi_21

من از کد زیر برای ریستور کردن دیتا بیس استفاده کردم اما نمی دونم بجای use master باید چی نوشت.لطفاً راهنمایی کنید

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

----------


## alexmcse

سلام
http://alexmcse.blogsky.com/1392/01/13/post-13/

----------


## majid4

دوستان این کد مشکلی داره ؟

            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

سلام 
من يك تابع تعريف كردم براي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

سلام

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

سلام خسته نباشید من دستور باز گردانی نوشتم که بانک اطلاعات رو به حالت اولش بر گردانی اگر هم وجود داشت برگرداند و جایی گزین بانک قبلی کنه ولی اشکال در ارتباط با دیتابیس میده ممنون میشم کمک کنید تا بدونم اشکال این خطا چی هستش با تشکر.
این هم کد های نوشته شده من.
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.تائید_تنها,Ms  gIcon.Warning);
            }
        }
این کدای که من نوشتم ممنون میشم دلیل خطا برنامه من رو بگید که خطا اشکال در ارتباط با بانک اطلاعات رو میده.

----------


## hamide741

سلام اين كد رو تو چه قسمتي بنويسم توي خود تابع ريستور يا تو رخداد كليد با توم

----------


## hamide741

با سلام وتشكر ديدمش ولي كمكي به من نكرد

----------


## davidrobert

خواهش میکنم یکی کمک کنی من رو خیلی نیاز دارم به این کد.برای بازگردانی اطلاعات

----------


## keyvan_s89

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

سلام شما وقتی که ری استور میکنید در واقع فایل  پشتیبان را با دیتا بیس جابه جا میکنید  در حالی که دیتا بیس شما در حال استفاده است پس با اررور روبه رو میشید با این کد که میزارم مشکلتون حل میشه(@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

سلام برادرا من برای برای 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

من میخوام با سی شارپ کد 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

دوست عزیز توی خوده اررور با زبون ساده گفته که دیتابیستون در حال استفادس و برای رفع این مشکل میتونید از کوئری USE MASTER استفاده کنید تا دیگه دیتابسی که میخواین restore کنید وصل نباشه

----------


## merlin425

خوب کد use master رو نوشتم

----------


## asgharjoon2

> سعی کنید برای اینکه به این مشکلات بر نخورید از توابع SMO استفاده کنید
> خیلی راحت تر و قشنگ تر میشه هم بکاپ گرفت، هم Restore کرد


 توابع SMO چیه میشه توضیح بدی

----------


## barnamenevisforme

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

----------


## reza69

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

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

بنده از این کد برای برگرداندن اطلاعات استفاده میکنم.
 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

> بنده از این کد برای برگرداندن اطلاعات استفاده میکنم.
>  string Filename;
>             OpenFileDialog openFileDialog1 = new OpenFileDialog();
>            
>             if (openFileDialog1.ShowDialog() == DialogResult.OK)
>             {
>                 Filename = openFileDialog1.FileName;
>             }
> 
> ...


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

----------


## reza69

سلام
من موقع ری استور این ارور رو می گیرم
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

اکسس و sql نداره . شما دارید نام دیتابیس رو با پسوندش به برنامه میدی. خودت میتونی sql ش رو بنویسی.

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

----------


## reza69

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

 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

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

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

> اکسس و sql نداره . شما دارید نام دیتابیس رو با پسوندش به برنامه میدی. خودت میتونی sql ش رو بنویسی.
> 
>  File.Copy(Filename, Application.StartupPath + @"\dbbackup.bak", true);


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

----------


## reza69

سلام من موقع ری استور کردن بک اپ این ارور رو میگیرم.
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

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

----------


## reza69

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


 یعنی میگید اول دیتابیس mobile رو آفلاین کنم بعد این کد رو اجرا کنم؟

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

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

----------


## reza69

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

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

----------


## davidrobert

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

----------


## saeedchoopani

سلام.از دوستان کسی میتونه کد زیر رو برای بازگردانی اطلاعات در سی شارپ توضیح بده?جای 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

سلام 

اخرین پست این تاپیک 

موفق

----------


## saeedchoopani

> سلام 
> 
> اخرین پست این تاپیک 
> 
> موفق


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

----------


## mahmoud_monfaredi

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

----------


## bazardeh

سلام دوست عزیز

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

بک آپ گیری


    SqlConnection sq = new SqlConnection("server=(local);database=RSR;integra  ted 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;integra  ted 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

جواب نگرفتم
 به RSR خطا گرفت(ابتدای برنامه نوشتم 
publicstring RSR
 خطا بر طرف شد ) 
تغییر دومی که دادم این بود آدرس پایگاه دادم که 
SQLEXPRESS رو با آدرسی که داده بودید عوض کردم
(اگه بخام از داده های یک جدول خاص داخل فرمم بکاپ بگیرم چی )

----------


## bazardeh

به جای RSR نام بانک نو بزار آقا محمود عزیز  :لبخند:

----------


## mahmoud_monfaredi

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

using System.Data.SqlClient;
namespace WindowsFormsApplication1
{
publicpartialclassForm1 : Form
{
public Form1()
{
InitializeComponent();
}
privatevoid button1_Click(object sender, EventArgs e)
{
SqlConnection sq = newSqlConnection(@"Data Source = .\SQLEXPRESS;
AttachDbFilename = |DataDirectory|\Library.mdf;
Integrated Security = True;
User Instance = True");
SaveFileDialog sfd = newSaveFileDialog();
sfd.Filter = "*.bak|*.bak";
if (sfd.ShowDialog() == DialogResult.OK)
{
SqlCommand com = newSqlCommand("backup database " + Library + " to disk='" + sfd.FileName + "'", sq);
sq.Open();
com.ExecuteNonQuery();
sq.Close();
MessageBox.Show("تهیه نسخه پشتیبان از اطلاعات با موفقیت انجام شد", "پیغام", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
privatevoid button2_Click(object sender, EventArgs e)
{
SqlConnection sq = newSqlConnection(@"Data Source = .\SQLEXPRESS;
AttachDbFilename = |DataDirectory|\Library.mdf;
Integrated Security = True;
User Instance = True");
OpenFileDialog ofd = newOpenFileDialog();
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 = newSqlCommand(query, sq);
sq.Open();
com.ExecuteNonQuery();
sq.Close();
MessageBox.Show("بازیابی اطلاعات از پشتیبان با موفقیت انجام شد", "پیغام", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}

----------


## alexmcse

لینک دانلود نحوه بک آپ گیری و بازیابی
http://s4.picofile.com/file/77946702..._sql_.rar.html

----------


## oliya24

سلام دوستان خسته نباشید برای بک اپ گیری با سی شارپ ایا مدل دیتابیسها فرق میکنه منظورم اکسپرس و یا نسخ کامل هست ؟؟؟ اگر کسی از دوستان کد بک اپ و ریستور رو داره با مدلهای مختلف بانک بزاره ممنون میشم

----------


## vapa_71

بکاپ
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

ریستور

 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

این کد نام دیتابیس رو بر اساس تاریخ و زمان ذخیره میکنه و ریستور کردن هم میتونه بر اساس همون تاریخ و زمان باشه

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

----------


## vapa_71

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

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

----------


## ppp1486

درود بر همه شما دوستان 
چطور می شه با استفاده از کدهای سی شارپ از برنامه ای که دیتابیس اون به 
SQL SERVER 2008 متصل هست بک آپ و Restore نوشت؟؟؟ 
تاکید می کنم با   SQL Express رو نمی خوام با دیتابیسی که به SQL SERVER 2008 وصل هست رو می خوام ممنونم می شم دوستان راهنمایی کنن

----------


## rostamkhani

سلام

این 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

این Microsoft.SqlServer.Management.Smo.Server smoServer چی هست؟؟؟ چطوری بشناسونمش به visual studio ؟؟؟؟

----------


## magic69

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

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

----------


## mohammadseven

باسلامبعد از اینکه Backup می گیرم برای restore کردن ی چنین پیغامی رو میده نمیدونم مشکل چیه. لطفا ی راهنمایی کنید.(از SQLServer 2012 و VS 2010 استفاده می کنم)

BkpSQL.JPG

----------


## tiyam_amiri

*backup در سی شارپ 				*

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

----------


## pooria_googooli

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

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

ممنون
این کد ها را در کلیک دکمه بگذارم دیگه؟

----------


## hraeissi

> Backup:
>  private void bbackup_Click(object sender, EventArgs e)
>         {
>             String Strbackup1,Strbackup2;
>             DateTime dteDate;
>             dteDate = DateTime.Now;
> 
>           
>             Strbackup2 = Application.StartupPath + @"\backup\" ;
> ...


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

----------


## hraeissi

savefiledialog  مشکلش حل شد فقط text box برای چیه

----------


## hraeissi

System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(*DataBase*.cn);

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

----------


## pooria_googooli

textbox  محلی کی قصد دارید فایل بک آپ اونجا ذخیره بشه داخلش هست .

----------


## hraeissi

System.Data.SqlClient.SqlConnection con = new System.Data.SqlClient.SqlConnection(*DataBase*.cn);

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

----------


## pooria_googooli

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

----------


## hraeissi

ممنون
وقتی backup می گیرد فایل بدون پسونده در نتیجه وقتی می خواهم بازیابی کنم فایل را نمی بیند

----------


## pooria_googooli

دوست عزیز می خواهید من کل پروژه را اینجا قرار بدم ؟ یه ذره سرچ کنید بد نیست . 

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

            saveFileDialog1.FileName = Strbackup2 + Strbackup1 ;

----------


## CsharpNevisi

بچه چرا با کوئری نسخه پشتیبان میگیرید وقتی میتونید خود بانکو کپی کنید ... !!!
دوست عزیز من برای تهیه نسخه پشتیبان بانکو تو به جا دیگه کپی میکنم و برای رستور کردن بانو جایگزین بانک اصلی میکنم ... !!
کد کپیو خواستی بگو واسط بزارم ... !!!

----------


## hraeissi

> restor :
> 
> private void bbackup_Click(object sender, EventArgs e)
> 
>         {
> 
>             openFileDialog1.Title = "بازيابي اطلاعات";
> 
>             openFileDialog1.FileName = "*.bak";
> ...


 بعد از دادن فایل برای برگرداندن در خط             cmd.ExecuteNonQuery();
متوقف می شود 


> بچه چرا با کوئری نسخه پشتیبان میگیرید وقتی میتونید خود بانکو کپی کنید ... !!!
> دوست عزیز من برای تهیه نسخه پشتیبان بانکو تو به جا دیگه کپی میکنم و برای رستور کردن بانو جایگزین بانک اصلی میکنم ... !!
> کد کپیو خواستی بگو واسط بزارم ... !!!


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

----------


## CsharpNevisi

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

> System.IO.File.Copy(Application.StartupPath + "/1", "2");


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

----------


## CsharpNevisi

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


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

----------


## pooria_googooli

> بچه چرا با کوئری نسخه پشتیبان میگیرید وقتی میتونید خود بانکو کپی کنید ... !!!
> دوست عزیز من برای تهیه نسخه پشتیبان بانکو تو به جا دیگه کپی میکنم و برای رستور کردن بانو جایگزین بانک اصلی میکنم ... !!
> کد کپیو خواستی بگو واسط بزارم ... !!!


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

----------


## pooria_googooli

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


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

----------


## pooria_googooli

> بعد از دادن فایل برای برگرداندن در خط             cmd.ExecuteNonQuery();
> متوقف می شود


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

----------


## CsharpNevisi

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


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

----------


## hraeissi

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


ExecuteNonQuery: Connection property has not been initialized.

----------


## pooria_googooli

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


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

----------


## CsharpNevisi

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


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

----------


## as29160

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

خب چه خطایی داد متن خطا رو بذار

----------


## as29160

> خب چه خطایی داد متن خطا رو بذار


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

----------


## esafb52

دوست عزیز میگه دیتابیسی با چنین اسمی وجود نداره سعی کن اسم رو دقیق وارد کنی

----------


## as29160

اره می دونم ولی اسم دیتا بیسم همینه درسته

----------


## hraeissi

مشکل بازیابی رو چکار کنم

----------


## moh899

سلام از کد زیر برای 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

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

سلام

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

               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

از این کد استفاده کنید ببینید بازم error میده؟
restore database newdent from disk = 'E:\ My folder\BackupFile.Bak'

----------


## systam

سلام من  هرچی کد توی این سایت توی سایت code project  توی سایت  microsoft  بود امتحان کردم نشد که نشد


توی بخش vb  گذاشتم 
از دوستان میخوام کمک کنند

----------


## systam

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

----------


## systam

من الان 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

شما الان دیتا بیس 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

سلام امیدوارم این کد به دردتون بخوره
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

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

----------


## mymina

شما به راحتی می توانید با استفاده از کلاس زیر عملیات 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

بک آپ و ریستور

----------


## sor.na10

این پروسیجر دارم با این کد ها ولی خطا میده ....... لطفا کمک کنید
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_Connec  tion=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

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

----------


## systam

> database be used when performing this operation.
> RESTORE DATABASE is terminating abnormally.


این خطا مربوط به اینه که بانکتون در sql  server  خوده ویزال بازه اون رو dtache  کنید درست میشه

----------


## sor.na10

از پروسیجر شما استفاده کردم ولی اول کار db رو off  میکنه و میگه امکان دسرسی وجود نداره

----------


## veniz2008

سلام.
بعد از ری استور کردن بایستی دیتابیس آفلاین شده رو دوباره فعال کرد تا بشه از اون استفاده کرد.
استورد پروسیجر زیر رو استفاده کنید ببینید مشکلتون حل میشه یا نه. اگر خطایی رخ داد متن خطا رو بذارید.
منظور از 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

> 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

گرفتن پشتیبان از پایگاه داده ی 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

با سلام خدمت دوستان من یه سوال اساسی دارم
تمام کدهارو من امتحان کردم و جواب نگرفتم(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

مشکلم برای بک آپ حل شد تمامی کدهای بک اپ درست کار میکنن باید به این نکته توجه کرد که با اسم پایگاه داده باید مسیرشم داد حالا هرجایی که باشه
ولی بانکم از دسترس خارج شده نمیدونم چکار کنم کسی نمیتونه کمک کنه؟ یه بک آپ ازش دارم

----------

