Beispiel #1
0
        /// <summary>
        /// Perform the generation command
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void GenerateTables_Click(object sender, EventArgs e)
        {
            // create parameters
            GenerationParameters parms = new GenerationParameters()
            {
                AuthorName = _solution.Author,
                DLLDestinationPath = _solution.DLLPath,
                OutputFolder = _solution.OutputFolder,
                RootNamespace = _solution.RootNamespace,
                SchemaName = SchemaNames.Text,
                CompileCode = CompileCode.Checked,
                RunSQLScripts = RunSQLScripts.Checked
            };

            // get selected tables and views to generate
            string[] tableNames = (from object o in Tables.CheckedItems select o.ToString()).ToArray();
            string[] viewNames = (from object o in Views.CheckedItems select o.ToString()).ToArray();

            // load the manager
            _manager.LoadTables(tableNames, SchemaNames.Text);
            _manager.LoadViews(viewNames, SchemaNames.Text);

            // setup the progress bar
            //ProgressIndicator prog = new ProgressIndicator(tableNames.Length + viewNames.Length);
            //prog.Show();
            BasicProgress prog = new BasicProgress();
            prog.Show();

            // run the generator
            _manager.Execute(parms);

            prog.Close();
            prog.Dispose();

            Messages box = new Messages();

            if (_manager.CompilerMessages.Length > 0)
                box.SetMessagesText(_manager.CompilerMessages);
            else
                box.SetMessagesText("The generator has successfully generated you code!");

            box.Show();
        }
        public void Test1()
        {
            // create a parameters object
            GenerationParameters gps = new GenerationParameters()
            {
                AuthorName = "Nathan Townsend",
                DLLDestinationPath = @"C:\Temp\Simplicity\MySimplicity.dll",
                OutputFolder = @"C:\Temp\Simplicity\",
                RootNamespace = "MySimplicity",
                SchemaName = "dbo"
            };

            // create a manager
            Manager manager = new Manager("Nathan-HP\\SQLEXPRESS", "Simplicity");

            // load all the tables
            manager.LoadAllTables(gps.SchemaName);

            // create the code files, the dll file, and execute stored procs on database
            manager.Execute(gps);
        }
Beispiel #3
0
        /// <summary>
        /// Generates code for the loaded tables and views
        /// </summary>
        /// <param name="Params">Values usedin the generated code</param>
        public void Execute(GenerationParameters Params)
        {
            _messages.Clear();

            // create template data objects for the generator
            List<TemplateData> data = new List<TemplateData>();
            foreach (Table table in _tables)
                data.Add(new TemplateData(table, Params.AuthorName, Params.RootNamespace, _database.Name));

            foreach (View view in _views)
                data.Add(new TemplateData(view, Params.AuthorName, Params.RootNamespace, _database.Name));
            Console.WriteLine("Template data created");

            // generate table & view definitions
            DatabaseScriptWriter writer = _database.GetDatabaseScriptWriter(Params.SchemaName);

            // tables
            ScriptObject[] tables = writer.Tables;
            if (tables.Length > 0)
            {
                string tablePath = Path.Combine(Params.OutputFolder, "Tables");
                if (!Directory.Exists(tablePath))
                    Directory.CreateDirectory(tablePath);
                foreach (ScriptObject table in tables)
                    File.WriteAllText(Path.Combine(tablePath, table.Name + ".sql"), table.Content);
            }

            // views
            ScriptObject[] views = writer.Views;
            if (views.Length > 0)
            {
                string viewPath = Path.Combine(Params.OutputFolder, "Views");
                if (!Directory.Exists(viewPath))
                    Directory.CreateDirectory(viewPath);
                foreach (ScriptObject view in views)
                    File.WriteAllText(Path.Combine(viewPath, view.Name + ".sql"), view.Content);
            }

            // generate the code files
            Generator gen = new Generator();
            gen.CodeGenerated += gen_CodeGenerated;
            CodeFiles files = gen.GenerateCodeFiles(data.ToArray(), Params.OutputFolder);
            Console.WriteLine("Code files generated");

            // compile the dll file and write it to the destination
            if (Params.CompileCode)
            {
                string[] CSharpFiles = (from CodeFile f in files.AllFiles where f.FileType != CodeFileType.SP select f.FileContents).ToArray();
                Builder builder = new Builder(Params.DLLDestinationPath);
                string sourcePath = Path.Combine(Params.OutputFolder, "CSharp");
                CompilerResults results = builder.Compile(sourcePath);

                Console.WriteLine("Comppiler Finished with " + results.Errors.Count.ToString() + " errors");

                // show any errors
                Console.WriteLine("Compiler errors: " + results.Errors.Count.ToString());
                foreach (CompilerError error in results.Errors)
                {
                    _messages.AppendLine("COMPILE ERROR");
                    _messages.AppendLine("File Name: " + error.FileName);
                    _messages.AppendLine("Line Number: " + error.Line.ToString());
                    _messages.AppendLine(error.ErrorText);
                    _messages.AppendLine("- - - - - - - - - - - - - - - - - - - - - ");
                    _messages.AppendLine();
                    _messages.AppendLine();
                }
            }

            // execute the stored procedures
            if (Params.RunSQLScripts)
            {
                string[] SPFiles = (from CodeFile f in files.AllFiles where f.FileType == CodeFileType.SP select f.FileContents).ToArray();
                DatabaseScriptRunner sqlRunner = _database.GetDatabaseScriptRunner();
                sqlRunner.RunScripts(SPFiles);
                Console.WriteLine("Stored Procedures have been executed");
            }
        }