Пример #1
0
        public IEnumerable <dynamic> InvokeGet(TModel model)
        {
            var parameters = BindingModelPropertyToParameter(
                model,
                _strategy.GetModelPropertyBindings(),
                _strategy.GetDbParameters()).ToList();

            try
            {
                _serviceProvider.Open();
                var reader = _serviceProvider.RunStoredProcGetReader(_strategy.GetDbProcName(), parameters);

                var items   = new List <dynamic>();
                var records = DbModelBindingHelper.GetDataRecords(reader);

                foreach (var record in records)
                {
                    dynamic item      = new ExpandoObject();
                    var     itemProps = (IDictionary <string, object>)item;

                    for (var i = 0; i < record.FieldCount; i++)
                    {
                        try
                        {
                            itemProps.Add(record.GetName(i).Trim(), reader.GetValue(i));
                        }
                        catch (IndexOutOfRangeException)
                        {
                            itemProps.Add(record.GetName(i).Trim(), DBNull.Value);
                        }
                    }

                    items.Add(item);
                }

                reader.Close();
                return(items);
            }
            catch (Exception exception)
            {
                throw new DbOperationException(
                          "ERROR_SQL_PROCEDURE_EXECUTION_FAILED",
                          exception,
                          _strategy.GetDbProcName(),
                          parameters);
            }
            finally
            {
                _serviceProvider.Close();
            }
        }
Пример #2
0
        public IEnumerator <TModel> GetEnumerator()
        {
            var queryStrategy = _queryStrategyProvider.GetSelectStrategy(
                _queryTable.ModelStrategy, _skipCount, _takeCount, _whereClauses, _orderbyClauses);
            var sql      = queryStrategy.GetDbQueryScript();
            var dbparams = queryStrategy.GetDbParameters();

            IDataReader reader = null;
            var         items  = new List <TModel>();

            _serviceProvider.Open();

            try
            {
                reader = _serviceProvider.QueryGetReader(sql, dbparams);

                if (_skipCount == 0 && _takeCount == 0)
                {
                    var records = DbModelBindingHelper.GetDataRecords(reader);

                    items.AddRange(
                        records.Select(record =>
                                       DbModelBindingHelper.BindingRecordToModel <TModel>(
                                           record, _queryTable.ModelStrategy.PropertyStrategies))
                        );
                }
                else
                {
                    while (reader.Read())
                    {
                        items.Add(DbModelBindingHelper.BindingRecordToModel <TModel>(
                                      reader,
                                      _queryTable.ModelStrategy.PropertyStrategies));
                    }
                }
            }
            catch (Exception exception)
            {
                throw new DbOperationException("ERROR_SQL_EXECUTION_FAILED", exception, sql, dbparams);
            }
            finally
            {
                reader?.Close();

                _serviceProvider.Close();
            }

            return(items.GetEnumerator());
        }
Пример #3
0
        public IEnumerable <dynamic> ExecuteQuery(string sql, object queryParams = null)
        {
            var autoClose = !(_provider.IsConnectionOpen());

            if (autoClose)
            {
                _provider.Open();
            }

            var dbParams = GetQueryDataParameters(queryParams);
            var reader   = _provider.QueryGetReader(sql, dbParams);
            var records  = DbModelBindingHelper.GetDataRecords(reader);
            var result   = FormatDataRecordToDynamicModel(records);

            reader.Close();

            if (autoClose)
            {
                _provider.Close();
            }

            return(result);
        }