C#

C#中SQL数据库的备份与恢复如何实现,整个应用程序就差这一步,就完美了,求帮助啊

解决方案 »

  1.   

    老帖有,http://bbs.csdn.net/topics/330021792
      

  2.   

    http://blog.donews.com/rkjx/archive/2007/09/09/1208004.aspx
      

  3.   

    数据备份语句:backup database  数据库名 to disk='保存路径/dbName.bak'
    数据恢复语句:restore database 数据库名 from disk='保存路径/dbName.bak'   WITH MOVE 'dbName_Data' TO 'c:/tcomcrm20041217.mdf', --数据文件还原后存放的新位置   //数据库备份与恢复实例
                private void btnBak_Click(object sender, EventArgs e) //备份
            {
                string saveAway = this.tbxBakLoad.Text.ToString().Trim();
                string cmdText = @"backup database " + System.Configuration.ConfigurationSettings.AppSettings["dbName"] + " to disk='" + saveAway + "'";
                BakReductSql(cmdText,true);            
            }
            private void btnReduct_Click(object sender, EventArgs e)  //恢复
            {
                string openAway = this.tbxReductLoad.Text.ToString().Trim();//读取文件的路径
                string cmdText = @"restore database " + System.Configuration.ConfigurationSettings.AppSettings["dbName"] + " from disk='" + openAway + "'";            
                BakReductSql(cmdText,false);
            }
            /// <summary>
            /// 对数据库的备份和恢复操作,Sql语句实现
            /// </summary>
            /// <param name="cmdText">实现备份或恢复的Sql语句</param>
            /// <param name="isBak">该操作是否为备份操作,是为true否,为false</param>
            private void BakReductSql(string cmdText,bool isBak)
            {
                SqlCommand cmdBakRst = new SqlCommand();
                SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=master;uid=sa;pwd=;");
                try
                {
                    conn.Open();
                    cmdBakRst.Connection = conn;
                    cmdBakRst.CommandType = CommandType.Text;
                    if (!isBak)     //如果是恢复操作
                    {
                        string setOffline = "Alter database GroupMessage Set Offline With rollback immediate ";
                        string setOnline = " Alter database GroupMessage Set Online With Rollback immediate";
                        cmdBakRst.CommandText = setOffline + cmdText + setOnline;
                    }
                    else
                    {
                        cmdBakRst.CommandText = cmdText;
                    }
                    cmdBakRst.ExecuteNonQuery();
                    if (!isBak)
                    {
                        MessageBox.Show("恭喜你,数据成功恢复为所选文档的状态!", "系统消息");
                    }
                    else
                    {
                        MessageBox.Show("恭喜,你已经成功备份当前数据!", "系统消息");
                    }
                }
                catch (SqlException sexc)
                {
                    MessageBox.Show("失败,可能是对数据库操作失败,原因:" + sexc, "数据库错误消息");
                }
                catch (Exception ex)
                {
                    MessageBox.Show("对不起,操作失败,可能原因:" + ex, "系统消息");
                }
                finally
                {
                    cmdBakRst.Dispose();
                    conn.Close();
                    conn.Dispose();
                }
            }
    另外,如果出现:“尚未备份数据库的日志尾部”错误,可以在还原语句后加上 With Replace 或 With stopat