Scripting against an empty folder

Automate and integrate using the SQL comparison API

Moderator: Chris Auckland

Scripting against an empty folder

Postby dmory » Wed May 27, 2009 9:18 pm

I'm trying to do a comparison between two script folders, one with valid SQL scripts and a temporary one which is empty, so that I can merge all the script files of the first folder into a single script. When I try to do this, it does not script any key constraints (primary keys, foreign keys, etc).

Code: Select all
        private string CreateScript(string sScriptPath)
        {
            string sScript = "";
            string sTempFolder = CreateTemporaryFolder();
            Database dbSource = new Database();
            Database dbEmpty = new Database();
            ReadFromScriptDatabaseInformation r = new ReadFromScriptDatabaseInformation();
            r.SQLServerDBVersion = RedGate.Shared.SQL.Server.SQLVersion.SqlServer2005;
            r.DefaultCollation = "SQL_Latin1_General_CP1_CI_AS";               
            dbSource.Register(sScriptPath, r, Options.Default);
            dbEmpty.Register(sTempFolder, r, Options.Default);
            Differences diffs = dbSource.CompareWith(dbEmpty, Options.Default);
            foreach (Difference diff in diffs)
            {
                diff.Selected = true;
            }

            Work w = new Work();
            w.BuildFromDifferences(diffs, Options.Default, true);
            sScript = w.ExecutionBlock.GetString();
            Directory.Delete(sTempFolder);
            return sScript;
        }

        private string CreateTemporaryFolder()
        {
            Random r = new Random();           
            string sPath = "";
            DirectoryInfo di = null;

            int nNumAttempts = 0;
            while (di == null)
            {
                sPath = Path.GetTempPath() + "_" + r.Next(0, 1000000).ToString();
                try
                {
                    nNumAttempts++;
                    di = Directory.CreateDirectory(sPath);
                }
                catch(IOException)
                {
                    if (nNumAttempts >= 50)
                    {
                        throw;
                    }
                }
            }
            return sPath;
        }

Have I coded this correctly? Is it even possible to do this?

Any help would be much appreciated.
dmory
 
Posts: 3
Joined: Mon Oct 15, 2007 10:36 pm

Postby Michelle Taylor » Thu May 28, 2009 1:46 pm

If you're trying to produce a synchronization script from a comparison between two script folders, you'll need to specify the option Options.ForceSyncScriptGeneration (just change Options.Default to Options.Default | Options.ForceSyncScriptGeneration). Otherwise SQL Compare doesn't bother to generate a full sync script because it doesn't actually need one to synchronize the two script folders.
Michelle Taylor
 
Posts: 529
Joined: Mon Oct 30, 2006 12:45 pm
Location: Red Gate Software

Postby dmory » Thu May 28, 2009 2:25 pm

It looks like that worked. Thank you.
dmory
 
Posts: 3
Joined: Mon Oct 15, 2007 10:36 pm


Return to SQL Comparison SDK Previous Versions

Who is online

Users browsing this forum: No registered users and 0 guests