博客园  :: 首页  :: 联系 :: 管理

C#生成安装文件后自动附加数据库的思路跟算法

Posted on 2009-03-03 11:17  sunrack  阅读(728)  评论(1编辑  收藏  举报
using System; 
using System.Collections.Generic; 
using System.Windows.Forms; 
using System.Data.SqlClient; 
using System.Data; 
using System.ServiceProcess; 

namespace AdminZJC.DataBaseControl 

 
/// <summary> 
 
/// 数据库操作控制类 
 
/// </summary> 
 public class DataBaseControl 
 { 
 
/// <summary> 
 
/// 数据库连接字符串 
 
/// </summary> 
 public string ConnectionString; 

 
/// <summary> 
 
/// SQL操作语句/存储过程 
 
/// </summary> 
 public string StrSQL; 

 
/// <summary> 
 
/// 实例化一个数据库连接对象 
 
/// </summary> 
 private SqlConnection Conn; 

 
/// <summary> 
 
/// 实例化一个新的数据库操作对象Comm 
 
/// </summary> 
 private SqlCommand Comm; 

 
/// <summary> 
 
/// 要操作的数据库名称 
 
/// </summary> 
 public string DataBaseName; 

 
/// <summary> 
 
/// 数据库文件完整地址 
 
/// </summary> 
 public string DataBase_MDF; 

 
/// <summary> 
 
/// 数据库日志文件完整地址 
 
/// </summary> 
 public string DataBase_LDF; 

 
/// <summary> 
 
/// 备份文件名 
 
/// </summary> 
 public string DataBaseOfBackupName; 

 
/// <summary> 
 
/// 备份文件路径 
 
/// </summary> 
 public string DataBaseOfBackupPath; 

 
/// <summary> 
 
/// 执行创建/修改数据库和表的操作 
 
/// </summary> 
 public void DataBaseAndTableControl() 
 { 
 
try 
 { 
 Conn 
= new SqlConnection(ConnectionString); 
 Conn.Open(); 

 Comm 
= new SqlCommand(); 
 Comm.Connection 
= Conn; 
 Comm.CommandText 
= StrSQL; 
 Comm.CommandType 
= CommandType.Text; 
 Comm.ExecuteNonQuery(); 

 MessageBox.Show(
"数据库操作成功!""信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); 
 } 
 
catch (Exception ex) 
 { 
 MessageBox.Show(ex.Message, 
"信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); 
 } 
 
finally 
 { 
 Conn.Close(); 
 } 
 } 

 
/// <summary> 
 
/// 附加数据库 
 
/// </summary> 
 public void AddDataBase() 
 { 
 
try 
 { 
 Conn 
= new SqlConnection(ConnectionString); 
 Conn.Open(); 

 Comm 
= new SqlCommand(); 
 Comm.Connection 
= Conn; 
 Comm.CommandText 
= "sp_attach_db"

 Comm.Parameters.Add(
new SqlParameter(@"dbname", SqlDbType.NVarChar)); 
 Comm.Parameters[
@"dbname"].Value = DataBaseName; 
 Comm.Parameters.Add(
new SqlParameter(@"filename1", SqlDbType.NVarChar)); 
 Comm.Parameters[
@"filename1"].Value = DataBase_MDF; 
 Comm.Parameters.Add(
new SqlParameter(@"filename2", SqlDbType.NVarChar)); 
 Comm.Parameters[
@"filename2"].Value = DataBase_LDF; 

 Comm.CommandType 
= CommandType.StoredProcedure; 
 Comm.ExecuteNonQuery(); 

 MessageBox.Show(
"附加数据库成功""信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); 
 } 
 
catch (Exception ex) 
 { 
 MessageBox.Show(ex.Message, 
"信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); 
 } 
 
finally 
 { 
 Conn.Close(); 
 } 
 } 

 
/// <summary> 
 
/// 分离数据库 
 
/// </summary> 
 public void DeleteDataBase() 
 { 
 
try 
 { 
 Conn 
= new SqlConnection(ConnectionString); 
 Conn.Open(); 

 Comm 
= new SqlCommand(); 
 Comm.Connection 
= Conn; 
 Comm.CommandText 
= @"sp_detach_db"

 Comm.Parameters.Add(
new SqlParameter(@"dbname", SqlDbType.NVarChar)); 
Comm.Parameters[
@"dbname"].Value = DataBaseName; 

 Comm.CommandType 
= CommandType.StoredProcedure; 
 Comm.ExecuteNonQuery(); 

 MessageBox.Show(
"分离数据库成功""信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); 
 } 
 
catch (Exception ex) 
 { 
 MessageBox.Show(ex.Message, 
"信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); 
 } 
 
finally 
 { 
 Conn.Close(); 
 } 
 } 

 
/// <summary> 
 
/// 备份数据库 
 
/// </summary> 
 public void BackupDataBase() 
 { 
 
try 
 { 
 Conn 
= new SqlConnection(ConnectionString); 
 Conn.Open(); 

 Comm 
= new SqlCommand(); 
 Comm.Connection 
= Conn; 
 Comm.CommandText 
= "use master;backup database @dbname to disk = @backupname;"

 Comm.Parameters.Add(
new SqlParameter(@"dbname", SqlDbType.NVarChar)); 
 Comm.Parameters[
@"dbname"].Value = DataBaseName; 
 Comm.Parameters.Add(
new SqlParameter(@"backupname", SqlDbType.NVarChar)); 
 Comm.Parameters[
@"backupname"].Value = @DataBaseOfBackupPath + @DataBaseOfBackupName; 

 Comm.CommandType 
= CommandType.Text; 
 Comm.ExecuteNonQuery(); 

 MessageBox.Show(
"备份数据库成功""信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); 
 } 
 
catch (Exception ex) 
 { 
 MessageBox.Show(ex.Message, 
"信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); 
 } 
 
finally 
 { 
 Conn.Close(); 
 } 
 } 

 
/// <summary> 
 
/// 还原数据库 
 
/// </summary> 
 public void ReplaceDataBase() 
 { 
 
try 
 { 
 
string BackupFile = @DataBaseOfBackupPath + @DataBaseOfBackupName; 
 Conn 
= new SqlConnection(ConnectionString); 
 Conn.Open(); 

 Comm 
= new SqlCommand(); 
 Comm.Connection 
= Conn; 
 Comm.CommandText 
= "use master;restore database @DataBaseName From disk = @BackupFile with replace;"

 Comm.Parameters.Add(
new SqlParameter(@"DataBaseName", SqlDbType.NVarChar)); 
 Comm.Parameters[
@"DataBaseName"].Value = DataBaseName; 
 Comm.Parameters.Add(
new SqlParameter(@"BackupFile", SqlDbType.NVarChar)); 
 Comm.Parameters[
@"BackupFile"].Value = BackupFile; 

 Comm.CommandType 
= CommandType.Text; 
 Comm.ExecuteNonQuery(); 

 MessageBox.Show(
"还原数据库成功""信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); 
 } 
 
catch (Exception ex) 
 { 
 MessageBox.Show(ex.Message, 
"信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information); 
 } 
 
finally 
 { 
 Conn.Close(); 
 } 
 } 
 } 


/* 
 ///调用事例: 
  
    还原数据库 
 private void button0_Click(object sender, EventArgs e) 
 { 
 DataBaseControl DBC = new DataBaseControl(); 
 DBC.ConnectionString = "Data Source=(local);User id=sa;Password=123456; Initial Catalog=master"; 
 DBC.DataBaseName = "MyDatabase"; 
 DBC.DataBaseOfBackupName = @"back.bak"; 
 DBC.DataBaseOfBackupPath = @"D:\Program Files\Microsoft SQL Server\MSSQL\Data\"; 
 DBC.ReplaceDataBase(); 
 } 
  
    附加数据库 
 private void button1_Click_1(object sender, EventArgs e) 
 { 
 DataBaseControl DBC = new DataBaseControl(); 
 DBC.ConnectionString = "Data Source=(local);User id=sa;Password=123456; Initial Catalog=master"; 
 DBC.DataBaseName = "MyDatabase"; 
 DBC.DataBase_MDF = @"D:\Program Files\Microsoft SQL Server\MSSQL\Data\MyDatabase_Data.MDF"; 
 DBC.DataBase_LDF = @"D:\Program Files\Microsoft SQL Server\MSSQL\Data\MyDatabase_Log.LDF"; 
 DBC.AddDataBase(); 
 } 
  
    备份数据库 
 private void button2_Click(object sender, EventArgs e) 
 { 
 DataBaseControl DBC = new DataBaseControl(); 
 DBC.ConnectionString = "Data Source=(local);User id=sa;Password=123456; Initial Catalog=master"; 
 DBC.DataBaseName = "MyDatabase"; 
 DBC.DataBaseOfBackupName = @"back.bak"; 
 DBC.DataBaseOfBackupPath = @"D:\Program Files\Microsoft SQL Server\MSSQL\Data\"; 
 DBC.BackupDataBase(); 
 } 
  
    分离数据库 
 private void button3_Click(object sender, EventArgs e) 
 { 
 DataBaseControl DBC = new DataBaseControl(); 
 DBC.ConnectionString = "Data Source=(local);User id=sa;Password=123456; Initial Catalog=master"; 
 DBC.DataBaseName = "MyDatabase"; 
 DBC.DeleteDataBase(); 
 }