Using SMO to copy a database and data

后端 未结 4 1110
陌清茗
陌清茗 2021-01-31 18:49

I am trying to make a copy of a database to a new database on the same server. The server is my local computer running SQL 2008 Express under Windows XP. Doing this should be q

4条回答
  •  感动是毒
    2021-01-31 19:28

    I had a go at getting this working and have come up with an answer that doesn't use the Transfer class. Here is the Method i used:

           public bool CreateScript(string oldDatabase, string newDatabase)
       {
           SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=" + newDatabase + ";User Id=sa;Password=sa;");
           try
           {
               Server sv = new Server();
               Database db = sv.Databases[oldDatabase];
    
               Database newDatbase = new Database(sv, newDatabase);
               newDatbase.Create(); 
    
               ScriptingOptions options = new ScriptingOptions();
               StringBuilder sb = new StringBuilder();
               options.ScriptData = true;
               options.ScriptDrops = false;
               options.ScriptSchema = true;
               options.EnforceScriptingOptions = true;
               options.Indexes = true;
               options.IncludeHeaders = true;
               options.WithDependencies = true;
    
               TableCollection tables = db.Tables;
    
               conn.Open();
               foreach (Table mytable in tables)
               {
                   foreach (string line in db.Tables[mytable.Name].EnumScript(options))
                   {
                       sb.Append(line + "\r\n");
                   }
               }
               string[] splitter = new string[] { "\r\nGO\r\n" };
               string[] commandTexts = sb.ToString().Split(splitter, StringSplitOptions.RemoveEmptyEntries);
               foreach (string command in commandTexts)
               {
                   SqlCommand comm = new SqlCommand(command, conn);
                   comm.ExecuteNonQuery();
               }
               return true;
           }
           catch (Exception e)
           {
               System.Diagnostics.Debug.WriteLine("PROGRAM FAILED: " + e.Message);
               return false;
           }
           finally
           {
               conn.Close();
           }
       }
    

提交回复
热议问题