public static CreateFolder Execute(string folderName, long?folderId, ExecutionScope executionScope = null, int commandTimeout = 300)
 {
     var retValue = new CreateFolder();
     {
         var retryCycle = 0;
         while (true)
         {
             var conn = executionScope?.Transaction?.Connection ?? new SqlConnection(ExecutionScope.ConnectionString);
             try
             {
                 if (conn.State != ConnectionState.Open)
                 {
                     if (executionScope == null)
                     {
                         conn.Open();
                     }
                     else
                     {
                         retryCycle = int.MaxValue;
                         throw new Exception("Execution Scope must have an open connection.");
                     }
                 }
                 using (var cmd = conn.CreateCommand())
                 {
                     cmd.CommandType = CommandType.StoredProcedure;
                     if (executionScope?.Transaction != null)
                     {
                         cmd.Transaction = executionScope.Transaction;
                     }
                     cmd.CommandTimeout = commandTimeout;
                     cmd.CommandText    = "[catalog].[create_folder]";
                     cmd.Parameters.Add(new SqlParameter("@folder_name", SqlDbType.NVarChar, 128, ParameterDirection.Input, true, 0, 0, null, DataRowVersion.Default, folderName));
                     cmd.Parameters.Add(new SqlParameter("@folder_id", SqlDbType.BigInt, 8, ParameterDirection.Output, true, 19, 0, null, DataRowVersion.Default, folderId));
                     cmd.Parameters.Add(new SqlParameter("@ReturnValue", SqlDbType.Int, 4, ParameterDirection.ReturnValue, true, 0, 0, null, DataRowVersion.Default, DBNull.Value));
                     cmd.ExecuteNonQuery();
                     retValue.Parameters  = new ParametersCollection(folderName, cmd.Parameters["@folder_id"].Value == DBNull.Value ? null : (long?)cmd.Parameters["@folder_id"].Value);
                     retValue.ReturnValue = (int)cmd.Parameters["@ReturnValue"].Value;
                     return(retValue);
                 }
             }
             catch (SqlException e)
             {
                 if (retryCycle++ > 9 || !ExecutionScope.RetryableErrors.Contains(e.Number))
                 {
                     throw;
                 }
                 System.Threading.Thread.Sleep(1000);
             }
             finally
             {
                 if (executionScope == null)
                 {
                     conn?.Dispose();
                 }
             }
         }
     }
 }
        public static async Task <ValidateProject> ExecuteAsync(string folderName, string projectName, string validateType, long?validationId, bool?use32Bitruntime, string environmentScope, long?referenceId, ExecutionScope executionScope = null, int commandTimeout = 30)
        {
            var retValue = new ValidateProject();
            {
                var retryCycle = 0;
                while (true)
                {
                    var conn = executionScope?.Transaction?.Connection ?? new SqlConnection(ExecutionScope.ConnectionString);
                    try
                    {
                        if (conn.State != ConnectionState.Open)
                        {
                            if (executionScope == null)
                            {
                                await conn.OpenAsync();
                            }
                            else
                            {
                                retryCycle = int.MaxValue;
                                throw new Exception("Execution Scope must have an open connection.");
                            }
                        }
                        using (var cmd = conn.CreateCommand())
                        {
                            cmd.CommandType = CommandType.StoredProcedure;
                            if (executionScope?.Transaction != null)
                            {
                                cmd.Transaction = executionScope.Transaction;
                            }
                            cmd.CommandTimeout = commandTimeout;
                            cmd.CommandText    = "[catalog].[validate_project]";
                            cmd.Parameters.Add(new SqlParameter("@folder_name", SqlDbType.NVarChar, 128, ParameterDirection.Input, true, 0, 0, null, DataRowVersion.Default, folderName));
                            cmd.Parameters.Add(new SqlParameter("@project_name", SqlDbType.NVarChar, 128, ParameterDirection.Input, true, 0, 0, null, DataRowVersion.Default, projectName));
                            cmd.Parameters.Add(new SqlParameter("@validate_type", SqlDbType.Char, 1, ParameterDirection.Input, true, 0, 0, null, DataRowVersion.Default, validateType));
                            cmd.Parameters.Add(new SqlParameter("@validation_id", SqlDbType.BigInt, 8, ParameterDirection.Output, true, 19, 0, null, DataRowVersion.Default, validationId));
                            cmd.Parameters.Add(new SqlParameter("@use32bitruntime", SqlDbType.Bit, 1, ParameterDirection.Input, true, 1, 0, null, DataRowVersion.Default, use32Bitruntime));
                            cmd.Parameters.Add(new SqlParameter("@environment_scope", SqlDbType.Char, 1, ParameterDirection.Input, true, 0, 0, null, DataRowVersion.Default, environmentScope));
                            cmd.Parameters.Add(new SqlParameter("@reference_id", SqlDbType.BigInt, 8, ParameterDirection.Input, true, 19, 0, null, DataRowVersion.Default, referenceId));
                            cmd.Parameters.Add(new SqlParameter("@ReturnValue", SqlDbType.Int, 4, ParameterDirection.ReturnValue, true, 0, 0, null, DataRowVersion.Default, DBNull.Value));
                            await cmd.ExecuteNonQueryAsync();

                            retValue.Parameters  = new ParametersCollection(folderName, projectName, validateType, cmd.Parameters["@validation_id"].Value == DBNull.Value ? null : (long?)cmd.Parameters["@validation_id"].Value, use32Bitruntime, environmentScope, referenceId);
                            retValue.ReturnValue = (int)cmd.Parameters["@ReturnValue"].Value;
                            return(retValue);
                        }
                    }
                    catch (SqlException e)
                    {
                        if (retryCycle++ > 9 || !ExecutionScope.RetryableErrors.Contains(e.Number))
                        {
                            throw;
                        }
                        System.Threading.Thread.Sleep(1000);
                    }
                    finally
                    {
                        if (executionScope == null)
                        {
                            conn?.Dispose();
                        }
                    }
                }
            }
        }
        public static async Task <SetObjectParameterValue> ExecuteAsync(short?objectType, string folderName, string projectName, string parameterName, object parameterValue, string objectName, string valueType, ExecutionScope executionScope = null, int commandTimeout = 300)
        {
            var retValue = new SetObjectParameterValue();
            {
                var retryCycle = 0;
                while (true)
                {
                    var conn = executionScope?.Transaction?.Connection ?? new SqlConnection(ExecutionScope.ConnectionString);
                    try
                    {
                        if (conn.State != ConnectionState.Open)
                        {
                            if (executionScope == null)
                            {
                                await conn.OpenAsync();
                            }
                            else
                            {
                                retryCycle = int.MaxValue;
                                throw new Exception("Execution Scope must have an open connection.");
                            }
                        }
                        using (var cmd = conn.CreateCommand())
                        {
                            cmd.CommandType = CommandType.StoredProcedure;
                            if (executionScope?.Transaction != null)
                            {
                                cmd.Transaction = executionScope.Transaction;
                            }
                            cmd.CommandTimeout = commandTimeout;
                            cmd.CommandText    = "[catalog].[set_object_parameter_value]";
                            cmd.Parameters.Add(new SqlParameter("@object_type", SqlDbType.SmallInt, 2, ParameterDirection.Input, true, 5, 0, null, DataRowVersion.Default, objectType));
                            cmd.Parameters.Add(new SqlParameter("@folder_name", SqlDbType.NVarChar, 128, ParameterDirection.Input, true, 0, 0, null, DataRowVersion.Default, folderName));
                            cmd.Parameters.Add(new SqlParameter("@project_name", SqlDbType.NVarChar, 128, ParameterDirection.Input, true, 0, 0, null, DataRowVersion.Default, projectName));
                            cmd.Parameters.Add(new SqlParameter("@parameter_name", SqlDbType.NVarChar, 128, ParameterDirection.Input, true, 0, 0, null, DataRowVersion.Default, parameterName));
                            cmd.Parameters.Add(new SqlParameter("@parameter_value", SqlDbType.Variant, 8016, ParameterDirection.Input, true, 0, 0, null, DataRowVersion.Default, parameterValue));
                            cmd.Parameters.Add(new SqlParameter("@object_name", SqlDbType.NVarChar, 260, ParameterDirection.Input, true, 0, 0, null, DataRowVersion.Default, objectName));
                            cmd.Parameters.Add(new SqlParameter("@value_type", SqlDbType.Char, 1, ParameterDirection.Input, true, 0, 0, null, DataRowVersion.Default, valueType));
                            cmd.Parameters.Add(new SqlParameter("@ReturnValue", SqlDbType.Int, 4, ParameterDirection.ReturnValue, true, 0, 0, null, DataRowVersion.Default, DBNull.Value));
                            await cmd.ExecuteNonQueryAsync();

                            retValue.Parameters  = new ParametersCollection(objectType, folderName, projectName, parameterName, parameterValue, objectName, valueType);
                            retValue.ReturnValue = (int)cmd.Parameters["@ReturnValue"].Value;
                            return(retValue);
                        }
                    }
                    catch (SqlException e)
                    {
                        if (retryCycle++ > 9 || !ExecutionScope.RetryableErrors.Contains(e.Number))
                        {
                            throw;
                        }
                        System.Threading.Thread.Sleep(1000);
                    }
                    finally
                    {
                        if (executionScope == null)
                        {
                            conn?.Dispose();
                        }
                    }
                }
            }
        }