Exemplo n.º 1
0
        public static async Task <ExecAsyncResult> ExecuteDataReaderByRefAsync <T>(this DataSItem item, DbAgent agent)
        {
            ExecAsyncResult result = new ExecAsyncResult();

            result.ExecutedProcedure = item;
            IBag <T> container;

            if (agent != null && agent.State)
            {
                //   return ExecuteProcedureDRByReflection<T>(item, out container, agent.ConnectionString);

                //---

                SqlCommand cmd = null;
                container = new RefBag <T>();


                result.StartMeasure();
                try
                {
                    //using (_conn = new SqlConnection(constr))
                    //{
                    SqlConnection con = null;
                    if (agent.ConnectionLevel == ConnectionLevel.Single)
                    {
                        con = agent.CreateConnection();
                        await con.OpenAsync();

                        //   con = agent.CreateConnection();
                        //_shouldBeSync use
                    }
                    else if (agent.ConnectionLevel == ConnectionLevel.AllInOne)
                    {
                        con = agent.Connection;
                    }



                    cmd = new SqlCommand(item.Value, con)
                    {
                        CommandType    = CommandType.StoredProcedure,
                        CommandTimeout = agent.RunTimeout
                    };

                    if (agent.TransactionState == TransactionState.ActiveTransaction)
                    {
                        cmd.Transaction = agent.Transaction;
                    }

                    SqlParameter param;

                    cmd.CommandType = CommandType.StoredProcedure;
                    foreach (var itm in item.Params.Values)
                    {
                        param = new SqlParameter();
                        param.ParameterName = itm.Name;
                        param.Value         = itm.Value;
                        param.SqlDbType     = SettingsHelperManager.DetermineSqlDbTYpe(itm.Type);
                        param.Direction     = SettingsHelperManager.GetParametrDirection(itm.Direction);
                        cmd.Parameters.Add(param);
                    }
                    using (_reader = await cmd.ExecuteReaderAsync().ConfigureAwait(false))
                    {
                        while (await _reader.ReadAsync().ConfigureAwait(false))
                        {
                            container.SetFromReader(ref _reader);
                        }
                    }

                    //set outputparams values

                    if (item.HasOutputParam)
                    {
                        foreach (DataParam value in item.OutputParams.Values)
                        {
                            value.Value = cmd.Parameters[value.Name].Value.ToString();
                        }
                    }

                    if (cmd.Parameters.Count > 0)
                    {
                        List <DataParam> ret = item.GetparamsByDirection(ParamDirection.Return);
                        if (ret.Count > 0)
                        {
                            if (cmd.Parameters[ret[0].Name] != null)
                            {
                                result.Result.SetCode(
                                    Convert.ToInt32(
                                        cmd.Parameters[item.GetparamsByDirection(ParamDirection.Return)[0].Name].Value));
                            }
                        }
                    }

                    //  } end of using
                    if (agent.ConnectionLevel == ConnectionLevel.Single && con != null)
                    {
                        con.Dispose();
                    }

                    result.Object = container;
                }
                catch (Exception exc)
                {
                    throw exc;
                }

                result.StopMeasure();
                result.ExecutionType = AsyncExecutionType.ExecByRef;
                return(result);

                //----
            }
            else
            {
                throw new Exception("Agent is  null  or the state  is false  ");
            }
        }
Exemplo n.º 2
0
        private static ExecResult ExecuteProcedureDRByReflection <T>(DataSItem proc, out IBag <T> container, DbAgent datasource)
        {
            ExecResult result = new ExecResult();  // when user doesn't set return  parameter
            SqlCommand cmd    = null;

            container = new RefBag <T>();


            result.StartMeasure();
            try
            {
                // create and open a connection object "Data Source=FARID-PC;Initial Catalog=InsuranceFactory;Integrated Security=True"
                //using (_conn = new SqlConnection(constr))
                //{

                SqlConnection con = null;
                if (datasource.ConnectionLevel == ConnectionLevel.Single)//&& datasource.AgentState != AgentState.Connected)
                {
                    con = datasource.CreateConnection();
                    con.Open();
                }
                else if (datasource.ConnectionLevel == ConnectionLevel.AllInOne)
                {
                    con = datasource.Connection;
                }

                // return if is not connected
                if (con == null || con.State != ConnectionState.Open)
                {
                    result.SetCode(-2, "Not connected ! ");
                    result.StopMeashure();
                    return(result);
                }

                cmd = new SqlCommand(proc.Value, con)
                {
                    CommandType    = CommandType.StoredProcedure,
                    CommandTimeout = datasource.RunTimeout
                };
                SqlParameter param;

                //set transaction
                if (datasource.TransactionState == TransactionState.ActiveTransaction)
                {
                    cmd.Transaction = datasource.Transaction;
                }

                cmd.CommandType = CommandType.StoredProcedure;
                foreach (var item in proc.Params.Values)
                {
                    param = new SqlParameter
                    {
                        ParameterName = item.Name,
                        Value         = item.Value,
                        SqlDbType     = SettingsHelperManager.DetermineSqlDbTYpe(item.Type),
                        Direction     = SettingsHelperManager.GetParametrDirection(item.Direction)
                    };
                    cmd.Parameters.Add(param);
                }
                _reader = cmd.ExecuteReader();
                while (_reader.Read())
                {
                    container.SetFromReader(ref _reader);
                }
                // } end of using
                if (datasource.ConnectionLevel == ConnectionLevel.Single && con != null)//&& con.State!=ConnectionState.Closed)
                {
                    con.Dispose();
                }

                //set outputparams values
                if (proc.HasOutputParam)
                {
                    foreach (DataParam value in proc.OutputParams.Values)
                    {
                        value.Value = cmd.Parameters[value.Name].Value.ToString();
                    }
                }

                if (cmd.Parameters.Count > 0)
                {
                    List <DataParam> ret = proc.GetparamsByDirection(ParamDirection.Return);
                    if (ret.Count > 0)
                    {
                        if (cmd.Parameters[ret[0].Name] != null)
                        {
                            result.SetCode(Convert.ToInt32(cmd.Parameters[proc.GetparamsByDirection(ParamDirection.Return)[0].Name].Value));
                        }
                    }
                }
            }
            catch (Exception exc)
            {
                throw exc;
            }

            result.StopMeashure();
            return(result);
        }