hopeless

导航

在c#中利用存储过程实现数据库备份恢复

/// <summary>
        /// 数据库的备份
        /// </summary>
        /// <param name="ServerName">服务器名称</param>
        /// <param name="UserName">用户名</param>
        /// <param name="Password">用户密码</param>
        /// <param name="strDbName">数据库名称</param>
        /// <param name="strFileName">数据库文件</param>
        /// <returns></returns>
        public bool BackUPDB(string ServerName, string UserName, string Password, string strDbName, string strFileName)
        {
            string strServerConnectString = "Data Source=" + ServerName + ";Initial Catalog=master;User ID=" + UserName + ";Password=" + Password;
            SqlConnection connection = new SqlConnection(strServerConnectString);
            try
            {
                connection.Open();
            }
            catch (SqlException sqlException)
            {
                MessageBox.Show("SQLSERVER数据库启动或者没有安装,请检查"r"r错误信息:" + sqlException.Message, "信息提示");
                return false ;
            }
           
            try
            {                
                                
                //'关闭用户进程,防止其它用户正在使用数据库,导致数据恢复失败  
                //string strSQL = "select   spid   from   master..sysprocesses   where   dbid=db_id('" + strDbName + "')";                
                //DataSet DataSet = new DataSet();
                //SqlDataAdapter DataAdapter = new SqlDataAdapter(strSQL, connection);
                //DataAdapter.Fill(DataSet);
                //for (int i = 0; i < DataSet.Tables[0].Rows.Count; i++)
                //{
                //    SqlCommand sqlCommandKill = new SqlCommand("kill " + DataSet.Tables[0].Rows[i][0].ToString(), connection);
                //    sqlCommandKill.CommandType = CommandType.Text;
                //    sqlCommandKill.ExecuteNonQuery();
                //}
                SqlCommand sqlCommand = new SqlCommand("BACKUP DATABASE " + strDbName + " TO DISK = '" + strFileName + "'", connection);
                sqlCommand.CommandType = CommandType.Text;
                int intRowAffect = sqlCommand.ExecuteNonQuery();
                if (intRowAffect == -1)
                {
                    return true;
                }
                else
                {
                    return false;
                }
                
            }
            catch (SqlException sqlException)
            {
                throw (new Exception("备份数据库失败" + sqlException.Message));
            }
            finally
            {
                connection.Close();
            }

        }
        /// <summary>
        /// 数据库的恢复
        /// </summary>
        /// <param name="ServerName">服务器名称</param>
        /// <param name="UserName">用户名</param>
        /// <param name="Password">用户密码</param>
        /// <param name="strDbName">数据库名称</param>
        /// <param name="strFileName">数据库文件</param>
        /// <param name="pgbMain">进度条</param>
        /// <returns></returns>
        public bool RestoreDB(string ServerName, string UserName, string Password, string strDbName, string strFileName)
        {
            string strServerConnectString = "Data Source=" + ServerName + ";Initial Catalog=master;User ID=" + UserName + ";Password=" + Password;
            SqlConnection connection = new SqlConnection(strServerConnectString);
            try
            {
                connection.Open();
            }
            catch (SqlException sqlException)
            {
                MessageBox.Show("SQLSERVER数据库启动或者没有安装,请检查"r"r错误信息:" + sqlException.Message, "信息提示");
                return false;
            }
            try
            {
                //'关闭用户进程,防止其它用户正在使用数据库,导致数据恢复失败  
                string strSQL = "select   spid   from   master..sysprocesses   where   dbid=db_id('" + strDbName + "')";
                //SqlCommand sqlCommandSelect = new SqlCommand(strSQL, connection);
                //sqlCommandSelect.CommandType = CommandType.Text;
                //SqlDataReader SqlDataReader = sqlCommandSelect.ExecuteReader();sqldatareader对数据库独占,必须进行关闭
                //while (SqlDataReader.Read())
                //{
                //    SqlCommand sqlCommandKill = new SqlCommand("kill " + SqlDataReader[0], connection);
                //    sqlCommandKill.CommandType = CommandType.Text;
                //    sqlCommandKill.ExecuteNonQuery();
                //}
                DataSet DataSet = new DataSet();
                SqlDataAdapter DataAdapter = new SqlDataAdapter(strSQL, connection);
                DataAdapter.Fill(DataSet);
                for (int i = 0; i < DataSet.Tables[0].Rows.Count; i++)
                {
                    SqlCommand sqlCommandKill = new SqlCommand("kill " + DataSet.Tables[0].Rows[i][0].ToString(), connection);
                    sqlCommandKill.CommandType = CommandType.Text;
                    sqlCommandKill.ExecuteNonQuery();
                }                        
                SqlCommand sqlCommand = new SqlCommand("RESTORE DATABASE " + strDbName + " FROM DISK = '" + strFileName + "' ", connection);
                sqlCommand.CommandType = CommandType.Text;
                int intRowAffect = sqlCommand.ExecuteNonQuery();
                if (intRowAffect == -1)
                {

                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (SqlException sqlException)
            {

                throw (new Exception("恢复数据库失败,请关闭所有和该数据库连接的程序!" + sqlException.Message));
            }
            finally
            {
                connection.Close();
            }
           
        }

posted on 2008-08-21 18:23  hopeless  阅读(1664)  评论(2编辑  收藏  举报