设为首页 收藏本站
查看: 922|回复: 0

[经验分享] C# 附加数据库方法(将SQL Server 数据库文件附加至SQL Server实例)

[复制链接]

尚未签到

发表于 2015-7-1 08:35:49 | 显示全部楼层 |阅读模式
  代码导读:|DataDirectory|
  对于用户计算机上的应用程序而言,|DataDirectory|变量代表的路径就是应用程序的.exe文件所在位置的路径。
  对于使用ClickOnce所部署的应用程序而言,|DataDirectory|变量所代表的路径则是ClickOnce所建立的特殊文件目录。
  对于Web应用程序而言,|DataDirectory|变量所代表的路径就是App_Date文件夹。
  也可以根据自己的需要设置|DataDirectory|的默认值,代码:AppDomain.CurrentDomain.SetData("DataDirectory",newpath)
  方法一:通过master数据库中的存储过程来附加\分离数据库(推荐)
  


   public class DataBaseControl
    {
        ///  
        /// 实例化一个数据库连接对象
        ///  
        private SqlConnection conn;
        ///  
        /// 实例化一个新的数据库操作对象Comm
        ///  
        private SqlCommand comm;
        ///  
        /// 要操作的数据库名称
        ///  
        ///  
        /// 数据库连接字符串
        ///  
        private string connectionString;
        public string ConnectionString
        {
            get { return connectionString; }
            set { connectionString = value; }
        }
      
        ///  
        /// SQL操作语句/存储过程
        ///  
        private string strSQL;
        public string StrSQL
        {
            get { return strSQL; }
            set { strSQL = value; }
        }
        ///  
        /// 要操作的数据库名称
        ///  
        private string dataBaseName;
        public string DataBaseName
        {
            get { return dataBaseName; }
            set { dataBaseName = value; }
        }
        ///  
        /// 数据库文件完整地址
        ///  
        private string dataBase_MDF;
        public string DataBase_MDF
        {
            get { return dataBase_MDF; }
            set { dataBase_MDF = value; }
        }
        ///  
        /// 数据库日志文件完整地址
        ///  
        private string dataBase_LDF;
        public string DataBase_LDF
        {
            get { return dataBase_LDF; }
            set { dataBase_LDF = value; }
        }
        ///
        ///附加数据库
        ///
        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();
            }
        }
        ///  
        /// 分离数据库
        ///  
        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());
            }
        }  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-82110-1-1.html 上篇帖子: SQL Server 自动增长过大 下篇帖子: C# :创建SQL Server数据库、设置SQL Server数据库为只读状态、修改和压缩SQL Server数据库、新建(删除和修改)数据表、修改(新增和删
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表