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); }
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); }
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); }
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); }
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; } }
/// <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); }
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); }