Ejemplo n.º 1
0
        FieldList Execute(ScriptDetail scriptDetail)
        {
            SqlCommand c = null;

            try
            {
                c = this.GetDbCommandForScript(scriptDetail);
                this.Database.Execute(c);
                var values = new FieldList();
                foreach (DbParameter p in c.Parameters)
                {
                    values.Add(new Field(p.ParameterName.Substring(1), p.Value));
                }

                if (Script.Tracing.IsTracingEnabled)
                {
                    var result = new Result();
                    result.AddResult(values);
                    Script.Tracing.Trace(Thread.CurrentThread.ManagedThreadId, scriptDetail, result);
                }

                return(values);
            }
            catch (SqlRetryException ex)
            {
                this.ProcessException(ex, c, scriptDetail);
            }
            catch (SqlException ex)
            {
                this.ProcessException(ex, c, scriptDetail);
            }

            // Will never be called
            return(null);
        }
Ejemplo n.º 2
0
 protected override async Task OnAfterRenderAsync(bool firstRender)
 {
     if (firstRender)
     {
         SideMenu.Select     += SelectScript;
         SideMenu.NewScript  += NewScript;
         SideMenu.OpenAbout  += About;
         SideMenu.OpenConfig += OpenConfig;
         SideMenu.OpenVault  += OpenVault;
         SideMenu.Error      += ShowError;
     }
     if (ScriptDetail != null)
     {
         ScriptDetail.ScriptBlockRunner = selectedScript;
         ScriptDetail.Edit   += EditScript;
         ScriptDetail.Delete += DeleteScript;
         ScriptDetail.Error  += ShowError;
         ScriptDetail.Reload();
     }
     if (ScriptEdit != null)
     {
         ScriptEdit.ScriptName = selectedScript != null ? selectedScript.ScriptBlock.Name : null;
         ScriptEdit.EndEdit   += EndEdit;
         ScriptEdit.Error     += ShowError;
         ScriptEdit.Reload();
     }
     if (Config != null)
     {
         Config.EndConfig += EndConfig;
         Config.Reload();
     }
     await base.OnAfterRenderAsync(firstRender);
 }
Ejemplo n.º 3
0
        private FieldList Execute(ScriptDetail scriptDetail)
        {
            var dataAccess = GetDatabase();

            string executionScript = scriptDetail.Command;

            var c = dataAccess.GetSqlStringCommand(executionScript);

            if (this.Timeout != 0)
            {
                c.CommandTimeout = Timeout;
            }

            if (scriptDetail.OutParameters != null)
            {
                if (scriptDetail.OutParameters is string[])
                {
                    foreach (var p in (IEnumerable <string>)scriptDetail.OutParameters)
                    {
                        dataAccess.AddOutParameter(c, "@" + p, DbType.Object, int.MaxValue);
                    }
                }

                else
                {
                    var properties = scriptDetail.OutParameters.GetType().GetProperties();
                    foreach (var p in properties)
                    {
                        dataAccess.AddOutParameter(c, "@" + p.Name, (DbType)p.GetValue(scriptDetail.OutParameters, null), int.MaxValue);
                    }
                }
            }

            if (scriptDetail.InParameters != null)
            {
                var properties = scriptDetail.InParameters.GetType().GetProperties();
                foreach (var p in properties)
                {
                    dataAccess.AddInParameter(c, "@" + p.Name, ConvertToSqlType(p.PropertyType), p.GetValue(scriptDetail.InParameters, null));
                }
            }

            dataAccess.ExecuteNonQuery(c);

            var values = new FieldList();

            foreach (DbParameter p in c.Parameters)
            {
                values.Add(new Field(p.ParameterName.Substring(1), p.Value));
            }

            return(values);
        }
Ejemplo n.º 4
0
        void ProcessException(Exception ex, SqlCommand c, ScriptDetail scriptDetail)
        {
            int retryCount = 0;

            if (Script.Tracing.IsTracingEnabled)
            {
                Script.Tracing.Trace(Thread.CurrentThread.ManagedThreadId, scriptDetail, null, ex);
            }

            if (ex is SqlRetryException)
            {
                retryCount = ((SqlRetryException)ex).RetryCount;
                ex         = ex.InnerException;
            }

            // To make diagnosics easier add some important details to the exception
            throw new SqlScriptException(ex.Message, this.Database.ConnectionString, c.CommandText, ex, retryCount);
        }
Ejemplo n.º 5
0
        public async Task RespondToScript(RespondToScriptModel model)
        {
            try
            {
                var doc = await _userService.GetCurrentUserAsync <Doctor>(UserTypes.Doctor) as Doctor;

                if (doc == null)
                {
                    throw new Exception("user is not a doctor");
                }
                Script script = await _context.Scripts.FindAsync(model.Id);

                List <ScriptDetail> details = new List <ScriptDetail>();
                var medicines = model.Medicines.Split(',').ToList();
                medicines.RemoveAll(x => string.IsNullOrWhiteSpace(x));
                var medicineIds = medicines.Select(x => Convert.ToInt32(x));
                foreach (var medId in medicineIds)
                {
                    ScriptDetail detail = new ScriptDetail()
                    {
                        MedicineId = medId,
                        ScriptId   = script.Id,
                    };
                    details.Add(detail);
                }
                if (details.Any())
                {
                    script.Status   = ScriptStatuses.Responded;
                    script.DoctorId = doc.Id;
                    script.Response = model.Response;
                    await _context.ScriptDetails.AddRangeAsync(details);

                    _context.Scripts.Update(script);
                    await _context.SaveChangesAsync();
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Ejemplo n.º 6
0
        /// <remarks>
        /// This is a duplicate of the sync ExecuteReader routine. Attempting to minimize code duplication further would
        /// result in more complexity and the core code has already been centralized.
        /// </remarks>
        public async Task <ReaderResult> ExecuteReaderAsync()
        {
            ScriptDetail scriptDetail = null;
            SqlCommand   c            = null;

            try
            {
                base.Execute();

                if (this.EnableParallelExecutionProperty)
                {
                    throw new ArgumentException("Parallel execution is not supported for ExecuteReader.");
                }

                scriptDetail = this.scriptsToExecute[0];
                c            = this.GetDbCommandForScript(scriptDetail);

                var dataReader = await this.Database.ExecuteReaderAsync(c);

                if (Script.Tracing.IsTracingEnabled)
                {
                    Script.Tracing.Trace(Thread.CurrentThread.ManagedThreadId, scriptDetail, null);
                }

                this.ResetState();
                return(new ReaderResult(dataReader));
            }
            catch (SqlRetryException ex)
            {
                this.ProcessException(ex, c, scriptDetail);
            }
            catch (SqlException ex)
            {
                this.ProcessException(ex, c, scriptDetail);
            }

            // Will never be called
            return(null);
        }
Ejemplo n.º 7
0
        SqlCommand GetDbCommandForScript(ScriptDetail scriptDetail)
        {
            string executionScript = this.StripComments(scriptDetail.Command);

            var c = new SqlCommand(executionScript);


            if (scriptDetail.OutParameters != null)
            {
                if (scriptDetail.OutParameters is string[])
                {
                    foreach (var p in (IEnumerable <string>)scriptDetail.OutParameters)
                    {
                        c.AddOutParameter("@" + p, SqlDbType.Variant);
                    }
                }

                else
                {
                    var properties = scriptDetail.OutParameters.GetType().GetProperties();
                    foreach (var p in properties)
                    {
                        c.AddOutParameter("@" + p.Name, ConvertFromDbTypeToSqlType((DbType)p.GetValue(scriptDetail.OutParameters, null)));
                    }
                }
            }

            if (scriptDetail.InParameters != null)
            {
                var properties = scriptDetail.InParameters.GetType().GetProperties();
                foreach (var p in properties)
                {
                    var dbType = ConvertToSqlType(p.PropertyType);
                    var value  = p.GetValue(scriptDetail.InParameters, null);
                    if (dbType == SqlDbType.Structured)
                    {
                        var typeName = "";
                        if (p.PropertyType.GenericTypeArguments.Length != 0)
                        {
                            typeName = $"{p.PropertyType.GenericTypeArguments[0].Name}Type";
                        }
                        else if (p.PropertyType.IsArray)
                        {
                            typeName = $"{p.PropertyType.GetElementType().Name}Type";
                        }
                        else
                        {
                            throw new ArgumentException("Collections must implement IEnumerable.");
                        }

                        c.AddStructuredInParameter("@" + p.Name, dbType, value as IList, typeName);
                    }
                    else
                    {
                        if (value == null)
                        {
                            dbType = SqlDbType.Variant;
                        }

                        c.AddInParameter("@" + p.Name, dbType, value);
                    }
                }
            }

            return(c);
        }