Beispiel #1
0
        public static void renderAsCSharp(FlexResultSet resultSet, SqlRunParameters srp)
        {
            StringBuilder sb = new StringBuilder();

            for (int i = 0; i < resultSet.results.Count; i++)
            {
                FlexResult result = resultSet.results[i];
                if (result.schema != null && result.data != null)
                {
                    int columnCount          = result.visibleColumnCount;
                    var columnNamesAndCounts = new Dictionary <string, int>();
                    sb.Append(String.Format(classHeader, generateValidCSharpClassName(i)));
                    for (int colIndex = 0; colIndex < columnCount; colIndex += 1)
                    {
                        var s = result.schema[colIndex];
                        sb.Append(DisambiguateAndRenderCSharpProperty(s, columnNamesAndCounts));
                    }
                    sb.Append(classFooter);
                }
            }
            srp.resultsText = sb;
        }
Beispiel #2
0
        private static void renderSchemaAndData(FlexResultSet resultSet, SqlRunParameters srp)
        {
            var sb = srp.resultsText;

            for (int i = 0; i < resultSet.results.Count; i++)
            {
                if (resultSet.results[i].recordsAffected > 0)
                {
                    sb.AppendLine(String.Format("--Records affected: {0:G}\r\n\r\n", resultSet.results[i].recordsAffected));
                }
                string resultTableName = "#Result" + (i + 1 + srp.completedResultsCount).ToString();
                sb.AppendLine(resultSet.ScriptResultAsCreateTable(i, resultTableName));
                sb.Append("\r\n");

                if (FieldScripting.ResultIsRenderableAsScriptedData(resultSet.results[i]))
                {
                    sb.AppendLine(FieldScripting.ScriptResultDataAsInsert(resultSet.results[i], resultTableName, FlexResultSet.SQL2008MaxRowsInValuesClause).ToString());
                }

                srp.completedResultsCount += 1;

                sb.Append("\r\n");
            }
        }
Beispiel #3
0
        public static FlexResultSet AnalyzeResultWithRollback(SqlConnection openConnection, SqlRunParameters srp, BackgroundWorker bw = null)
        {
            FlexResultSet resultSet = new FlexResultSet();

            throwExceptionIfConnectionIsNotOpen(openConnection);

            SqlTransaction transaction = openConnection.BeginTransaction("Tran");
            SqlDataReader  reader      = null;

            try
            {
                SqlCommand cmd = new SqlCommand(srp.sqlToRun, openConnection, transaction);

                //todo: this is a bad way of doing this.  Need to abstract further.
                bw.ReportProgress(5, "Running query...");

                reader = executeSQL(resultSet, cmd, reader);

                int progress = 50;
                bw.ReportProgress(progress, "Processing results...");
                do
                {
                    FlexResult result = new FlexResult();
                    if (reader != null)
                    {
                        try
                        {
                            result.recordsAffected = reader.RecordsAffected;
                            processSchemaInfo(reader, result);
                            if (progress < 90)
                            {
                                progress += 5;
                            }
                            bw.ReportProgress(progress, "Processing results...");
                            processData(reader, result);

                            if (progress < 90)
                            {
                                progress += 5;
                            }
                            bw.ReportProgress(progress, "Processing results...");
                        }
                        catch (Exception ex)
                        {
                            resultSet.exceptions.Add(new SqlResultProcessingException(ex));
                        }
                    }
                    foreach (Exception ex in result.exceptions)
                    {
                        resultSet.exceptions.Add(ex);
                    }
                    resultSet.results.Add(result);
                } while (reader != null && reader.NextResult());
            }
            catch (Exception ex)
            {
                resultSet.exceptions.Add(new SqlResultProcessingException(ex));
            }
            finally
            {
                cleanupReader(reader);
                rollbackTransaction(transaction);
            }
            return(resultSet);
        }
Beispiel #4
0
        public static void renderAsCSV(FlexResultSet resultSet, SqlRunParameters srp)
        {
            int writtenResultSets = 0;

            for (int i = 0; i < resultSet.results.Count; i++)
            {
                FlexResult result = resultSet.results[i];
                if (result.schema != null && result.data != null)
                {
                    writtenResultSets += 1;
                    if (writtenResultSets > 1)
                    {
                        srp.openNewOutputStream();
                    }

                    int columnCount = result.visibleColumnCount;

                    //do header
                    for (int colIndex = 0; colIndex < columnCount; colIndex += 1)
                    {
                        srp.WriteToStream(columnName(result, colIndex));
                        if (colIndex + 1 < columnCount)
                        {
                            srp.WriteToStream(",");
                        }
                        else
                        {
                            srp.WriteToStream("\r\n");
                        }
                    }

                    //do data rows
                    for (int rowIndex = 0; rowIndex < result.data.Count; rowIndex += 1)
                    {
                        for (int colIndex = 0; colIndex < columnCount; colIndex += 1)
                        {
                            //todo: fix each of these items to work with the actual scripting stuff (requires finishing major refactoring work).
                            object    fieldData = result.data[rowIndex][colIndex];
                            SQLColumn fieldInfo = result.schema[colIndex];

                            if (fieldData == null || fieldData is DBNull)
                            {
                                //do nothing
                            }
                            else if (numberLikeDataTypesForCSV.Contains(fieldInfo.DataType))
                            {
                                //todo: may be bug in German culture where they use , as the decimal separator.
                                srp.WriteToStream(FieldScripting.valueAsTSQLLiteral(fieldData, fieldInfo, false));
                            }
                            else if (dateLikeDataTypesForCSV.Contains(fieldInfo.DataType))
                            {
                                srp.WriteToStream(escapeForCSV(String.Format("{0}.{1}",
                                                                             ((DateTime)fieldData).ToString("s"),
                                                                             ((DateTime)fieldData).ToString("fff")
                                                                             )));
                            }
                            else if (fieldInfo.DataType == "binary" || fieldInfo.DataType == "rowversion" || fieldInfo.DataType == "timestamp")
                            {
                                byte[] d = (byte[])result.data[rowIndex][colIndex];
                                srp.WriteToStream(escapeForCSV(FieldScripting.formatBinary(d, d.Length)));
                            }
                            else if (fieldInfo.DataType == "varbinary" || fieldInfo.DataType == "image")
                            {
                                srp.WriteToStream(escapeForCSV(FieldScripting.formatVarbinary(fieldData)));
                            }
                            else
                            {
                                srp.WriteToStream(escapeForCSV(FieldScripting.valueAsTSQLLiteral(fieldData, fieldInfo, false)));
                            }

                            if (colIndex + 1 < columnCount)
                            {
                                srp.WriteToStream(",");
                            }
                            else
                            {
                                srp.WriteToStream("\r\n");
                            };
                        }
                    }

                    srp.worksheetIsValid = true;
                }
            }
        }
        public static void renderAsXMLSpreadsheet(FlexResultSet resultSet, SqlRunParameters srp)
        {
            //todo: refactor this and FlexResultSet to to share code and have test coverage.
            srp.WriteToStream(Utils.GetResourceByName("TSqlFlex.Core.Resources.XMLSpreadsheetTemplateHeader.txt"));
            for (int i = 0; i < resultSet.results.Count; i++)
            {
                FlexResult result = resultSet.results[i];
                if (result.schema != null && result.data != null)
                {
                    int columnCount = result.visibleColumnCount;

                    srp.WriteToStream(String.Format("<Worksheet ss:Name=\"Sheet{0}\">", i + 1));
                    srp.WriteToStream(String.Format("<Table ss:ExpandedColumnCount=\"{0}\" ss:ExpandedRowCount=\"{1}\" x:FullColumns=\"1\" x:FullRows=\"1\" ss:DefaultRowHeight=\"15\">",
                                                    columnCount,
                                                    result.data.Count + 1 /* include header row */)
                                      );

                    //do header
                    srp.WriteToStream("<Row>");
                    for (int colIndex = 0; colIndex < columnCount; colIndex += 1)
                    {
                        srp.WriteToStream(String.Format("<Cell ss:StyleID=\"s62\"><Data ss:Type=\"String\">{0}</Data></Cell>", columnName(result, colIndex)));
                    }
                    srp.WriteToStream("</Row>\r\n");

                    //do data rows
                    for (int rowIndex = 0; rowIndex < result.data.Count; rowIndex += 1)
                    {
                        srp.WriteToStream("<Row>");
                        for (int colIndex = 0; colIndex < columnCount; colIndex += 1)
                        {
                            //todo: fix each of these items to work with the actual scripting stuff (requires finishing major refactoring work).
                            object   fieldData     = result.data[rowIndex][colIndex];
                            object[] fieldInfo     = result.schema.Rows[colIndex].ItemArray;
                            string   fieldTypeName = fieldInfo[(int)FieldScripting.FieldInfo.DataType].ToString();
                            if (fieldData == null || fieldData is DBNull)
                            {
                                srp.WriteToStream("<Cell/>");
                            }
                            else if (fieldTypeName == "bigint" || fieldTypeName == "numeric" || fieldTypeName == "smallint" || fieldTypeName == "decimal" || fieldTypeName == "smallmoney" ||
                                     fieldTypeName == "int" || fieldTypeName == "tinyint" || fieldTypeName == "float" || fieldTypeName == "real" || fieldTypeName == "money" || fieldTypeName == "bit")
                            {
                                srp.WriteToStream(String.Format("<Cell><Data ss:Type=\"Number\">{0}</Data></Cell>\r\n", escapeForXML(FieldScripting.valueAsTSQLLiteral(fieldData, fieldInfo, false))));
                            }
                            else if (fieldTypeName == "date" || fieldTypeName == "datetime2" || fieldTypeName == "time" || fieldTypeName == "datetime" ||
                                     fieldTypeName == "smalldatetime")
                            {
                                srp.WriteToStream(String.Format("<Cell ss:StyleID=\"s63\"><Data ss:Type=\"DateTime\">{0}.{1}</Data></Cell>\r\n",
                                                                escapeForXML(((DateTime)fieldData).ToString("s")),
                                                                escapeForXML(((DateTime)fieldData).ToString("fff"))
                                                                ));
                            }
                            else if (fieldTypeName == "binary" || fieldTypeName == "rowversion" || fieldTypeName == "timestamp")
                            {
                                byte[] d = (byte[])result.data[rowIndex][colIndex];
                                srp.WriteToStream(String.Format("<Cell ss:StyleID=\"s64\"><Data ss:Type=\"String\">{0}</Data></Cell>\r\n", escapeForXML(FieldScripting.formatBinary(d, d.Length))));
                            }
                            else if (fieldTypeName == "varbinary" || fieldTypeName == "image")
                            {
                                srp.WriteToStream(String.Format("<Cell ss:StyleID=\"s64\"><Data ss:Type=\"String\">{0}</Data></Cell>\r\n", escapeForXML(FieldScripting.formatVarbinary(fieldData))));
                            }
                            else
                            {
                                srp.WriteToStream(String.Format("<Cell ss:StyleID=\"s64\"><Data ss:Type=\"String\">{0}</Data></Cell>\r\n", escapeForXML(FieldScripting.valueAsTSQLLiteral(fieldData, fieldInfo, false))));
                            }
                        }
                        srp.WriteToStream("</Row>\r\n");
                    }

                    srp.WriteToStream("</Table></Worksheet>\r\n");
                    srp.worksheetIsValid = true;
                }
            }
            srp.WriteToStream("</Workbook>\r\n");
        }
Beispiel #6
0
        public static void DoSqlQueryWork(DoWorkEventArgs e, BackgroundWorker bw, Config config)
        {
            FlexResultSet resultSet = null;
            var           srp       = (SqlRunParameters)e.Argument;

            bw.ReportProgress(1, "Opening connection...");
            SqlConnection conn        = null;
            string        currentTask = "";

            try
            {
                using (conn = new SqlConnection(srp.connStringBuilder.ConnectionString))
                {
                    if (bw.CancellationPending)
                    {
                        e.Cancel = true;
                        return;
                    }

                    currentTask = "while opening SQL connection";
                    conn.Open();

                    bw.ReportProgress(2, "Running query...");

                    if (bw.CancellationPending)
                    {
                        e.Cancel = true;
                        return;
                    }

                    currentTask = "while running the query or analyzing the data";
                    resultSet   = FlexResultSet.AnalyzeResultWithRollback(conn, srp, config, bw);

                    currentTask = "while closing the database connection";
                    conn.Close();
                }
            }
            catch (Exception ex)
            {
                renderExceptionToSqlRunParameters(currentTask, srp, ex);
            }
            finally
            {
                if (conn != null && conn.State != System.Data.ConnectionState.Closed)
                {
                    conn.Close();
                }
            }

            if (bw.CancellationPending)
            {
                e.Cancel = true;
                return;
            }

            if (resultSet == null)
            {
                e.Result = srp;
                return;
            }

            try
            {
                bw.ReportProgress(90, "Scripting results...");
                renderAndCountExceptions(resultSet, srp);
            }
            catch (Exception ex)
            {
                renderExceptionToSqlRunParameters("scripting results", srp, ex);
                e.Result = srp;
                return;
            }


            if (bw.CancellationPending)
            {
                e.Cancel = true;
                return;
            }

            bw.ReportProgress(92, "Scripting results...");
            if (srp.outputType == SqlRunParameters.TO_INSERT_STATEMENTS)
            {
                try
                {
                    renderSchemaAndData(resultSet, srp);
                }
                catch (Exception ex)
                {
                    renderExceptionToSqlRunParameters("while rendering schema and dataset", srp, ex);
                }
            }
            else if (srp.outputType == SqlRunParameters.TO_XML_SPREADSHEET)
            {
                try
                {
                    XmlSpreadsheetRenderer.renderAsXMLSpreadsheet(resultSet, srp);
                }
                catch (Exception ex)
                {
                    srp.worksheetIsValid = false;
                    srp.flushAndCloseOutputStreamIfNeeded();
                    renderExceptionToSqlRunParameters("while rendering spreadsheet", srp, ex);
                }
            }
            else if (srp.outputType == SqlRunParameters.TO_CSV)
            {
                try
                {
                    CSVRenderer.renderAsCSV(resultSet, srp);
                }
                catch (Exception ex)
                {
                    srp.worksheetIsValid = false;
                    srp.flushAndCloseOutputStreamIfNeeded();
                    renderExceptionToSqlRunParameters("while rendering csv", srp, ex);
                }
            }
            else if (srp.outputType == SqlRunParameters.TO_CSHARP)
            {
                try
                {
                    CSharpRenderer.renderAsCSharp(resultSet, srp);
                }
                catch (Exception ex)
                {
                    renderExceptionToSqlRunParameters("while rendering C#", srp, ex);
                }
            }
            e.Result = srp;
        }
Beispiel #7
0
        public static void renderAsCSV(FlexResultSet resultSet, SqlRunParameters srp)
        {
            int writtenResultSets = 0;
            for (int i = 0; i < resultSet.results.Count; i++)
            {
                FlexResult result = resultSet.results[i];
                if (result.schema != null && result.data != null)
                {
                    writtenResultSets += 1;
                    if (writtenResultSets > 1)
                    {
                        srp.openNewOutputStream();
                    }

                    int columnCount = result.visibleColumnCount;

                    //do header

                    for (int colIndex = 0; colIndex < columnCount; colIndex += 1)
                    {
                        srp.WriteToStream(columnName(result, colIndex));
                        if (colIndex + 1 < columnCount)
                        {
                            srp.WriteToStream(",");
                        }
                        else
                        {
                            srp.WriteToStream("\r\n");
                        }
                    }


                    //do data rows
                    for (int rowIndex = 0; rowIndex < result.data.Count; rowIndex += 1)
                    {
                        for (int colIndex = 0; colIndex < columnCount; colIndex += 1)
                        {
                            //todo: fix each of these items to work with the actual scripting stuff (requires finishing major refactoring work).
                            object fieldData = result.data[rowIndex][colIndex];
                            object[] fieldInfo = result.schema.Rows[colIndex].ItemArray;
                            string fieldTypeName = fieldInfo[(int)FieldScripting.FieldInfo.DataType].ToString();
                            if (fieldData == null || fieldData is DBNull)
                            {
                                //do nothing
                            }
                            else if (fieldTypeName == "bigint" || fieldTypeName == "numeric" || fieldTypeName == "smallint" || fieldTypeName == "decimal" || fieldTypeName == "smallmoney" ||
                                fieldTypeName == "int" || fieldTypeName == "tinyint" || fieldTypeName == "float" || fieldTypeName == "real" || fieldTypeName == "money" || fieldTypeName == "bit")
                            {
                                //todo: may be bug in German culture where they use , as the decimal separator.
                                srp.WriteToStream(FieldScripting.valueAsTSQLLiteral(fieldData, fieldInfo, false));
                            }
                            else if (fieldTypeName == "date" || fieldTypeName == "datetime2" || fieldTypeName == "time" || fieldTypeName == "datetime" ||
                                fieldTypeName == "smalldatetime")
                            {
                                srp.WriteToStream(escapeForCSV(String.Format("{0}.{1}",
                                    ((DateTime)fieldData).ToString("s"),
                                    ((DateTime)fieldData).ToString("fff")
                                    )));
                            }
                            else if (fieldTypeName == "binary" || fieldTypeName == "rowversion" || fieldTypeName == "timestamp")
                            {
                                byte[] d = (byte[])result.data[rowIndex][colIndex];
                                srp.WriteToStream(escapeForCSV(FieldScripting.formatBinary(d, d.Length)));
                            }
                            else if (fieldTypeName == "varbinary" || fieldTypeName == "image")
                            {
                                srp.WriteToStream(escapeForCSV(FieldScripting.formatVarbinary(fieldData)));
                            }
                            else
                            {
                                srp.WriteToStream(escapeForCSV(FieldScripting.valueAsTSQLLiteral(fieldData, fieldInfo, false)));
                            }

                            if (colIndex + 1 < columnCount)
                            {
                                srp.WriteToStream(",");
                            }
                            else
                            {
                                srp.WriteToStream("\r\n");
                            };
                        }
                        
                    }

                    srp.worksheetIsValid = true;
                }
            }
        }
Beispiel #8
0
        public static FlexResultSet AnalyzeResultWithRollback(SqlConnection openConnection, SqlRunParameters srp, BackgroundWorker bw = null)
        {
            FlexResultSet resultSet = new FlexResultSet();

            throwExceptionIfConnectionIsNotOpen(openConnection);

            SqlTransaction transaction = openConnection.BeginTransaction("Tran");
            SqlDataReader reader = null;

            try
            {
                srp.command = new SqlCommand(srp.sqlToRun, openConnection, transaction);
                var cmd = srp.command;
                cmd.CommandTimeout = 0; // wait forever.

                //todo: this is a bad way of doing this.  Need to abstract further.
                bw.ReportProgress(5, "Running query...");

                reader = executeSQL(resultSet, cmd, reader);
                int progress = 50;
                bw.ReportProgress(progress, "Processing results...");
                do
                {
                    FlexResult result = new FlexResult();
                    if (reader != null)
                    {
                        try
                        {
                            result.recordsAffected = reader.RecordsAffected;
                            processSchemaInfo(reader, result);
                            if (progress < 90)
                            {
                                progress += 5;
                            }
                            bw.ReportProgress(progress, "Processing results...");
                            processData(reader, result);

                            if (progress < 90)
                            {
                                progress += 5;
                            }
                            bw.ReportProgress(progress, "Processing results...");
                        }
                        catch (Exception ex)
                        {
                            resultSet.exceptions.Add(new SqlResultProcessingException(ex));
                        }
                    }
                    foreach (Exception ex in result.exceptions)
                    {
                        resultSet.exceptions.Add(ex);
                    }
                    resultSet.results.Add(result);

                } while (reader != null && reader.NextResult());

            }
            catch (Exception ex)
            {
                resultSet.exceptions.Add(new SqlResultProcessingException(ex));
            }
            finally
            {
                cleanupReader(reader);
                rollbackTransaction(transaction);
            }
            return resultSet;
        }
Beispiel #9
0
 private static SqlDataReader executeSQL(FlexResultSet resultSet, SqlCommand cmd, SqlDataReader reader)
 {
     try
     {
         reader = cmd.ExecuteReader(CommandBehavior.KeyInfo);
     }
     catch (Exception ex)
     {
         resultSet.exceptions.Add(new SqlExecutionException(ex));
     }
     return reader;
 }
Beispiel #10
0
        private static void renderSchemaAndData(FlexResultSet resultSet, SqlRunParameters srp)
        {
            var sb = srp.resultsText;
            for (int i = 0; i < resultSet.results.Count; i++)
            {
                if (resultSet.results[i].recordsAffected > 0)
                {
                    sb.AppendLine(String.Format("--Records affected: {0:G}\r\n\r\n", resultSet.results[i].recordsAffected));
                }
                string resultTableName = "#Result" + (i + 1 + srp.completedResultsCount).ToString();
                sb.AppendLine(resultSet.ScriptResultAsCreateTable(i, resultTableName));
                sb.Append("\r\n");

                if (FieldScripting.ResultIsRenderableAsScriptedData(resultSet.results[i]))
                {
                    sb.AppendLine(FieldScripting.ScriptResultDataAsInsert(resultSet.results[i], resultTableName, FlexResultSet.SQL2008MaxRowsInValuesClause).ToString());
                }

                srp.completedResultsCount += 1;

                sb.Append("\r\n");
            }
        }
Beispiel #11
0
        private static void renderAndCountExceptions(FlexResultSet resultSet, SqlRunParameters srp)
        {
            var sb = srp.exceptionsText;

            if (resultSet == null)
            {
                srp.exceptionCount = 0;
            }
            else
            {
                srp.exceptionCount = resultSet.exceptions.Count;
            }

            if (srp.exceptionCount > 0)
            {
                sb.Append(String.Format("--There were {0} exception(s) encountered while running the query.\r\n", resultSet.exceptions.Count));
            }
            for (int i = 0; i < srp.exceptionCount; i++)
            {
                var ex = resultSet.exceptions[i];
                if (ex is SqlResultProcessingException)
                {
                    sb.Append(String.Format("--Error processing result: \"{0}\".\r\n", ex.Message));
                }
                else if (ex is SqlExecutionException)
                {
                    sb.Append(String.Format("--Error executing query: \"{0}\".\r\n", ex.Message));
                }
                else
                {
                    sb.Append(String.Format("--Error: \"{0}\".\r\n", ex.Message));
                }
            }
        }
        public static void renderAsXMLSpreadsheet(FlexResultSet resultSet, SqlRunParameters srp)
        {
            //todo: refactor this and FlexResultSet to to share code and have test coverage.
            srp.WriteToStream(Utils.GetResourceByName("TSqlFlex.Core.Resources.XMLSpreadsheetTemplateHeader.txt"));
            for (int i = 0; i < resultSet.results.Count; i++)
            {
                FlexResult result = resultSet.results[i];
                if (result.schema != null && result.data != null)
                {
                    int columnCount = result.visibleColumnCount;

                    srp.WriteToStream(String.Format("<Worksheet ss:Name=\"Sheet{0}\">", i + 1));
                    srp.WriteToStream(String.Format("<Table ss:ExpandedColumnCount=\"{0}\" ss:ExpandedRowCount=\"{1}\" x:FullColumns=\"1\" x:FullRows=\"1\" ss:DefaultRowHeight=\"15\">",
                        columnCount,
                        result.data.Count + 1 /* include header row */)
                        );

                    //do header
                    srp.WriteToStream("<Row>");
                    for (int colIndex = 0; colIndex < columnCount; colIndex += 1)
                    {

                        srp.WriteToStream(String.Format("<Cell ss:StyleID=\"s62\"><Data ss:Type=\"String\">{0}</Data></Cell>", columnName(result, colIndex)));
                    }
                    srp.WriteToStream("</Row>\r\n");

                    //do data rows
                    for (int rowIndex = 0; rowIndex < result.data.Count; rowIndex += 1)
                    {
                        srp.WriteToStream("<Row>");
                        for (int colIndex = 0; colIndex < columnCount; colIndex += 1)
                        {
                            //todo: fix each of these items to work with the actual scripting stuff (requires finishing major refactoring work).
                            object fieldData = result.data[rowIndex][colIndex];
                            SQLColumn fieldInfo = result.schema[colIndex];

                            if (fieldData == null || fieldData is DBNull)
                            {
                                srp.WriteToStream("<Cell/>");
                            }
                            else if (fieldInfo.DataType == "bigint" || fieldInfo.DataType == "numeric" || fieldInfo.DataType == "smallint" || fieldInfo.DataType == "decimal" || fieldInfo.DataType == "smallmoney" ||
                                fieldInfo.DataType == "int" || fieldInfo.DataType == "tinyint" || fieldInfo.DataType == "float" || fieldInfo.DataType == "real" || fieldInfo.DataType == "money" || fieldInfo.DataType == "bit")
                            {
                                srp.WriteToStream(String.Format("<Cell><Data ss:Type=\"Number\">{0}</Data></Cell>\r\n", escapeForXML(FieldScripting.valueAsTSQLLiteral(fieldData, fieldInfo, false))));
                            }
                            else if (fieldInfo.DataType == "date" || fieldInfo.DataType == "datetime2" || fieldInfo.DataType == "time" || fieldInfo.DataType == "datetime" ||
                                fieldInfo.DataType == "smalldatetime")
                            {
                                srp.WriteToStream(String.Format("<Cell ss:StyleID=\"s63\"><Data ss:Type=\"DateTime\">{0}.{1}</Data></Cell>\r\n",
                                    escapeForXML(((DateTime)fieldData).ToString("s")),
                                    escapeForXML(((DateTime)fieldData).ToString("fff"))
                                    ));
                            }
                            else if (fieldInfo.DataType == "binary" || fieldInfo.DataType == "rowversion" || fieldInfo.DataType == "timestamp")
                            {
                                byte[] d = (byte[])result.data[rowIndex][colIndex];
                                srp.WriteToStream(String.Format("<Cell ss:StyleID=\"s64\"><Data ss:Type=\"String\">{0}</Data></Cell>\r\n", escapeForXML(FieldScripting.formatBinary(d,d.Length))));
                            }
                            else if (fieldInfo.DataType == "varbinary" || fieldInfo.DataType == "image")
                            {
                                srp.WriteToStream(String.Format("<Cell ss:StyleID=\"s64\"><Data ss:Type=\"String\">{0}</Data></Cell>\r\n", escapeForXML(FieldScripting.formatVarbinary(fieldData))));
                            }
                            else
                            {
                                srp.WriteToStream(String.Format("<Cell ss:StyleID=\"s64\"><Data ss:Type=\"String\">{0}</Data></Cell>\r\n", escapeForXML(FieldScripting.valueAsTSQLLiteral(fieldData, fieldInfo, false))));
                            }

                        }
                        srp.WriteToStream("</Row>\r\n");
                    }

                    srp.WriteToStream("</Table></Worksheet>\r\n");
                    srp.worksheetIsValid = true;
                }
            }
            srp.WriteToStream("</Workbook>\r\n");
        }
Beispiel #13
0
 public static void renderAsCSharp(FlexResultSet resultSet, SqlRunParameters srp)
 {
     StringBuilder sb = new StringBuilder();
     for (int i = 0; i < resultSet.results.Count; i++)
     {
         FlexResult result = resultSet.results[i];
         if (result.schema != null && result.data != null)
         {
             int columnCount = result.visibleColumnCount;
             var columnNamesAndCounts = new Dictionary<string, int>();
             sb.Append(String.Format(classHeader, generateValidCSharpClassName(i)));
             for (int colIndex = 0; colIndex < columnCount; colIndex += 1)
             {
                 var s = result.schema[colIndex];
                 sb.Append(DisambiguateAndRenderCSharpProperty(s, columnNamesAndCounts));
             }
             sb.Append(classFooter);
         }
     }
     srp.resultsText = sb;
 }