Пример #1
0
        private DynamicParameters CreateParameters(ISqlRequest request)
        {
            var parameters = new DynamicParameters();

            foreach (var parameter in request.Parameters)
            {
                var simple = parameter as StoredProcedureSimpleParameter;

                if (simple != null)
                {
                    var value = simple.GetValueAsObject();
                    value = DefaultValueConverter.Convert(value, simple.TypeName);

                    parameters.Add(simple.Name, value, direction: simple.Mode);
                    continue;
                }

                var table = parameter as StoredProcedureTableTypeParameter;

                if (table != null)
                {
                    var typeName = string.Format("{0}.{1}", table.SchemaName, table.UdtName);
                    parameters.Add(table.Name, table.Table.ToDataTable(typeName).AsTableValuedParameter(typeName));
                    continue;
                }

                throw new InvalidOperationException("Invalid parameter type: " + parameter.GetType());
            }

            return(parameters);
        }
Пример #2
0
        public void NonQuery(ISqlRequest request)
        {
            Debug.WriteLine("NonQuery START.");

            _executor.NonQuery(request);

            Debug.WriteLine("NonQuery STOP.");
        }
Пример #3
0
        public IMultipleResultSetReader Multiple(ISqlRequest request)
        {
            Debug.WriteLine("Multiple START.");

            var result = new ConsoleLoggerMultipleResultSetReader(_executor.Multiple(request));

            Debug.WriteLine("Multiple STOP.");

            return(result);
        }
Пример #4
0
        public T Scalar <T>(ISqlRequest request)
        {
            Debug.WriteLine("Scalar START (" + typeof(T).ToString() + ").");

            var result = _executor.Scalar <T>(request);

            Debug.WriteLine("Scalar STOP (" + result + ").");

            return(result);
        }
Пример #5
0
        public void NonQuery(ISqlRequest request)
        {
            CreateConnection();

            var parameters = CreateParameters(request);

            var result = _connection.Query <int>(
                string.Format("{0}.{1}", request.SchemaName, request.StoredProcedureName),
                parameters,
                commandType: CommandType.StoredProcedure, transaction: _transaction);

            FetchParameterValue(request, parameters);
        }
Пример #6
0
        public ISqlExecutor CreateExecutor(ISqlRequest request)
        {
            Func<ISqlRequest, ISqlExecutor> mw = null;

            for (int i = Middleware.Count - 1; i >= 0; i--)
            {
                mw = Middleware[i].Execute(mw);
            }

            if (mw == null)
                throw new InvalidOperationException("Cannot create executor, have you added an executor to the pipeline?");

            return mw(request);
        }
Пример #7
0
 private void FetchParameterValue(ISqlRequest request, DynamicParameters parameters)
 {
     request
     .Parameters
     .OfType <StoredProcedureSimpleParameter>()    // We need simple parameters
     .ToList()
     .ForEach(p =>
     {
         // Retrieve the new parameter value from the executed stored proc
         var value = parameters.Get <object>(p.Name);
         p.SetValueAsObject(value);
     })
     ;
 }
Пример #8
0
        public T Scalar <T>(ISqlRequest request)
        {
            CreateConnection();

            var parameters = CreateParameters(request);

            var result = _connection.Query <T>(
                string.Format("{0}.{1}", request.SchemaName, request.StoredProcedureName),
                parameters,
                commandType: CommandType.StoredProcedure, transaction: _transaction);

            FetchParameterValue(request, parameters);

            return(result.Any() ? result.First() : default(T));
        }
Пример #9
0
        public IMultipleResultSetReader Multiple(ISqlRequest request)
        {
            CreateConnection();

            var parameters = CreateParameters(request);

            var reader = _connection.QueryMultiple(
                string.Format("{0}.{1}", request.SchemaName, request.StoredProcedureName),
                parameters,
                commandType: CommandType.StoredProcedure,
                transaction: _transaction);

            FetchParameterValue(request, parameters);

            return(new MultipleResultSetReader(reader));
        }
Пример #10
0
        public IEnumerable <T> Query <T>(ISqlRequest request)
        {
            Debug.WriteLine("Query START (" + typeof(T).ToString() + ").");

            var result = _executor.Query <T>(request);

            Debug.WriteLine("ITEMS:");

            foreach (var a in result)
            {
                Debug.WriteLine("ITEM: " + a.ToString());
            }

            Debug.WriteLine("/ITEMS");

            Debug.WriteLine("Query STOP.");

            return(result);
        }