# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > دسترسی به داده ها (ADO.Net و LINQ و ...) >  كد هاي بكاپ گيري و ريستور و اتچ ديتا بيس sql2005 توسط سي شارپ

## debugger

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

من يه برنامه با سي شارپ نوشتم كه ديتا بيسش sql2005 هست . 

تو سايت هر چقدر جستجو كردم نتونستم كد هاي مربوط به *اتچ و بكاپ و ريستور* را پيدا كنم

لطفا كد هاي مربوطه را بنويسيد چون تا به حال بكاپ ورنداشتم

----------


## Unknownlive

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

----------


## mmramezani2101

SqlCommand com = newSqlCommand("backup database ChestRenal to disk= "
+ "'" + textBox1.Text.ToString() + "'" , sc);

----------


## debugger

> کاربر محترم همین دیروز یکی از کاربر ها در خواست کرد و یکی یک سورس توپ گذاشت حالا اگه اتچ و دی اتچ را می خواهی بگو تا بگم اما ریستور را نمی دونم !!!


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

بي نهايت سپاس

----------


## debugger

> SqlCommand com = newSqlCommand("backup database ChestRenal to disk= "
> + "'" + textBox1.Text.ToString() + "'" , sc);


اين textbox و sc كارش چيه براي چيه ؟؟؟؟

لطفا سورس كامل بزارين

من يدونه از اينترنت ژيدا كردم خيلي پيچ پيچ نوشته بود.

مثلا اول كانكنت مي شود و بعد ديتا بيس مورد نظر را سلكت مي كرد و بعد بكاپ و ... اين سورس شما را من چطوري استفاده كنم 

راستي براي ريستور چي ؟ راه حلي نداري

----------


## Reza_Yarahmadi

این کد رو توی همین سایت پیدا کردم!!
private void Attach_db(string db_Name, string Path_Mdf, string Path_Ldf)
{
try
{
SqlConnection con = new SqlConnection("server=.;trusted_connection=yes;");
SqlCommand cmd = new SqlCommand();
cmd.CommandText = "sp_attach_db @dbname = N'" + db_name + "', @filename1 = N'" + Path_Mdf + "', @filename2 = N'" + Path_Ldf + "'";
cmd.CommandType = CommandType.Text;
con.Open();
cmd.Connection = con;
cmd.ExecuteNonQuery();
con.Close();
}
catch (Exception e)
{
MessageBox.Show(e);
}
}

----------


## debugger

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

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

----------


## mahdi_7610

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


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



        string filename;
        private void Backup_Click(object sender, EventArgs e)
        {
            saveFileDialog1.FileName = "DB_Backup" + PersianDate.Now.Year.ToString() + '-' + PersianDate.Now.Month.ToString() + '-' + PersianDate.Now.Day.ToString() + ".bak";
            saveFileDialog1.Filter = "Backup Files (*.bak)|*.bak | All Files (*.*)|*.*";
            this.saveFileDialog1.ShowDialog();
            
            if ((this.saveFileDialog1.FileName != ""))
            {
                filename = saveFileDialog1.FileName.ToString();
            }
            try
            {
                con.ConnectionString = "Data Source=.\\SQLEXPRESS;Initial Catalog=ExamA;Integrated Security=True";
                cmd.Connection = con;
                string t = @"BACKUP DATABASE [ExamA]TO DISK=N'" + filename + "' WITH NOFORMAT,NOINIT,NAME=N'mydb-full Database Backup',SKIP,NOREWIND,NOUNLOAD,STATS=10;";
                cmd.CommandText = t;
                con.Open();
                cmd.ExecuteNonQuery();
                con.Close();
                MessageBox.Show("پشتیبان گیری با موفقیت انجام شد");
            }
            catch
            {
                MessageBox.Show("پشتیبان گیری با موفقیت انجام نشد");
            }
        }


        private void Restore_Click(object sender, EventArgs e)
        {
            this.openFileDialog1.ShowDialog();
            if ((this.openFileDialog1.FileName != "") && (this.openFileDialog1.FileName != "openFileDialog1"))
            {
                try
                {
                    filename = openFileDialog1.FileName;
                    con.ConnectionString = "Data Source=.\\SQLEXPRESS;Initial Catalog=ExamA;Integrated Security=True";
                    cmd.Connection = con;
                    con.Open();
                    cmd.CommandText = "ALTER DATABASE ExamA SET SINGLE_USER WITH ROLLBACK IMMEDIATE" + " USE master; RESTORE DATABASE ExamA FROM DISK =N'" + filename + "'";
                    cmd.Connection = con;
                    cmd.ExecuteNonQuery();
                    con.Close();
                    MessageBox.Show("بازیابی با موفقیت انجام شد");
                }
                catch
                {
                    MessageBox.Show("بازیابی با موفقیت انجام نشد");
                }
            }
        }

----------


## mahdi_7610

> این کد رو توی همین سایت پیدا کردم!!
> private void Attach_db(string db_Name, string Path_Mdf, string Path_Ldf)
> {
> try
> {
> SqlConnection con = new SqlConnection("server=.;trusted_connection=yes;");
> SqlCommand cmd = new SqlCommand();
> cmd.CommandText = "sp_attach_db @dbname = N'" + db_name + "', @filename1 = N'" + Path_Mdf + "', @filename2 = N'" + Path_Ldf + "'";
> cmd.CommandType = CommandType.Text;
> ...


من توی Attach کردن مشکل داشتم . 

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

مسیر فایلهای mdf و ldf را چه طور باید قرار بدیم ؟؟

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

ممنون

----------


## Reza_Yarahmadi

> مسیر فایلهای mdf و ldf را چه طور باید قرار بدیم ؟؟
> 
> همون مسیری که توی برنامه خودت توی کد گذاشتی را می تونی بزاری اینجا .


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

            System.IO.Path.GetDirectoryName(Application.Execut  ablePath)

----------


## debugger

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

Cannot open database "kdb" requested by the login. The login failed.
Login failed for user 'PROGRAMMER\yashar'.
كد هاي بكاپ 

privatevoid button20_Click(object sender, EventArgs e)
{
string strFileName = string.Empty;
saveFileDialog1.DefaultExt = "BAK";
saveFileDialog1.FileName = "BackFile";
saveFileDialog1.Filter = "Create BackUp (*.bak)|*.bak|All file(*.*)|*.*";
saveFileDialog1.FilterIndex = 1;
saveFileDialog1.OverwritePrompt = true;
saveFileDialog1.Title = "Backup SQL File";
if (saveFileDialog1.ShowDialog() == DialogResult.OK)
{
strFileName = saveFileDialog1.FileName;
back(strFileName);
}
}



privatevoid back(string strFileName)
{
try
{
string command = @"BACKUP DATABASE kdb TO DISK='" + strFileName + "'";
this.Cursor = Cursors.WaitCursor;
SqlCommand oCommand = null;
SqlConnection oConnection = null;
oConnection = newSqlConnection("Data Source=.; initial catalog=kdb ;integrated security=true;");
if (oConnection.State != ConnectionState.Open)
oConnection.Open();
oCommand = newSqlCommand(command, oConnection);
oCommand.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("پ¬¢ï ںëï  ں êيهçï¢ ںë¤ںê ¬§");
}
catch (Exception ex)
{
//MessageBox.Show("ERROR Occurd: " + ex.Message);
textBox26.Text = ex.Message.ToString();
}
}

ك هاي restore هم به اين شكل هست 

privatevoid button23_Click(object sender, EventArgs e)
{
 
string strFileName = string.Empty;
openFileDialog1.FileName = " ";
openFileDialog1.Filter = "Restore BackUp (*.bak)|*.bak|All file(*.*)|*.*";
openFileDialog1.FilterIndex = 1;
openFileDialog1.Title = "Restor SQL File";
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
strFileName = saveFileDialog1.FileName;
rest(strFileName);
}
}



privatevoid rest(string strFileName)
{
try
{
string command = "ALTER DATABASE kdb SET SINGLE_USER with ROLLBACK IMMEDIATE " +
"use master " +
" RESTORE DATABASE kdb FROM DISK='" + strFileName + "'";
this.Cursor = Cursors.WaitCursor;
SqlCommand oCommand = null;
SqlConnection oConnection = null;
oConnection = newSqlConnection("Data Source=.; initial catalog=kdb ;integrated security=true;");
if (oConnection.State != ConnectionState.Open)
oConnection.Open();
oCommand = newSqlCommand(command, oConnection);
oCommand.ExecuteNonQuery();
this.Cursor = Cursors.Default;
MessageBox.Show("پ¬¢ï ںë  ں êيهçï¢  ںھè©§ںë§ى ¬§");
}
catch (Exception ex)
{
MessageBox.Show("ERROR Occurd: " + ex.Message);
}
}
ارور بالا هم ميگه با يوزر programmer نمي تونم لاگين بشم . كه حرف چرتي زده 

و يوزر و پس ميخواد كه چون لاين به صورت Windows Authentication هست اين ارور بي معني هست

----------


## mmramezani2101

> اين textbox و sc كارش چيه براي چيه ؟؟؟؟
> 
> لطفا سورس كامل بزارين
> 
> من يدونه از اينترنت ژيدا كردم خيلي پيچ پيچ نوشته بود.
> 
> مثلا اول كانكنت مي شود و بعد ديتا بيس مورد نظر را سلكت مي كرد و بعد بكاپ و ... اين سورس شما را من چطوري استفاده كنم 
> 
> راستي براي ريستور چي ؟ راه حلي نداري


SqlConnection sc = new SqlConnection("Data Source=sama;Initial Catalog=ChestRenal;Integrated Security=True");
sc.Open();
SqlCommand com = newSqlCommand("backup database ChestRenal to disk= "
+ "'" + textBox1.Text.ToString() + "'" , sc);
com.ExecuteNonQuery();
sc.Close();
MessageBox.Show("نسخه پشتيبان تهيه شد.");

----------


## mahdi_7610

> من براي بكاپ از كد زير استفاده مي كنم . كه در اولين اجرا بكاپ ور داشت . ولي ديگه ور نمي داره و اين ارور را ميده
> 
> Cannot open database "kdb" requested by the login. The login failed.
> Login failed for user 'PROGRAMMER\yashar'. 
> كد هاي بكاپ  
> 
> privatevoid button20_Click(object sender, EventArgs e)
> {
> string strFileName = string.Empty;
> ...



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

مشکل از اینجاست که این دستورات اون دیتابیس را به* Single User* تغییر میدن .

اگه sql sarver را باز کنید و توی دیتابیس ها به دیتابیس kdb نگاه کنید می بینید که اونا تغییر داده به  Single User . و به شما اجازه وارد شدن به اون را نمیده . 

به خاطر همین برنامه قادر نیست توی این دیتابیس چیزی بنویسه یا چیزی ازش بخونه .

دلیل این مشکل چیه ؟

----------


## mahdi_7610

فکر کنم مشکل حل شد .

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

فقط کافیه بعد از oCommand.ExecuteNonQuery(); کانکشن را ببندید .

oConnection.Close();

----------


## __Genius__

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

----------


## debugger

مشكل  اتچ به كل رفع شد

مشكل بكاپ را هم حل كردم 

فقط مونده  ريستور :

كد هاي بكاپ را اگر به اين شكل بنويسيد هميشه جواب ميده 

        private void button20_Click(object sender, EventArgs e)
        {
            SaveFileDialog saveFileDialog = new SaveFileDialog();
            saveFileDialog.AddExtension = true;
            saveFileDialog.CheckFileExists = false;
            saveFileDialog.CheckPathExists = true;
            saveFileDialog.OverwritePrompt = true;
            saveFileDialog.FileName = "Backup";
            saveFileDialog.Filter = "Backup File (*.Bak)|*.Bak";
            saveFileDialog.DefaultExt = "Bak";
            saveFileDialog.RestoreDirectory = true;
            saveFileDialog.InitialDirectory = "C:\\";
            if (saveFileDialog.ShowDialog() == DialogResult.OK)
            {
                System.Data.SqlClient.SqlConnection sqlConnection = new System.Data.SqlClient.SqlConnection();
                sqlConnection.ConnectionString = "server=(local);database=kdb;integrated security=true;";
                sqlConnection.Open();
                System.Data.SqlClient.SqlCommand sqlCommand = new System.Data.SqlClient.SqlCommand();
                sqlCommand.Connection = sqlConnection;
                sqlCommand.CommandText = "BACKUP DATABASE kdb TO DISK = @Destination";
                sqlCommand.Parameters.Add("@Destination", SqlDbType.VarChar);
                sqlCommand.Parameters["@Destination"].Value = saveFileDialog.FileName;
                sqlCommand.ExecuteNonQuery();
                sqlConnection.Close();
            }
        }با اين كد ها موفق به گرفتن بكاپ شدم . هميشه هم جواب ميده 

ولي ريستور هنوز مشكل هست ( يه كد هايي پيدا كردم كه با يه متد ديگه اي به غير كد هايي كه تا حالا نوشته شده ، دارم تغييراتي روش اعمال مي كنم كه بشه تو پرو‍‍ژه ها ازش استفاده كرد . اگر جواب گرفتم كد ها را همينجا ميزارم ) دوستان اي كه تجربه ريستور را دارن لطفا كمك كنيد

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

----------


## debugger

دوستان اين كد هاي ريستور هست كه من از يه سورس اي تو اينترنت پيدا كردم . نمي دونم چرا داخل سورس اي كه از اينترنت دانلود كردم جواب ميده اما در پرو‍ژه من جواب نميده 

شما هم تست كنيد نتيجه را بگين


using System.Data.Sql;
using System.Data.SqlClient;
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;

//add this References :
//Microsoft.SqlServer.ConnectionInfo
//Microsoft.SqlServer.Smo 

        private void button23_Click(object sender, EventArgs e)
        {
            ServerConnection srvConn = new ServerConnection("(local)");
            srvConn.LoginSecure = true;
            srvSql = new Server(srvConn);
            // If there was a SQL connection created
            if (srvSql != null)
            {
                
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    openFileDialog1.Filter = "Backup File (*.Bak)|*.Bak";
                    openFileDialog1.DefaultExt = "Bak";
                    
                    Restore rstDatabase = new Restore();
                    rstDatabase.Action = RestoreActionType.Database;
                    rstDatabase.Database = "kdb";
                    BackupDeviceItem bkpDevice = new BackupDeviceItem(openFileDialog1.FileName, DeviceType.File);
                    rstDatabase.Devices.Add(bkpDevice);
                    rstDatabase.ReplaceDatabase = true;
                    rstDatabase.SqlRestore(srvSql);
                    MessageBox.Show("Restore Success");
                }
            }
            else
            {
                
                MessageBox.Show("A connection to a SQL server was not established.", "Not Connected to Server", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            }
        }

----------


## iranigirl1364

> مشكل اتچ به كل رفع شد
> 
> مشكل بكاپ را هم حل كردم 
> 
> فقط مونده ريستور :
> 
> كد هاي بكاپ را اگر به اين شكل بنويسيد هميشه جواب ميده 
> 
> 
> ...





با سلام:
من کد را امتحان کردم error می ده
Incotect syntax near the database name
با تشکر و احترام فراوان

----------


## raziyehbazargan

کد BACKUP که گذاشتید برای sQL 2000 هم میشه استفاده کنم؟

----------


## Reza_Yarahmadi

> دوستان اين كد هاي ريستور هست كه من از يه سورس اي تو اينترنت پيدا كردم . نمي دونم چرا داخل سورس اي كه از اينترنت دانلود كردم جواب ميده اما در پرو‍ژه من جواب نميده 
> 
> شما هم تست كنيد نتيجه را بگين


به Reference های برنامه ای که گرفتی یه نگاه بنداز ببین چه Reference هایی رو اضافه کرده که شما ندارید.

----------


## debugger

> با سلام:
> من کد را امتحان کردم error می ده
> Incotect syntax near the database name
> با تشکر و احترام فراوان
> [/right]


هر كجا kdb ديدي بجاش اسم ديتا بيس خودت را بزار مشكل حل ميشه

مشكل syntax هست يعني يه چيزي را اشتباه نوشتي

اين كد براي 2000 هم قابل استفاده هست

----------


## debugger

> به Reference های برنامه ای که گرفتی یه نگاه بنداز ببین چه Reference هایی رو اضافه کرده که شما ندارید.


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

شما اين كد هاي ريستور را امتحان كردين ؟؟؟

راستي من مشكل ريستور را با يه كلك رشتي حل كردم رفت  :چشمک:

----------


## Reza_Yarahmadi

> در بالاي كد ها نوشتم چه رفرنس هايي را اضافه كرده
> 
> شما اين كد هاي ريستور را امتحان كردين ؟؟؟


شما فقط فضای نامهای (using) استفاده شده رو نوشتید. منظور من این بود که توی پنجراه Solution گزینه References رو باز کنید ببینید چه گزینه هایی هست که توی پروژه خودتون نیست.

----------


## mahdi_7610

برای استفاده از Smo باید رفرنس های *microsoft.sqlsarver.smo* *وmicrosoft.sqlsarver.connectioninfo* را به پروژه اضافه کنی .

----------


## Geradsoft

سلام دوستان. . . 
من از توی همین سایت کد backup و restor را برداشتم کد Bachup کار کرد ولی کد restor کار نکرد .
نام DB من dbhakimshafae است من از کد زیر برای restor استفاده می کنم.
راستی وقتی که از توی خود نرم افزار sql من restor میکنم فایل backup را restor می کنه ولی کد زیر به من جواب نمیده. . . اگه میشه بگین اشکال کار چیه ؟؟؟
ممنون . .  :چشمک: 
  this.openFileDialog1.ShowDialog();
            if ((this.openFileDialog1.FileName != "") && (this.openFileDialog1.FileName != "openFileDialog1"))
            {
                try
                {

                    SqlCommand cmd1 = new SqlCommand();
                    filename = openFileDialog1.FileName;
                    con.ConnectionString = "Data Source=(local);Initial Catalog=dbhakimshafae;Integrated Security=True";
                    cmd1.Connection = con;
                    con.Open();
                    cmd1.CommandText = "ALTER DATABASE dbhakimshafae SET SINGLE_USER WITH ROLLBACK IMMEDIATE" + " USE master; RESTORE DATABASE dbhakimshafae FROM DISK  =N'" + filename + "'";
                    cmd1.Connection = con;
                    cmd1.ExecuteNonQuery();
                    con.Close();
                    MessageBox.Show("بازيابي با موفقيت انجام شد");
                }
                catch
                {
                    MessageBox.Show("بازيابي با موفقيت انجام نشد");

                }
            }

----------


## HAMRAHSOFT.IR

دوستان ميشه يك نمونه كامل بزاريد تحت #C

----------


## moj_asghary

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

----------


## Mahdi8002

salam manam alan test kardam va ghablan ham test kardeh bodam ama ba error(Restore failed for Server 'GDSCS-PC'.) movajeh misham kasi javabesho midoneh

----------


## Mahdi8002

baraye back up in javab mideh
man hamisheh azash estefadeh mikonam ama restor moshkel darem

 private void back(string strFileName)
        {
            try
            {
                string command = "BACKUP DATABASE DB_Gold 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 = Mahdi_Conection.Sql.ConectionString;
                //"Data Source=.;Initial Catalog=DB_World_Water_Settle;Integrated Security=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("تهيه نسخه پشتيبان از اطلاعات با موفقيت انجام شد", "پشتیبانی");
                Mahdi_Conection.Sql.Disconection();
            }
            catch (System.Data.SqlClient.SqlException ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            { 
                Mahdi_Conection.Sql.Disconection(); 
            }
        }
        private void btnBackup_Click(object sender, EventArgs e)
        {
            string strFileName = string.Empty;
            saveFileDialog1.DefaultExt = "BAK";
            saveFileDialog1.FileName = "BackFile";
            saveFileDialog1.Filter = "Create BackUp (*.bak)|*.bak|All file(*.*)|*.*";
            saveFileDialog1.FilterIndex = 1;
            saveFileDialog1.OverwritePrompt = true;
            saveFileDialog1.Title = "Backup SQL File";
            if (saveFileDialog1.ShowDialog() == DialogResult.OK)
            {
                strFileName = saveFileDialog1.FileName;
                back(strFileName);
            }
        }

----------


## Mahdi8002

dostan bara restor kasi code soragh ndareh!!!!!!!!!!!!!!!!!!!
mamnon misham age rahnamei konid

----------

