Ejemplo n.º 1
0
        public void TableBodyPartInsertTest()
        {
            DBTable  table = new DBTable("dbo", "TestTable");
            DBColumn col1  = new DBColumn(table, "TestCol1", true, DBDatatype.integer);
            DBColumn col2  = new DBColumn(table, "TestCol2", false, DBDatatype.nvarchar);

            table.Columns = new List <DBColumn>()
            {
                col1, col2
            };

            ColumnMapping colMap1 = new NullColumnMapping(col1, ColumnUse.Exclude);
            ColumnMapping colMap2 = new LiteralColumnMapping("2", LiteralType.String, col2, ColumnUse.Insert);

            TableMapping tableMapping = new TableMapping(table, TableMappingImportType.Insert, new ColumnMapping[] { colMap1, colMap2 });

            ImportConfiguration config = getTestImportConfig();

            SourceDataEntry[] entries = new SourceDataEntry[] { SourceDataEntry.CreateDataEntry("", DataType.String, "") };
            SourceDataRow[]   rows    = new SourceDataRow[] { new SourceDataRow(entries, "0") };
            SourceDataTable   dt      = new SourceDataTable(rows, new string[] { "" });

            StatementTableMappingPart part = new StatementTableMappingPart(tableMapping, dt.GetDataRow(0));

            string[] bodyParts = part.GetStatementBodyPart().Split(new string[] { "\n" }, StringSplitOptions.None).Where(s => s.Length > 0).ToArray();

            Assert.AreEqual(3, bodyParts.Length);
            Assert.AreEqual("INSERT INTO dbo.TestTable (TestCol2)", bodyParts[0]);
            Assert.AreEqual("OUTPUT inserted.TestCol1, inserted.TestCol2 INTO @sqlimport_table_" + tableMapping.TableMappingReference.Replace(".", "_") +
                            "(TestCol1, TestCol2)", bodyParts[1]);
            Assert.AreEqual("VALUES ('2')", bodyParts[2]);
        }
Ejemplo n.º 2
0
        public void WorksheetWithOffsetTest()
        {
            ExcelReader reader = new ExcelReader(worksheetWorksheetOffset);

            reader.HasHeaders = true;
            SourceDataTable dataTable = reader.ReadToDataTable();

            Assert.AreEqual(4, dataTable.NumberOfRows);
        }
Ejemplo n.º 3
0
        public void WorksheetWithEmptyRowInTableTest()
        {
            ExcelReader reader = new ExcelReader(worksheetEmptyRowInTable);

            reader.HasHeaders = true;
            SourceDataTable dataTable = reader.ReadToDataTable();

            Assert.AreEqual(3, dataTable.NumberOfRows);
        }
Ejemplo n.º 4
0
        public void CellDataTypesTest()
        {
            ExcelReader reader = new ExcelReader(dataTypesTestFile);

            reader.HasHeaders = true;
            SourceDataTable dataTable = reader.ReadToDataTable();

            string[] headers = reader.GetHeaderNames();

            SourceDataEntry entry1 = dataTable.GetDataRow(0).GetSourceDataEntry(headers[0]);

            Assert.AreEqual(DataType.Bool, entry1.DataType);
            Assert.AreEqual("1", entry1.Value);

            SourceDataEntry entry2 = dataTable.GetDataRow(0).GetSourceDataEntry(headers[1]);

            Assert.AreEqual(DataType.DateTime, entry2.DataType);
            Assert.AreEqual("12/30/1899 00:00:00", entry2.Value);

            SourceDataEntry entry3 = dataTable.GetDataRow(0).GetSourceDataEntry(headers[2]);

            Assert.AreEqual(DataType.Error, entry3.DataType);
            Assert.AreEqual("", entry3.Value);

            SourceDataEntry entry4 = dataTable.GetDataRow(0).GetSourceDataEntry(headers[3]);

            Assert.AreEqual(DataType.String, entry4.DataType);
            Assert.AreEqual("Test string", entry4.Value);

            SourceDataEntry entry5 = dataTable.GetDataRow(0).GetSourceDataEntry(headers[4]);

            Assert.AreEqual(DataType.Number, entry5.DataType);
            Assert.AreEqual("1.23", entry5.Value);

            SourceDataEntry entry6 = dataTable.GetDataRow(0).GetSourceDataEntry(headers[5]);

            Assert.AreEqual(DataType.String, entry6.DataType);
            Assert.AreEqual("Test string", entry6.Value);

            SourceDataEntry entry7 = dataTable.GetDataRow(0).GetSourceDataEntry(headers[6]);

            Assert.AreEqual(DataType.String, entry7.DataType);
            Assert.AreEqual("Test string", entry7.Value);

            SourceDataEntry entry8 = dataTable.GetDataRow(0).GetSourceDataEntry(headers[7]);

            Assert.AreEqual(DataType.Number, entry8.DataType);
            Assert.AreEqual("1.23", entry8.Value);
        }
Ejemplo n.º 5
0
        public void WorksheetMissingHeaderTest()
        {
            ExcelReader reader = new ExcelReader(worksheetMissingHeader);

            reader.HasHeaders = true;
            SourceDataTable dataTable = reader.ReadToDataTable();

            string[] headers = dataTable.Headers;

            Assert.AreEqual("TestHeader1", headers[0]);
            Assert.AreEqual("TestHeader3", headers[1]);

            Assert.AreEqual(2, headers.Length);
            Assert.AreEqual(3, dataTable.NumberOfRows);
        }
Ejemplo n.º 6
0
        public void WorksheetNoHeadersTest()
        {
            ExcelReader reader = new ExcelReader(worksheetNoHeaders);

            reader.HasHeaders = false;
            SourceDataTable dataTable = reader.ReadToDataTable();

            string[] headers = dataTable.Headers;

            Assert.AreEqual("A", headers[0]);
            Assert.AreEqual("B", headers[1]);
            Assert.AreEqual("C", headers[2]);

            Assert.AreEqual(4, dataTable.NumberOfRows);
        }
Ejemplo n.º 7
0
        public void WorksheetWithHeadersTest()
        {
            ExcelReader reader = new ExcelReader(worksheetWithHeaders);

            reader.HasHeaders = true;
            SourceDataTable dataTable = reader.ReadToDataTable();

            string[] headers = dataTable.Headers;

            Assert.AreEqual("TestHeader1", headers[0]);
            Assert.AreEqual("TestHeader2", headers[1]);
            Assert.AreEqual("TestHeader3", headers[2]);

            Assert.AreEqual(4, dataTable.NumberOfRows);
        }
Ejemplo n.º 8
0
        public void WorksheetWithEmptyCellTest()
        {
            ExcelReader reader = new ExcelReader(worksheetEmptyCell);

            reader.HasHeaders = true;
            SourceDataTable dataTable = reader.ReadToDataTable();

            Assert.AreEqual(4, dataTable.NumberOfRows);

            string          header         = reader.GetHeaderNames()[1];
            SourceDataEntry emptyDataEntry = dataTable.GetDataRow(1).GetSourceDataEntry(header);

            Assert.AreEqual(DataReader.DataType.Null, emptyDataEntry.DataType);
            Assert.AreEqual("NULL", emptyDataEntry.Value);
        }
Ejemplo n.º 9
0
        public string PreviewSQL()
        {
            if (wizardViewModel.ConnectionPageViewModel.ExcelReader == null)
            {
                throw new Exception("No excel file selected.");
            }
            else
            {
                SourceDataTable dataTable = wizardViewModel.ConnectionPageViewModel.ExcelReader.ReadFirstRowToDataTable();

                SQLServerStatementCreator statementCreator = new SQLServerStatementCreator(createImportConfiguration(), dataTable);
                ImportStatement           previewStatement = statementCreator.CreateStatement(0);
                return(previewStatement.SqlStatement);
            }
        }
Ejemplo n.º 10
0
        public void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            isImporting = true;

            importStates.Add("Starting import...");
            NotifyPropertyChanged("ImportStates");

            importStates.Add("Reading excel file");
            NotifyPropertyChanged("ImportStates");

            SourceDataTable dataTable = reader.ReadToDataTable();

            importRowCount = dataTable.NumberOfRows;
            NotifyPropertyChanged("ImportRowCount");

            importStates.Add("Creating SQL statements");
            NotifyPropertyChanged("ImportStates");

            BackgroundWorker worker = sender as BackgroundWorker;


            SQLServerStatementCreator statementCreator = new SQLServerStatementCreator(config, dataTable);

            ImportStatement[] statements = statementCreator.CreateStatements();

            importStates.Add("Importing data...");
            NotifyPropertyChanged("ImportStates");

            SQLServerDataImporter dataImporter = new SQLServerDataImporter(config);

            foreach (ImportStatement statement in statements)
            {
                ImportResult result = dataImporter.ImportData(statement);
                importResults.Add(result);

                importProgress++;
                NotifyPropertyChanged("ImportProgress");

                importStates[3] = String.Format("Importing data... row {0} of {1}", importProgress, statements.Length);
                NotifyPropertyChanged("ImportStates");
            }
            importStates.Add("Import complete");
            NotifyPropertyChanged("ImportStates");

            finishImport();
        }
Ejemplo n.º 11
0
        public void TableBodyPartUpdateTest()
        {
            DBTable  table = new DBTable("dbo", "TestTable");
            DBColumn col1  = new DBColumn(table, "TestCol1", true, DBDatatype.integer);
            DBColumn col2  = new DBColumn(table, "TestCol2", false, DBDatatype.nvarchar);
            DBColumn col3  = new DBColumn(table, "TestCol3", false, DBDatatype.integer);

            table.Columns = new List <DBColumn>()
            {
                col1, col2, col3
            };

            TableMapping sourceTablemapping = new TableMapping(new DBTable("dbo", "TestTable2"), TableMappingImportType.Insert, null);

            ColumnMapping colMap1 = new TableColumnMapping(sourceTablemapping, col1, col1, ColumnUse.Where);
            ColumnMapping colMap2 = new LiteralColumnMapping("2", LiteralType.String, col2, ColumnUse.Where);
            ColumnMapping colMap3 = new LiteralColumnMapping("3", LiteralType.String, col3, ColumnUse.Set);

            TableMapping tableMapping = new TableMapping(table, TableMappingImportType.Update, new ColumnMapping[] { colMap1, colMap2, colMap3 });

            ImportConfiguration config = getTestImportConfig();

            SourceDataEntry[] entries = new SourceDataEntry[] { SourceDataEntry.CreateDataEntry("", DataType.String, "") };
            SourceDataRow[]   rows    = new SourceDataRow[] { new SourceDataRow(entries, "0") };
            SourceDataTable   dt      = new SourceDataTable(rows, new string[] { "" });

            StatementTableMappingPart part = new StatementTableMappingPart(tableMapping, dt.GetDataRow(0));

            string[] bodyParts = part.GetStatementBodyPart().Split(new string[] { "\n" }, StringSplitOptions.None).Where(s => s.Length > 0).ToArray();

            Assert.AreEqual(4, bodyParts.Length);
            Assert.AreEqual("UPDATE dbo.TestTable", bodyParts[0]);
            Assert.AreEqual("SET TestCol3='3'", bodyParts[1]);
            Assert.AreEqual("OUTPUT inserted.TestCol1, inserted.TestCol2, inserted.TestCol3 INTO @sqlimport_table_" +
                            tableMapping.TableMappingReference.Replace(".", "_") + "(TestCol1, TestCol2, TestCol3)", bodyParts[2]);
            Assert.AreEqual("WHERE TestCol1 = (SELECT TOP 1 t.TestCol1 FROM @sqlimport_table_" +
                            sourceTablemapping.TableMappingReference.Replace(".", "_") + " t) and TestCol2 = '2'", bodyParts[3]);
        }
Ejemplo n.º 12
0
        private void DrawTableContent()
        {
            var           tr = new HtmlTableRow();
            HtmlTableCell td;

            DataRow[] dr;
            var       arr_totals      = new decimal[13];
            var       arr_func_totals = new decimal[13];
            decimal   current_amount;
            var       func = "";
            int       m_index;

            foreach (DataRow dr_total in TotalsDataTable.Rows)
            {
                if (func != dr_total["SUM_FUNC"].ToString())
                {
                    //new function section:
                    /************************************************/
                    //first, totals row for previous function:
                    /************************************************/
                    if (func != "")
                    {
                        //func can be equal "" only for the first row - in this case we don't have prev.totals row
                        tr = new HtmlTableRow();

                        td = GetNewCellText("Total", "tableTotal", CELL_ALIGN_LEFT);
                        if (DisplayColumnObjClassCode)
                        {
                            td.ColSpan = 2;
                        }
                        tr.Cells.Add(td);
                        if (MonthlyView)
                        {
                            foreach (var m in month_arr)
                            {
                                m_index = Int32.Parse(m);
                                tr.Cells.AddNewMoneyCell(arr_func_totals[m_index], "tableTotal", CELL_ALIGN_RIGHT);
                                arr_func_totals[m_index] = 0;
                            }
                        }
                        tr.Cells.AddNewMoneyCell(arr_func_totals[0], "tableTotal", CELL_ALIGN_RIGHT);

                        TableToDraw.Rows.Add(tr);
                    }
                    /************************************************/
                    //then, start new function section:
                    /************************************************/
                    tr = new HtmlTableRow();

                    func = dr_total["SUM_FUNC"].ToString();

                    tr.Cells.AddCell(func, "tableBold", CELL_ALIGN_LEFT);
                    if (DisplayColumnObjClassCode)
                    {
                        tr.Cells.AddCell(dr_total["OBJ_CLASS_CD"].ToString(), "tableBold", CELL_ALIGN_RIGHT);
                    }

                    if (MonthlyView)
                    {
                        foreach (var m in month_arr)
                        {
                            m_index = Int32.Parse(m);
                            dr      = SourceDataTable.Select(String.Format("SUM_FUNC='{0}' AND OBJ_CLASS_CD='{1}' AND BookMonth='{2}'", dr_total["SUM_FUNC"], dr_total["OBJ_CLASS_CD"], m));
                            if (dr.Length > 0)
                            {
                                current_amount = (decimal)dr[0]["Amount"];
                            }
                            else
                            {
                                current_amount = 0;
                            }
                            arr_totals[m_index]      += current_amount;
                            arr_func_totals[m_index] += current_amount;
                            if (BuildReportForExcel)
                            {
                                tr.Cells.AddNewMoneyCell(current_amount, "tableRow");
                            }
                            else
                            {
                                tr.Cells.AddMoneyCellLink(current_amount, m, dr_total["SUM_FUNC"].ToString(), dr_total["OBJ_CLASS_CD"].ToString(), CellLinkOnClick);
                            }
                        }
                    }

                    current_amount      = (decimal)dr_total["Amount"];
                    arr_totals[0]      += current_amount;
                    arr_func_totals[0] += current_amount;
                    tr.Cells.AddNewMoneyCell(current_amount, "tableRow");

                    TableToDraw.Rows.Add(tr);
                }
                /************************************************/
                //continue the same function section:
                /************************************************/
                else
                {
                    tr = new HtmlTableRow();

                    tr.Cells.AddCell("", "tableBold", CELL_ALIGN_LEFT);
                    if (DisplayColumnObjClassCode)
                    {
                        tr.Cells.AddCell(dr_total["OBJ_CLASS_CD"].ToString(), "tableBold", CELL_ALIGN_RIGHT);
                    }

                    if (MonthlyView)
                    {
                        foreach (var m in month_arr)
                        {
                            m_index = Int32.Parse(m);
                            dr      = SourceDataTable.Select(String.Format("SUM_FUNC='{0}' AND OBJ_CLASS_CD='{1}' AND BookMonth='{2}'", dr_total["SUM_FUNC"], dr_total["OBJ_CLASS_CD"], m));
                            if (dr.Length > 0)
                            {
                                current_amount = (decimal)dr[0]["Amount"];
                            }
                            else
                            {
                                current_amount = 0;
                            }
                            arr_totals[m_index]      += current_amount;
                            arr_func_totals[m_index] += current_amount;
                            if (BuildReportForExcel)
                            {
                                tr.Cells.AddNewMoneyCell(current_amount, "tableRow");
                            }
                            else
                            {
                                tr.Cells.AddMoneyCellLink(current_amount, m, dr_total["SUM_FUNC"].ToString(), dr_total["OBJ_CLASS_CD"].ToString(), CellLinkOnClick);
                            }
                        }
                    }

                    current_amount      = (decimal)dr_total["Amount"];
                    arr_totals[0]      += current_amount;
                    arr_func_totals[0] += current_amount;
                    tr.Cells.AddNewMoneyCell(current_amount, "tableRow");

                    TableToDraw.Rows.Add(tr);
                }
            }
            /************************************************/
            //add total totals section:
            /************************************************/
            tr = new HtmlTableRow();

            td = GetNewCellText("Total", "tableFooter", CELL_ALIGN_LEFT);
            if (DisplayColumnObjClassCode)
            {
                td.ColSpan = 2;
            }
            tr.Cells.Add(td);
            if (MonthlyView)
            {
                foreach (var m in month_arr)
                {
                    m_index = Int32.Parse(m);
                    tr.Cells.AddNewMoneyCell(arr_totals[m_index], "tableFooter");
                }
            }
            tr.Cells.AddNewMoneyCell(arr_totals[0], "tableFooter");

            TableToDraw.Rows.Add(tr);
        }
        public bool Process(IWorksheet worksheet)
        {
            bool contains_data = false;
            int  start_row     = -1;

            try
            {
                Logger.Aquire();
                Logger.Write("Worksheet.Process", "", System.Diagnostics.TraceEventType.Information, 2, 0, SharedData.LogCategory);
                Logger.Write("Worksheet.Process", "PROCESSING WORKSHEET: " + worksheet.Name, System.Diagnostics.TraceEventType.Information, 2, 0, SharedData.LogCategory);
                Logger.Write("Worksheet.Process", "       SOURCE MODULE: " + SourceDataTable.Name, System.Diagnostics.TraceEventType.Information, 2, 0, SharedData.LogCategory);
                Logger.Write("Worksheet.Process", "              FILTER: " + SourceDataTable.FilterExpression, System.Diagnostics.TraceEventType.Information, 2, 0, SharedData.LogCategory);

                if (StartRow.ToLower() == "%lastusedrow%")
                {
                    start_row = worksheet.UsedRange.RowCount;
                }
                else if (StartRow.ToLower() == "%firstnewrow%")
                {
                    start_row = worksheet.UsedRange.Row + 1;
                }
                else
                {
                    start_row = Convert.ToInt32(StartRow);
                }

                Logger.Write("Worksheet.Process", "    START COLUMN|ROW: " + StartColumn + start_row, System.Diagnostics.TraceEventType.Information, 2, 0, SharedData.LogCategory);
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                Logger.Release();
            }

            // Rename the worksheet if applicable.
            if (!string.IsNullOrEmpty(NewSheetName))
            {
                Logger.WriteLine("Worksheet.Process", "       CHANGING NAME: " + TextParser.Parse(NewSheetName, DrivingData, SharedData, ModuleCommands), System.Diagnostics.TraceEventType.Information, 2, 0, SharedData.LogCategory);
                worksheet.Name = TextParser.Parse(NewSheetName, DrivingData, SharedData, ModuleCommands);

                if (worksheet.Name.Length > 31)
                {
                    throw new Exception("The worksheet name (" + worksheet.Name + ") cannot have more than 31 characters.");
                }
            }

            // If the worksheet does not have a source table defined then return false.
            // Without a source table the worksheet will be empty.
            if (HasSourceTable)
            {
                if (!SharedData.Data.Contains(SourceDataTable.Name))
                {
                    throw new Exception(string.Format("The source data table '{0}' for sheet at index '{1}' was not found in the global cache set.", SourceDataTable.Name, SheetNumber));
                }

                // Load the worksheet with the source table's data.
                if (!Load(SourceDataTable.Process(ConditionalTables), worksheet))
                {
                    // No data wasloaded into the worksheet.
                    contains_data = false;
                }
                else
                {
                    // Perform any required formatting.
                    Format(worksheet);

                    contains_data = true;
                }
            }
            else
            {
                contains_data = false;
            }

            return(contains_data);
        }
Ejemplo n.º 14
0
        protected void TransformData()
        {
            MemoryStream         xslt_stream, xml_stream;
            XmlTextReader        xml_reader;
            XsltSettings         xslt_settings;
            XPathDocument        doc;
            DataTable            DataSource = null;
            XslCompiledTransform xslt;
            XsltArgumentList     arg_list = null;
            string template_path          = null;

            try
            {
                CreateResultsTable();

                xslt          = new XslCompiledTransform();
                xslt_settings = new XsltSettings(true, true);
                xslt_stream   = new MemoryStream();
                xml_stream    = new MemoryStream();

                if (HasTemplate)
                {
                    Logger.WriteLine("XsltWriter.TransformData", "", System.Diagnostics.TraceEventType.Information, 2, 0, SharedData.LogCategory);

                    // Determine if we are using an XSLT template on disk or if we are getting it from another module.
                    if (!string.IsNullOrEmpty(TemplateName))
                    {
                        // Parse the templates path.
                        template_path = TextParser.Parse(TemplateName, DrivingData, SharedData, ModuleCommands);

                        // Check for the file expecting relative path.
                        if (System.IO.File.Exists(System.IO.Path.GetFullPath(template_path)))
                        {
                            TemplateName = System.IO.Path.GetFullPath(template_path);
                        }
                        // Check for the file from absolute path.
                        else if (System.IO.File.Exists(template_path))
                        {
                            TemplateName = template_path;
                        }
                        // Check for the file two layers up incase we are in the bin/debug|release folder.
                        else if (System.IO.File.Exists(@"..\..\" + template_path))
                        {
                            TemplateName = System.IO.Path.GetFullPath(@"..\..\" + template_path);
                        }
                        else
                        {
                            throw new Exception(string.Format("The XSLT template file '{0}' was not found.", template_path));
                        }

                        Logger.WriteLine("XsltWriter.TransformData", "PHYSICAL STYLE SHEET: ", System.Diagnostics.TraceEventType.Information, 2, 0, SharedData.LogCategory);

                        // Load the style sheet from the referenced path.
                        xslt.Load(TextParser.Parse(TemplateName, DrivingData, SharedData, ModuleCommands), xslt_settings, null);
                    }
                    else
                    {
                        Logger.WriteLine("XsltWriter.TransformData", " DYNAMIC STYLE SHEET: ", System.Diagnostics.TraceEventType.Information, 2, 0, SharedData.LogCategory);

                        // Load the style sheet from the referenced module.
                        xslt.Load(new XmlTextReader(new StringReader(TextParser.Parse(TemplateBody, DrivingData, SharedData, ModuleCommands))), xslt_settings, null);
                    }

                    if (SourceDataTable != null)
                    {
                        Logger.WriteLine("XsltWriter.TransformData", "          DATASOURCE: " + TextParser.Parse(SourceDataTable.Name, DrivingData, SharedData, ModuleCommands), System.Diagnostics.TraceEventType.Information, 2, 0, SharedData.LogCategory);
                        //Logger.WriteLine("XsltWriter.TransformData", "              FILTER: " + SourceDataTable.FilterExpression, System.Diagnostics.TraceEventType.Information, 2, 0, SharedData.LogCategory);

                        // Get the data source table.
                        DataSource = SourceDataTable.Process(DestinationDataTable.CacheTableCollection);
                    }

                    // Check to see if the XSLT writer has any arguments defined.
                    if (ArgumentContainer != null && ArgumentContainer.Count > 0)
                    {
                        Logger.WriteLine("XsltWriter.TransformData", "", System.Diagnostics.TraceEventType.Information, 2, 0, SharedData.LogCategory);
                        Logger.WriteLine("XsltWriter.TransformData", "      ARGUMENT COUNT: " + ArgumentContainer.Count, System.Diagnostics.TraceEventType.Information, 2, 0, SharedData.LogCategory);

                        arg_list = new XsltArgumentList();

                        // Load the argument list.
                        foreach (Argument arg in ArgumentContainer.Arguments)
                        {
                            Logger.WriteLine("XsltWriter.TransformData", "", System.Diagnostics.TraceEventType.Information, 2, 0, SharedData.LogCategory);
                            Logger.WriteLine("XsltWriter.TransformData", "       ARGUMENT NAME: " + arg.Name, System.Diagnostics.TraceEventType.Information, 2, 0, SharedData.LogCategory);
                            Logger.WriteLine("XsltWriter.TransformData", "               VALUE: " + TextParser.Parse(arg.Value, DrivingData, SharedData, ModuleCommands), System.Diagnostics.TraceEventType.Information, 2, 0, SharedData.LogCategory);

                            arg_list.AddParam(arg.Name, "", TextParser.Parse(arg.Value, DrivingData, SharedData, ModuleCommands));
                        }
                    }

                    if ((DataSource != null && DataSource.Rows.Count > 0) || AllowEmptyReport)
                    {
                        if (DataSource == null)
                        {
                            DataSource = new DataTable("NOT_USED");
                        }

                        if (AllowEmptyReport && !string.IsNullOrEmpty(EmptyMessage) && DataSource.Rows.Count == 0)
                        {
                            DataSource.Columns.Add(new DataColumn("Message", typeof(string)));

                            var row = DataSource.NewRow();
                            row["Message"] = EmptyMessage;
                            DataSource.Rows.Add(row);
                        }

                        // Get the data from the source table in XML form.
                        DataSource.WriteXml(xml_stream);

                        // Make sure we are looking at the begining of our data stream.
                        xml_stream.Position = 0;

                        // Load the xml from our xml stream into our xml reader.
                        xml_reader = new XmlTextReader(xml_stream);

                        // Create an xml document from the xml reader.
                        doc = new XPathDocument(xml_reader);

                        // Transform the xml document with the xslt template and load it into our xslt_stream.
                        xslt.Transform(doc, arg_list, xslt_stream);

                        xslt_stream.Flush();
                        xslt_stream.Position = 0;

                        Logger.WriteLine("XsltWriter.TransformData", "", TraceEventType.Information, 2, 0, SharedData.LogCategory);
                        Logger.WriteLine("XsltWriter.TransformData", "    CREATE TRANSFORM: SUCCESSFULL", TraceEventType.Information, 2, 0, SharedData.LogCategory);

                        Save(xslt_stream);
                    }
                    else
                    {
                        Logger.WriteLine("XsltWriter.TransformData", "", TraceEventType.Information, 2, 0, SharedData.LogCategory);
                        Logger.WriteLine("XsltWriter.TransformData", "DISCARDING TRANSFORM: NO DATA", TraceEventType.Information, 2, 0, SharedData.LogCategory);
                    }
                }
                else
                {
                    throw new Exception("XSLT writer must have a template defined.");
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Ejemplo n.º 15
0
 public SQLServerStatementCreator(ImportConfiguration config, SourceDataTable dataTable)
 {
     this.config    = config;
     this.dataTable = dataTable;
 }
        public void StatementCreatorOrderTest()
        {
            DBTable  table = new DBTable("dbo", "TestTable");
            DBColumn col1  = new DBColumn(table, "TestCol1", true, DBDatatype.integer);
            DBColumn col2  = new DBColumn(table, "TestCol2", false, DBDatatype.nvarchar);
            DBColumn col3  = new DBColumn(table, "TestCol3", false, DBDatatype.integer);

            table.Columns = new List <DBColumn>()
            {
                col1, col2, col3
            };

            Database db = new Database("TestDB", new List <DBTable>()
            {
                table
            });

            TableMapping sourceTablemapping = new TableMapping(new DBTable("dbo", "TestTable2"), TableMappingImportType.Insert, null);

            ColumnMapping colMap1 = new TableColumnMapping(sourceTablemapping, col1, col1, ColumnUse.Where);
            ColumnMapping colMap2 = new LiteralColumnMapping("2", LiteralType.String, col2, ColumnUse.Where);
            ColumnMapping colMap3 = new LiteralColumnMapping("3", LiteralType.String, col2, ColumnUse.Set);

            TableMapping tableMapping = new TableMapping(table, TableMappingImportType.Update, new ColumnMapping[] { colMap1, colMap2, colMap3 });

            ErrorHandling       errorHandling = new ErrorHandling();
            ImportConfiguration config        = new ImportConfiguration(new TableMapping[] { tableMapping }, null, "TestDB", errorHandling);

            SourceDataEntry[] entries = new SourceDataEntry[] { SourceDataEntry.CreateDataEntry("", DataType.String, "") };
            SourceDataRow[]   rows    = new SourceDataRow[] { new SourceDataRow(entries, "0") };
            SourceDataTable   dt      = new SourceDataTable(rows, new string[] { "" });

            SQLServerStatementCreator statementCreator = new SQLServerStatementCreator(config, dt);

            ImportStatement statement = statementCreator.CreateStatement(0);

            ImportStatement[] statements = statementCreator.CreateStatements();

            Assert.AreEqual(1, statements.Length);
            Assert.AreEqual(statement.RowReference, statements[0].RowReference);
            Assert.AreEqual(statement.SqlStatement, statements[0].SqlStatement);

            string[] lines = statement.SqlStatement
                             .Split(new string[] { "\n" }, StringSplitOptions.None).Where(s => s.Length > 0).ToArray();

            StatementSetupPart setupPart = new StatementSetupPart(config);

            Assert.AreEqual(setupPart.GetDatabasePart(), lines[0]);
            Assert.AreEqual(setupPart.GetWarningsPart(), lines[1]);


            StatementTransactionPart transPart = new StatementTransactionPart(config);

            string[] transStartPart = transPart.GetTransactionStartPart()
                                      .Split(new string[] { "\n" }, StringSplitOptions.None).Where(s => s.Length > 0).ToArray();;

            Assert.AreEqual(2, transStartPart.Length);
            Assert.AreEqual(transStartPart[0], lines[2]);
            Assert.AreEqual(transStartPart[1], lines[3]);


            StatementTableMappingPart tmParts = new StatementTableMappingPart(tableMapping, dt.GetDataRow(0));
            string variablePart = tmParts.GetTableVariablePart().Replace("\n", "");

            Assert.AreEqual(variablePart, lines[4]);

            string[] bodyParts = tmParts.GetStatementBodyPart()
                                 .Split(new string[] { "\n" }, StringSplitOptions.None).Where(s => s.Length > 0).ToArray();

            Assert.AreEqual(4, bodyParts.Length);
            Assert.AreEqual(bodyParts[0], lines[5]);
            Assert.AreEqual(bodyParts[1], lines[6]);
            Assert.AreEqual(bodyParts[2], lines[7]);
            Assert.AreEqual(bodyParts[3], lines[8]);


            string[] transEndPart = transPart.GetTransactionEndPart()
                                    .Split(new string[] { "\n" }, StringSplitOptions.None).Where(s => s.Length > 0).ToArray();

            Assert.AreEqual(12, transEndPart.Length);
            Assert.AreEqual(transEndPart[0], lines[9]);
            Assert.AreEqual(transEndPart[1], lines[10]);
            Assert.AreEqual(transEndPart[2], lines[11]);
            Assert.AreEqual(transEndPart[3], lines[12]);
            Assert.AreEqual(transEndPart[4], lines[13]);
            Assert.AreEqual(transEndPart[5], lines[14]);
            Assert.AreEqual(transEndPart[6], lines[15]);
            Assert.AreEqual(transEndPart[7], lines[16]);
            Assert.AreEqual(transEndPart[8], lines[17]);
            Assert.AreEqual(transEndPart[9], lines[18]);
            Assert.AreEqual(transEndPart[10], lines[19]);
            Assert.AreEqual(transEndPart[11], lines[20]);
        }