コード例 #1
0
        private void RunMigration(string localDbPath, string[] tablesToIgnoreOrAppend, string targetConnectionString, Scope scope, bool removeTempFiles)
        {
            using (var repository = new DB4Repository($"Data Source={localDbPath};Max Database Size=4000"))
            {
                var scriptRoot = Path.GetTempFileName();
                var tempScript = scriptRoot + ".sqltb";
                var generator  = new Generator4(repository, tempScript);

                if (scope == Scope.DataOnlyForSqlServerIgnoreIdentity)
                {
                    //Ignore all tables except the ones in tablesToAppend
                    var tables = repository.GetAllTableNames();
                    var list   = tables.Except(tablesToIgnoreOrAppend.ToList());
                    generator.ExcludeTables(list.ToList());
                }
                else
                {
                    generator.ExcludeTables(tablesToIgnoreOrAppend.ToList());
                }

                generator.ScriptDatabaseToFile(scope);
                using (var serverRepository = new ServerDBRepository4(targetConnectionString))
                {
                    try
                    {
                        //Handles large exports also...
                        if (File.Exists(tempScript)) // Single file
                        {
                            serverRepository.ExecuteSqlFile(tempScript);
                            if (removeTempFiles)
                            {
                                TryDeleteFile(tempScript);
                            }
                        }
                        else // possibly multiple files - tmp2BB9.tmp_0.sqlce
                        {
                            for (var i = 0; i < 400; i++)
                            {
                                var testFile = string.Format("{0}_{1}{2}", scriptRoot, i.ToString("D4"), ".sqltb");
                                if (File.Exists(testFile))
                                {
                                    serverRepository.ExecuteSqlFile(testFile);
                                    if (removeTempFiles)
                                    {
                                        TryDeleteFile(testFile);
                                    }
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        CreateBlockFile(localDbPath, ex);
                        throw;
                    }
                }
            }
        }
コード例 #2
0
 public void TestCreateSqliteServerExport()
 {
     using (IRepository sourceRepository = new SQLiteRepository(db21Conn))
     {
         var generator = new Generator4(sourceRepository, "C:\\temp\\script.sql");
         generator.ScriptDatabaseToFile(Scope.SchemaData);
         var result = generator.GeneratedScript;
     }
 }
コード例 #3
0
ファイル: Test.cs プロジェクト: inickvel/SqlCeToolbox
 public void TestServerExport()
 {
     string path = @"C:\temp\testAW2012.sqlce";
     using (IRepository sourceRepository = new ServerDBRepository4(serverAWConnectionString))
     {
         var generator = new Generator4(sourceRepository, path);
         generator.ScriptDatabaseToFile(Scope.SchemaData);
     }
 }
コード例 #4
0
        public void TestExportToSqlServer()
        {
            var path = @"C:\temp\testnw.sql";

            using (var sourceRepository = new DB4Repository(northwindConn))
            {
                var generator = new Generator4(sourceRepository, path);
                generator.ScriptDatabaseToFile(Scope.SchemaData);
            }
        }
コード例 #5
0
        public void TestServerExport()
        {
            string path = @"C:\temp\testAW2012.sqlce";

            using (IRepository sourceRepository = new ServerDBRepository4(serverAWConnectionString))
            {
                var generator = new Generator4(sourceRepository, path);
                generator.ScriptDatabaseToFile(Scope.SchemaData);
            }
        }
コード例 #6
0
 public void TestServerHierarchyIdSqlCe()
 {
     using (IRepository sourceRepository = new ServerDBRepository4(serverHIDConnectionString))
     {
         var exclusions = new List <string>();
         var generator  = new Generator4(sourceRepository, @"C:\code\test2.sql");
         generator.ExcludeTables(exclusions);
         generator.ScriptDatabaseToFile(Scope.SchemaData);
     }
 }
コード例 #7
0
        public void TestExportToSqlServer2()
        {
            var path = @"C:\temp\testum.sql";

            using (var sourceRepository = new DB4Repository(umbracoConn))
            {
                var generator = new Generator4(sourceRepository, path, false, false, false);
                generator.ExcludeTables(new List <string>());
                generator.ScriptDatabaseToFile(Scope.SchemaData);
            }
        }
コード例 #8
0
 public void TestSQLiteDateQuirk()
 {
     //cloud_service_product_infos
     //;DateFormatString=yyyy-MM-dd HH:mm:ss zzz
     using (IRepository sourceRepository = new SQLiteRepository(@"Data Source=C:\Users\erik\Downloads\spiceworks_prod.db"))
     {
         var generator = new Generator4(sourceRepository, "sw.sql");
         generator.TruncateSQLiteStrings = true;
         generator.ScriptDatabaseToFile(Scope.DataOnly);
     }
 }
コード例 #9
0
        public void TestServerExportToSqlite()
        {
            var path = @"C:\temp\testAW2012.sql";

            using (var sourceRepository = new ServerDBRepository4(serverDefConnectionString, true))
            {
                var generator = new Generator4(sourceRepository, path, false, false, true);
                generator.ExcludeTables(new List <string>());
                generator.ScriptDatabaseToFile(Scope.SchemaDataSQLite);
            }
        }
コード例 #10
0
        protected void btnExport_Click(object sender, EventArgs e)
        {
            var builder = new DbConnectionStringBuilder()
            {
                ConnectionString = GlobalSettings.DbDSN
            };

            if (builder.ContainsKey("datalayer"))
            {
                var dataLayer = builder["datalayer"].ToString();

                if (string.Equals(dataLayer, "SQLCE4Umbraco.SqlCEHelper,SQLCE4Umbraco", StringComparison.OrdinalIgnoreCase))
                {
                    builder.Remove("datalayer");

                    var sqlcePath = builder.ContainsKey("datasource") ? builder["datasource"].ToString() : builder["data source"].ToString();

                    // resolve the 'DataDirectory'
                    if (builder.ConnectionString.Contains("|DataDirectory|"))
                    {
                        var dataDirectory = AppDomain.CurrentDomain.GetData("DataDirectory").ToString();

                        if (!dataDirectory.EndsWith("\\"))
                        {
                            dataDirectory = string.Concat(dataDirectory, "\\");
                        }

                        sqlcePath = sqlcePath.Replace("|DataDirectory|", dataDirectory);
                    }

                    // check if file exists
                    if (!File.Exists(sqlcePath))
                    {
                        return;                         // FAIL
                    }
                    // set-up some vars
                    var datestamp        = DateTime.UtcNow.ToString("_yyyyMMddHHmmss");
                    var fileInfo         = new FileInfo(sqlcePath);
                    var originalFileName = fileInfo.Name.Replace(fileInfo.Extension, string.Empty);
                    var exportFileName   = string.Concat(originalFileName, datestamp, ".sql");
                    var exportPath       = Server.MapPath("~/App_Data/" + exportFileName);
                    var tempPath         = sqlcePath.Replace(fileInfo.Extension, string.Concat(datestamp, fileInfo.Extension));

                    // make a copy of the db
                    File.Copy(sqlcePath, tempPath);

                    // replace the conn string
                    if (builder.ContainsKey("datasource"))
                    {
                        builder["datasource"] = tempPath;
                    }
                    else
                    {
                        builder["data source"] = tempPath;
                    }

                    // export db
                    using (var repository = new DB4Repository(builder.ConnectionString))
                    {
                        var generator = new Generator4(repository, exportPath);
                        var scope     = this.rblScope.SelectedValue.Equals("data") ? Scope.SchemaData : Scope.Schema;

                        // save db script to file
                        generator.ScriptDatabaseToFile(scope);
                    }

                    // delete the temp db
                    File.Delete(tempPath);

                    // get the bytes from the export script
                    var bytes = File.ReadAllBytes(exportPath);

                    // check if the export script should be zipped
                    if (this.cbZip.Checked)
                    {
                        using (var zip = new ZipOutputStream(Response.OutputStream))
                        {
                            var entry = new ZipEntry(ZipEntry.CleanName(exportFileName));
                            zip.PutNextEntry(entry);
                            zip.Write(bytes, 0, bytes.Length);
                        }

                        // push the zip file to the browser
                        Response.AddHeader("content-disposition", string.Concat("attachment; filename=", exportFileName, ".zip"));
                        Response.ContentType = "application/zip";
                    }
                    else
                    {
                        // push the export script to the browser
                        Response.AddHeader("content-disposition", string.Concat("attachment; filename=", exportFileName));
                        Response.ContentType = "text/x-sql";
                        Response.BinaryWrite(bytes);
                    }

                    Response.Flush();
                    Response.End();
                }
            }
        }
コード例 #11
0
ファイル: Test.cs プロジェクト: inickvel/SqlCeToolbox
 public void TestSQLiteDateQuirk()
 {
     //cloud_service_product_infos
     //;DateFormatString=yyyy-MM-dd HH:mm:ss zzz
     using (IRepository sourceRepository = new SQLiteRepository(@"Data Source=C:\Users\erik\Downloads\spiceworks_prod.db"))
     {
         var generator = new Generator4(sourceRepository, "sw.sql");
         generator.TruncateSQLiteStrings = true;
         generator.ScriptDatabaseToFile(Scope.DataOnly);
     }
 }
コード例 #12
0
ファイル: Test.cs プロジェクト: inickvel/SqlCeToolbox
 public void TestServerHierarchyIdSqlCe()
 {
     using (IRepository sourceRepository = new ServerDBRepository4(serverHIDConnectionString))
     {
         var exclusions = new List<string>();
         var generator = new Generator4(sourceRepository, @"C:\code\test2.sql");
         generator.ExcludeTables(exclusions);
         generator.ScriptDatabaseToFile(Scope.SchemaData);
     }
 }