protected override void EndExecute(AsyncCodeActivityContext context, System.IAsyncResult result) { DatabaseConnection existingConnection = DBConnection.Get(context); try { Func <DBExecuteCommandResult> action = (Func <DBExecuteCommandResult>)context.UserState; DBExecuteCommandResult commandResult = action.EndInvoke(result); this.AffectedRecords.Set(context, commandResult.Result); foreach (var param in commandResult.ParametersBind) { var currentParam = Parameters[param.Key]; if (currentParam.Direction == ArgumentDirection.Out || currentParam.Direction == ArgumentDirection.InOut) { currentParam.Set(context, param.Value.Item1); } } } catch (Exception ex) { HandleException(ex, ContinueOnError.Get(context)); } finally { if (existingConnection == null) { DBConn.Dispose(); } } }
protected override System.IAsyncResult BeginExecute(AsyncCodeActivityContext context, System.AsyncCallback callback, object state) { string connString = null; string provName = null; string sql = string.Empty; int commandTimeout = OverTime.Get(context); if (commandTimeout < 0) { throw new ArgumentException("TimeoutMS"); } Dictionary <string, Tuple <object, ArgumentDirection> > parameters = null; try { sql = SQLString.Get(context); DBConn = DBConnection.Get(context); connString = ConnectionString.Get(context); provName = ProviderName.Get(context); if (Parameters != null) { parameters = new Dictionary <string, Tuple <object, ArgumentDirection> >(); foreach (var param in Parameters) { parameters.Add(param.Key, new Tuple <object, ArgumentDirection>(param.Value.Get(context), param.Value.Direction)); } } } catch (Exception ex) { HandleException(ex, ContinueOnError.Get(context)); } // create the action for doing the actual work Func <DBExecuteCommandResult> action = () => { DBExecuteCommandResult executeResult = new DBExecuteCommandResult(); if (DBConn == null) { DBConn = new DatabaseConnection().Initialize(connString, provName); } if (DBConn == null) { return(executeResult); } executeResult = new DBExecuteCommandResult(DBConn.Execute(sql, parameters, commandTimeout, CommandType), parameters); return(executeResult); }; context.UserState = action; return(action.BeginInvoke(callback, state)); }
protected async override Task <Action <AsyncCodeActivityContext> > ExecuteAsync(AsyncCodeActivityContext context, CancellationToken cancellationToken) { string connString = null; SecureString connSecureString = null; string provName = null; string sql = string.Empty; int commandTimeout = TimeoutMS.Get(context); DatabaseConnection existingConnection = null; DBExecuteCommandResult affectedRecords = null; if (commandTimeout < 0) { throw new ArgumentException(Resources.TimeoutMSException, "TimeoutMS"); } Dictionary <string, Tuple <object, ArgumentDirection> > parameters = null; var continueOnError = ContinueOnError.Get(context); try { sql = Sql.Get(context); existingConnection = DbConnection = ExistingDbConnection.Get(context); connString = ConnectionString.Get(context); connSecureString = ConnectionSecureString.Get(context); provName = ProviderName.Get(context); if (Parameters != null) { parameters = new Dictionary <string, Tuple <object, ArgumentDirection> >(); foreach (var param in Parameters) { parameters.Add(param.Key, new Tuple <object, ArgumentDirection>(param.Value.Get(context), param.Value.Direction)); } } ConnectionHelper.ConnectionValidation(existingConnection, connSecureString, connString, provName); // create the action for doing the actual work affectedRecords = await Task.Run(() => { DBExecuteCommandResult executeResult = new DBExecuteCommandResult(); if (DbConnection == null) { DbConnection = new DatabaseConnection().Initialize(connString ?? new NetworkCredential("", connSecureString).Password, provName); } if (DbConnection == null) { return(executeResult); } executeResult = new DBExecuteCommandResult(DbConnection.Execute(sql, parameters, commandTimeout, CommandType), parameters); return(executeResult); }); } catch (Exception ex) { HandleException(ex, continueOnError); } finally { if (existingConnection == null) { DbConnection?.Dispose(); } } return(asyncCodeActivityContext => { AffectedRecords.Set(asyncCodeActivityContext, affectedRecords.Result); foreach (var param in affectedRecords.ParametersBind) { var currentParam = Parameters[param.Key]; if (currentParam.Direction == ArgumentDirection.Out || currentParam.Direction == ArgumentDirection.InOut) { currentParam.Set(asyncCodeActivityContext, param.Value.Item1); } } }); }