asp.net高级程序设计(第3版)里面的.sql文件如何还原成数据库文件.mdf?很急,谢谢!

解决方案 »

  1.   

    首先创建数据库,导入SQL
    然后分离数据库,得到 .mdf
      

  2.   

    将 .sql文件 中的 SQL语句拿到数据库中执行 
      

  3.   


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data;
    using System.Configuration;
    using System.Data.SqlClient;
    namespace cofcms.page.admin
    {
        public class DBOperate
        {
            /// <summary>
            /// 服务器
            /// </summary>
            private string server;        /// <summary>
            /// 登录名
            /// </summary>
            private string uid;        /// <summary>
            /// 登录密码
            /// </summary>
            private string pwd;        /// <summary>
            /// 要操作的数据库
            /// </summary>
            private string database;        /// <summary>
            /// 数据库连接字符串
            /// </summary>
            private string conn;        /// <summary>
            /// DbOperate类的构造函数
            /// 在这里进行字符串的切割,获取服务器,登录名,密码,数据库
            /// </summary>
            public DBOperate()
            {
                conn = ConfigurationManager.ConnectionStrings["sqlconstring"].ConnectionString;
                server = StringCut(conn, "server=", ";");
                uid = StringCut(conn, "uid=", ";");
                pwd = StringCut(conn, "pwd=", ";");
                database = StringCut(conn, "database=", ";");
            }
            /// <summary>
            /// 切割字符串
            /// </summary>
            /// <param name="str"></param>
            /// <param name="bg"></param>
            /// <param name="ed"></param>
            /// <returns></returns>
            public string StringCut(string str, string bg, string ed)
            {
                string sub;
                sub = str.Substring(str.IndexOf(bg) + bg.Length);
                sub = sub.Substring(0, sub.IndexOf(";"));
                return sub;
            }
            /// <summary>
            /// 构造文件名
            /// </summary>
            /// <returns>文件名</returns>
            public string CreatePath()
            {
                string CurrTime = System.DateTime.Now.ToString();
                CurrTime = CurrTime.Replace("-", "");
                CurrTime = CurrTime.Replace(":", "");
                CurrTime = CurrTime.Replace(" ", "");
                CurrTime = CurrTime.Substring(0, 12);
                //string path = @"d:\\beifen\\";            string path ="~/backupdata/";
                path += database;
                path += "_db_";
                path += CurrTime;
                path += ".BAK";
                return HttpContext.Current.Server.MapPath(path);//返回 (例如:sql_db_20101111.BAK)
            }
            public string DataBaseName()
            {
                string path = database;
                return path;//返回数据库名字
            }        /// <summary>
            /// 数据库备份
            /// </summary>
            /// <returns>备份是否成功</returns>
            public bool DbBackup()
            {
                string path = CreatePath();
                SQLDMO.Backup oBackup = new SQLDMO.BackupClass();
                SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
                try
                {
                    oSQLServer.LoginSecure = false;
                    oSQLServer.Connect(server, uid, pwd);
                    oBackup.Action = SQLDMO.SQLDMO_BACKUP_TYPE.SQLDMOBackup_Database;
                    oBackup.Database = database;
                    oBackup.Files = path;
                    oBackup.BackupSetName = database;
                    oBackup.BackupSetDescription = "数据库备份";
                    oBackup.Initialize = true;
                    oBackup.SQLBackup(oSQLServer);
                    //HttpContext.Current.Response.Write("数据库备份成功!");                return true;
                }
                catch (Exception ex)
                {
                    return false;
                    throw ex;
                }
                finally
                {
                    oSQLServer.DisConnect();
                }
            }        /// <summary>
            /// 数据库恢复
            /// </summary>
            public string DbRestore()
            {
                if (exepro() != true)//执行存储过程
                {
                    return "操作失败";
                }
                else
                {
                    SQLDMO.Restore oRestore = new SQLDMO.RestoreClass();
                    SQLDMO.SQLServer oSQLServer = new SQLDMO.SQLServerClass();
                    try
                    {
                        exepro();
                        oSQLServer.LoginSecure = false;
                        oSQLServer.Connect(server, uid, pwd);
                        oRestore.Action = SQLDMO.SQLDMO_RESTORE_TYPE.SQLDMORestore_Database;
                        oRestore.Database = database;
                        //自行修改
                        //oRestore.Files = @"d:\beifen\CofCMS_db_201011301121.BAK";
                        oRestore.Files = CreatePath();
                        oRestore.FileNumber = 1;
                        oRestore.ReplaceDatabase = true;
                        oRestore.SQLRestore(oSQLServer);
                        return "恢复成功";
                    }
                    catch (Exception e)
                    {
                        return "恢复数据库失败";
                        throw e;
                    }
                    finally
                    {
                        oSQLServer.DisConnect();
                    }
                }
            }        /// <summary>
            /// 杀死当前库的所有进程
            /// </summary>
            /// <returns></returns>
            private bool exepro()
            {
                SqlConnection conn1 = new SqlConnection("server=" + server + ";uid=" + uid + ";pwd=" + pwd + ";database=master");
                SqlCommand cmd = new SqlCommand("killspid", conn1);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@dbname", "db_name");
                //cmd.Parameters.Add("@dbname", "db");
                try
                {
                    conn1.Open();
                    cmd.ExecuteNonQuery();
                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                    throw ex;
                }
                finally
                {
                    conn1.Close();
                }
            }    }
    }
      

  4.   

    打开数据库,单击“打开文件”图标,找到你所要导入的。sql文件。。导入后执行即可
      

  5.   

    打开你的那个sql文件,看看是什么,如果是创建数据库 表等等的sql语句,就直接运行吧