C# 附加数据库方法(将SQL Server 数据库文件附加至SQL Server实例)

代码导读:|DataDirectory|

对于用户计算机上的应用程序而言,|DataDirectory|变量代表的路径就是应用程序的.exe文件所在位置的路径。

对于使用ClickOnce所部署的应用程序而言,|DataDirectory|变量所代表的路径则是ClickOnce所建立的特殊文件目录。

对于Web应用程序而言,|DataDirectory|变量所代表的路径就是App_Date文件夹。

也可以根据自己的需要设置|DataDirectory|的默认值,代码:AppDomain.CurrentDomain.SetData("DataDirectory",newpath)

方法一:通过master数据库中的存储过程来附加\分离数据库(推荐)

 

    public   class  DataBaseControl
    {
        
///   <summary>  
        
///  实例化一个数据库连接对象 
        
///   </summary>  
         private  SqlConnection conn;

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

        
///   <summary>  
        
///  要操作的数据库名称 
        
///   </summary>  
        
///   <summary>  
        
///  数据库连接字符串 
        
///   </summary>  
         private   string  connectionString;
        
public   string  ConnectionString
        {
            
get  {  return  connectionString; }
            
set  { connectionString  =  value; }
        }
      
        
///   <summary>  
        
///  SQL操作语句/存储过程 
        
///   </summary>  
         private   string  strSQL;
        
public   string  StrSQL
        {
            
get  {  return  strSQL; }
            
set  { strSQL  =  value; }
        }

        
///   <summary>  
        
///  要操作的数据库名称 
        
///   </summary>  
         private   string  dataBaseName;
        
public   string  DataBaseName
        {
            
get  {  return  dataBaseName; }
            
set  { dataBaseName  =  value; }
        }

        
///   <summary>  
        
///  数据库文件完整地址 
        
///   </summary>  
         private   string  dataBase_MDF;
        
public   string  DataBase_MDF
        {
            
get  {  return  dataBase_MDF; }
            
set  { dataBase_MDF  =  value; }
        }

        
///   <summary>  
        
///  数据库日志文件完整地址 
        
///   </summary>  
         private   string  dataBase_LDF;
        
public   string  DataBase_LDF
        {
            
get  {  return  dataBase_LDF; }
            
set  { dataBase_LDF  =  value; }
        }

        
/// <summary>
        
/// 附加数据库
        
/// </summary>
         public   void  AttachDB()
        {
            
try
            {
                conn 
=   new  SqlConnection(connectionString);
                conn.Open();
                comm 
=   new  SqlCommand();
                comm.Connection 
=  conn;
                comm.CommandText 
=   " sp_attach_db " ; // 系统数据库master 中的一个附加数据库存储过程。

                comm.Parameters.Add(
new  SqlParameter( @" dbname " , SqlDbType.NVarChar));
                comm.Parameters[
@" dbname " ].Value  =  dataBaseName;
                comm.Parameters.Add(
new  SqlParameter( @" filename1 " , SqlDbType.NVarChar));   // 一个主文件mdf,一个或者多个日志文件ldf,或次要文件ndf
                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  detachDB()
        {
            
try
            {
                conn 
=   new  SqlConnection(connectionString);
                conn.Open();
                comm 
=   new  SqlCommand();
                comm.Connection 
=  conn;
                comm.CommandText 
=   @" sp_detach_db " ; // 系统数据库master 中的一个分离数据库存储过程。

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

// 操作界面事件
   private   void  btnAttachDB_Click( object  sender, EventArgs e)
        {
            DataBaseControl DBC 
=   new  DataBaseControl();
            DBC.ConnectionString 
=   " Data Source=.; Initial Catalog=master;Integrated Security=SSPI " ;
            DBC.DataBaseName 
=   " dbHotelSystem " ;
            DBC.DataBase_MDF 
=  Directory.GetParent( @" Hotel.MDF " +   " \\dbHotelSystem.MDF " ;
            DBC.DataBase_LDF 
=  Directory.GetParent( @" Hotel.MDF " +   " \\dbHotelSystem_log.ldf " ;
            DBC.AttachDB(); 

        }

   
private   void  btnDetachDB_Click( object  sender, EventArgs e)
        {
            DataBaseControl DBC 
=   new  DataBaseControl();
            DBC.ConnectionString 
=   " Data Source=.; Initial Catalog=master;Integrated Security=SSPI " ;
            DBC.DataBaseName 
=   " dbHotelSystem " ;
            DBC.detachDB();
        }

 

 

 方法二:通过Connection 来设置

public   bool  attachDB()
        {
            
//  利用 SqlConnectionStringBuilder 对象来构建连接字符串。 using System.Data.SqlClient;
            SqlConnectionStringBuilder connectionStringBuilder  =   new  SqlConnectionStringBuilder();
            connectionStringBuilder.DataSource 
=   " . " ;

            
//  使用相对路径的手法来指定所要附加的 SQL Server 数据库文件。
            connectionStringBuilder.AttachDBFilename  =   @" |DataDirectory|test.mdf " ;
            connectionStringBuilder.IntegratedSecurity 
=   true ;

            
// 附加数据库
            connectionStringBuilder.UserInstance  =   false ;

            
// 从新设定附加至 SQL Server 实例的数据库名称
            connectionStringBuilder.InitialCatalog  = " test " ;
            
try
            {
                SqlConnection con 
=   new  SqlConnection(connectionStringBuilder.ConnectionString);
                con.Open();
                
return   true ; // 附加数据库成功!
            }
            
catch  (Exception ex)
            {
                
throw   new  Exception(ex.ToString());
            }
        }

 

 

转载于:https://www.cnblogs.com/nnkook/archive/2010/01/07/1641610.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值