ازاي تاخد Database Backup من البرنامج بتاعك و ازاي تعمل Restore

مدبأيا ازاي نعمل Backup لـ Database MSSQL اصلا ؟

لو عندنا مثلا Database اسمها TestDB و عايز اعملها Backup على ال C:\TestDB.bak

هنكتب الامر ده ف ال SQL

BACKUP DATABASE TestDB TO DISK ='C:\TestDB.bak'

طيب نعملها ازاي ف ال App بتاعنا

ممكن ببساطة نضيف folderBrowserDialog عشان بس نحدد مكان ال Folder اللي الـ User عايز يحفظ فيه ال BackUp

و ناخد بعد كده ال path اللي اختاره و نشتغل عليه احنا

مثال بسيط

انا عامل كلاس اسمه Database فيه كل ال Functions الخاصة بالتعامل مع ال Database بتاعتي

و واخد من الكلاس ده object اسمه db و فيه Function اسمها BackUpDB و بتاخد parameter هو string path

دلوقتي لما ال user يدوس على button بتاع ال Browse اللي هيفتحله ال folderBrowserDialog

ده هيكون code ال button click

private void button6_Click(object sender, EventArgs e)
{
folderBrowserDialog1.ShowDialog();
string path = folderBrowserDialog1.SelectedPath;
if(path!="")
{
 
db.BackUpDB(path);
MessageBox.Show("تم الحفظ بنجاح");
}
else { MessageBox.Show("خطأ في الحفظ"); }
}

ببساطة باخد منه ال path و بديه لل BackUpDB Function

ايه اللي بيحصل ف ال BackUpDB Function بقى

public void BackUpDB(string path)
{
con.Open();
SqlCommand cm = new SqlCommand("USE master", con);
cm.ExecuteNonQuery();
SqlCommand cmd = new SqlCommand("BACKUP DATABASE TestDB TO DISK = '" + path + "\\TestDB" +DateTime.Now.ToShortDateString().Replace('/','-') + ".bak'", con);
 
cmd.ExecuteNonQuery();
con.Close();
}

طيب دلوقتي انا عايز اعمل restore

ال restore هيجيلك exception غبي كده هيقولك ان فيه connection لل database مفتوحة و انها بتستعمل دلوقتي .. طب عشان نخلص من الحوارات دي نعمل ايه ؟

هنعمل 4 حاجات

1- هنشتغل على Master بدل ال Database بتاعتنا بمعنى اني هعمل Use master

2- هخلي ال database بتاعتي Single_User

3-هعمل Restore With Replace بأمر زي ده كده

RESTORE DATABASE TestDB FROM DISK=C:\TestDB.bak With Replace

4- هرجع ال database بتاعتي تاني Multi_User

طيب نعملها ازاي ف ال App بتاعنا

هنعمل المرادي SaveFileDialog عشان نحدد ال path اللي عايز يحفظ فيه ال Backup و ناخد ال path ده و نعمل restore منه

مثال بسيط

الكلاس بتاع ال Database في Function اسمها RestoreDB بتاخد string path برضه

دلوقتي لما ال user يدوس على button عشان يفتح ال SaveFileDialog هاخد ال FileName من ال SaveFileDialog ده و هبعته للـFunction

private void button7_Click(object sender, EventArgs e)
{
openFileDialog2.Filter = "Backup File (*.bak)|*.bak";
openFileDialog2.FileName = null;
openFileDialog2.ShowDialog();
string path = openFileDialog2.FileName;
if (path != "")
{
try
{
db.RestoreDB(path);
MessageBox.Show("تم ");
Application.Restart();
}
catch { MessageBox.Show("خطأ"); }
}
else
{
MessageBox.Show("خطأ في الاسترجاع");
}
}

و ده اللي بيحصل جوة ال Function بتاعت RestoreDB

public void RestoreDB(string path)
{
 
con.Open();
SqlCommand cm = new SqlCommand("USE master", con);
cm.ExecuteNonQuery();
string Alter1 = @"ALTER DATABASE [TestDB] SET Single_User WITH Rollback Immediate";
SqlCommand Alter1Cmd = new SqlCommand(Alter1, con);
Alter1Cmd.ExecuteNonQuery();
try
{
SqlCommand cmd = new SqlCommand("RESTORE DATABASE TestDB FROM DISK='" + path + "' With Replace", con);
cmd.ExecuteNonQuery();
}
catch { }
string Alter2 = @"ALTER DATABASE [TestDB] SET Multi_User";
SqlCommand Alter2Cmd = new SqlCommand(Alter2, con);
Alter2Cmd.ExecuteNonQuery();
con.Close();
}


⤧  Next post Host ASP.Net WebApps On Linux