Пример #1
0
        /// <summary>
        /// Executes for schema.
        /// </summary>
        /// <param name="connectionString">The connection string.</param>
        /// <param name="type">The type.</param>
        /// <param name="categoryName">Name of the schema.</param>
        /// <param name="querySourceName">Name of the specific.</param>
        /// <param name="parameters">The parameters.</param>
        /// <returns>
        /// list of QuerySourceField
        /// </returns>
        private List <QuerySourceField> LoadFieldsFromProcedure(string connectionString, string type, string categoryName, string querySourceName, List <QuerySourceParameter> parameters = null, bool ignoreError = true, BI.Logging.ILog log = null)
        {
            var result          = new List <QuerySourceField>();
            var dataTypeAdaptor = new DB2SupportDataType();

            if (parameters == null)
            {
                parameters = GetQuerySourceParameters(connectionString, categoryName, querySourceName);
            }

            parameters = parameters.OrderBy(x => x.Position).ToList();

            using (var transaction = new TransactionScope(TransactionScopeOption.RequiresNew))
            {
                using (var connection = new DB2Connection(connectionString))
                {
                    connection.Open();
                    string     sql = String.Format("{0}.{1}", categoryName, querySourceName);
                    DB2Command cmd = new DB2Command(sql, connection);
                    if (type == SQLQuerySourceType.Procedure)
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                    }

                    if (parameters != null && parameters.Count() > 0)
                    {
                        foreach (var parameter in parameters)
                        {
                            var db2Parameter = cmd.Parameters.Add(parameter.Name, parameter.Value);
                        }
                    }

                    try
                    {
                        var       reader = cmd.ExecuteReader();
                        DataTable schema = reader.GetSchemaTable();

                        if (schema != null)
                        {
                            var colNames = schema.Rows.OfType <DataRow>().FirstOrDefault().Table.Columns.Cast <DataColumn>().Select(x => x.ColumnName).ToList();
                            var colStr   = string.Join(", ", colNames.ToArray());

                            result.AddRange(schema
                                            .Rows
                                            .OfType <DataRow>()
                                            .Select
                                            (
                                                (c, i) => new QuerySourceField
                            {
                                Id             = Guid.NewGuid(),
                                GroupPosition  = 1,
                                Position       = i,
                                Name           = c["ColumnName"].ToString(),
                                DataType       = reader.GetDataTypeName(int.Parse(c["ColumnOrdinal"].ToString())),
                                IzendaDataType = dataTypeAdaptor.GetIzendaDataType(reader.GetDataTypeName(int.Parse(c["ColumnOrdinal"].ToString()))),
                                AllowDistinct  = dataTypeAdaptor.GetAllowDistinct(reader.GetDataTypeName(int.Parse(c["ColumnOrdinal"].ToString()))),
                                Type           = (int)QuerySourceFieldType.Field
                            }
                                            )
                                            .Where(x => !string.IsNullOrEmpty(x.IzendaDataType)));
                        }

                        reader.Close();

                        return(result);
                    }
                    catch (Exception ex)
                    {
                        log?.Debug(ex);

                        // ignore error when execute stored proc from customer connectionString
                        if (ignoreError)
                        {
                            return(result);
                        }
                        else
                        {
                            throw;
                        }
                    }
                }
            }
        }
Пример #2
0
        public List <QuerySourceField> LoadFields(string connectionString, string type, string categoryName, string querySourceName, bool rollbackSP, List <QuerySourceParameter> parameters = null, bool ignoreError = true, int commandTimeout = 500, BI.Logging.ILog log = null)
        {
            var result = new List <QuerySourceField>();

            if (type.EqualsIgnoreCase(SQLQuerySourceType.Table) || type.EqualsIgnoreCase(SQLQuerySourceType.View))
            {
                result = LoadFieldsFromTable(connectionString, categoryName, querySourceName);
            }
            else if (type.EqualsIgnoreCase(SQLQuerySourceType.Procedure))
            {
                result = LoadFieldsFromProcedure(connectionString, type, categoryName, querySourceName, parameters, ignoreError, log);
            }

            return(result);
        }