Chào Mr.Pakapun.
Lúc đầu mình định viết 1 cái file ddl để mọi người sử dụng các hàm cho dễ khỏi phải lo lắng gì nội dung bên trong.
Nếu anh em muốn biết cách thức hoạt động của nó thì mình xin hướng dưới đây lun.
Trong file ddl của mình có 3 hàm thôi.
// hàm này dùng để lấy tên các server đã cài đặt trên máy của mình ( tức local ), khi mình cài sql server vào trong máy nó sẽ tạo 1 string trong khóa HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL tên của string đó sẽ là tên của server sql khi chúng ta kết nối.
static public string[] get_instance_name()
{
//mở key HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\Instance Names\SQL để đọc thông tin
RegistryKey Sub_Key = Registry.LocalMachine.OpenSubKey(@"Software\Microsoft\Microsoft SQL Server\Instance Names\SQL\", false);
//kiểm tra tồn tại key
if (Sub_Key == null)
{
return null;
}
// kiểm tra số lượng name instance lớn hơn 0
if (Sub_Key.ValueCount < 1)
{
return null;
}
// đưa tất cả các giá trị lấy được vào biến result
string []result=Sub_Key.GetValueNames();
//đóng key lại
Sub_Key.Close();
// trả về tập hợp các chuỗi là các server name
return result;
}
// hàm tạo csdl và phục hồi nó từ 1 file đã backup bằng lệnh backup của sql
// các tham số đầu vào là instance_name (tên server, vì trong máy có thể có nhiều server sql đang chạy đồng thời nên cần chỉ định tên này để biết sẽ phục csdl lên server sql nào), file ( là chuỗi đường dẫn dẫn đến file backup ), name_database ( là tên csdl, tên này phải khớp với tên csdl mà đã backup thành file trong tham số trước đó ), sizedb ( là số MB mình sẽ cấp phát cho csdl ), sizelog ( là số MB mình sẽ cấp phát cho log của csdl đó)
static public bool restore(string instance_name,string file,string name_database,int sizedb,int sizelog)
{
//chuyển 2 tham số này thành đơn vị KB (1M=1024KB)
sizedb = sizedb * 1024;
sizelog = sizelog * 1024;
//tạo 1 tên file ngẫu nhiên
string newfile = Path.GetRandomFileName();
// copy file từ tham số truyền vào thành newfile nằm trực tiếp trên ổ đĩa hệ thống
// Environment.ExpandEnvironmentVariables("%SystemDrive%") trả về ký tự của ổ đĩa đã cài window
// chúng ta cần làm việc này đã tránh 1 số trường hợp file backup nằm trong 1 thư mục nào đó mà sql không cho phục hồi
File.Copy(file, Environment.ExpandEnvironmentVariables("%SystemDrive%")+"\\"+newfile, true);
try
{
//mo ket noi với server đã chọn
//vì lúc trước đó chúng ta chỉ lấy tên các server đã cài vào máy mà không đảm bảo nó đã chạy trên máy khi khởi động window, vì vậy try catch sẽ khi bắt lỗi khi sql server chưa chạy và trã kết quả là false
SqlConnection conn = new SqlConnection(@"Data Source=localhost\" + instance_name + ";Integrated Security=True");
// mở kết nối
conn.Open();
//tạo SqlCommand tu conn
SqlCommand cmd = conn.CreateCommand();
try
{
//tao database bằng câu lệnh CREATE DATABASE , nếu đã tồn tại database nó sẽ báo lỗi và try catch sẽ đưa chúng ta đi qua lỗi này đến lệnh restore
//lệnh này Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) để lấy đường dẫn của thư mục program files, chúng ta không đưa trực tiếp C:\Program Files vào vì có thể hệ thống không được cài đặt trên ổ đĩa C
cmd.CommandText = @"CREATE DATABASE [" + name_database + "] ON PRIMARY ( NAME = N'" + name_database + "', FILENAME = N'" + Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\" + name_database + ".mdf' , SIZE = "+sizedb+"KB , FILEGROWTH = 1024KB ) LOG ON ( NAME = N'" + name_database + "_log', FILENAME = N'" + Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles) + @"\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\" + name_database + "_log.ldf' , SIZE = "+sizelog+"KB , FILEGROWTH = 10%)";
cmd.ExecuteNonQuery();
}
catch
{
}
//phục hồi CSDL tu file Environment.ExpandEnvironmentVariables("%SystemDrive%")+"\\"+newfile
cmd.CommandText = "RESTORE DATABASE [" + name_database + "] FROM DISK = N'" + Environment.ExpandEnvironmentVariables("%SystemDrive%") + "\\" + newfile + "' WITH FILE = 1, NOUNLOAD, REPLACE, STATS = 10";
// thực thi lệnh và đóng kết nối.
cmd.ExecuteNonQuery();
conn.Close();
//xoa file newfile
File.Delete(Environment.ExpandEnvironmentVariables("%SystemDrive%") + "\\" + newfile);
//nếu chạy được đến đây thì công đoạn phục hồi coi như thành công.
return true;
}
catch (SqlException ex)
{
//trả về false nếu báo lỗi
return false;
}
return false;
}
// hàm sao lưu csdl. các tham số là instance_name(tên server), file(đường dẫn và tên file sẽ xuất ra khi sao lưu),name_database (tên csdl sẽ được sao lưu)
static public bool backup(string instance_name,string file,string name_database)
{
try
{
SqlConnection conn = new SqlConnection(@"Data Source=localhost\" + instance_name + ";Integrated Security=True");
conn.Open();
//tạo SqlCommand tu conn
SqlCommand cmd = conn.CreateCommand();
//sao luu
cmd.CommandText = "BACKUP DATABASE [" + name_database + "] TO DISK = N'" + file + "' WITH NOFORMAT, NOINIT, NAME = N'" + name_database + "-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10";
cmd.ExecuteNonQuery();
conn.Close();
//báo kết thúc thành công
return true;
}
catch
{
return false;
}
return false;
}
link
[You must be registered and logged in to see this link.] Cám ơn các bạn vì đã quan tâm chủ đề này.