Esempio n. 1
0
        // ctor for non-mapped stored procedure
        internal PassChainer(IStoredProc prev, ParameterArgument[] arguments)
            : this((Chainer)prev)
        {
            var root = GetRoot();

            if (arguments == null)
            {
                arguments = new ParameterArgument[] { null };
            }

            Array.ForEach(arguments, argument =>
            {
                if (argument == null)
                {
                    argument = Designer.Null;
                }

                TryThrow(argument.Exception);

                // infer data type from value
                var param = Variable.InferParam(root, argument, out chainException);
                TryThrow();
                root.TryAddParamOrThrow(param, true);
            });

            Executable = new Executable((Compilable)prev, arguments);
        }
Esempio n. 2
0
        // ctor for SQL batch
        internal PassChainer(IStoredProc prev, ParameterArgument[] arguments, List <string> batchParameters)
            : this((Chainer)prev)
        {
            var root = GetRoot();

            // check arguments-params count
            int argumentsCount  = arguments == null ? 0 : arguments.Count();
            int parametersCount = batchParameters.Count;

            if (argumentsCount != parametersCount)
            {
                ThrowArgumentCountMismatch(parametersCount, argumentsCount);
            }

            if (arguments == null)
            {
                arguments = new ParameterArgument[] { null };
            }

            int i = 0;

            Array.ForEach(arguments, argument =>
            {
                if (argument == null)
                {
                    argument = Designer.Null;
                }

                TryThrow(argument.Exception);

                // infer data type from value
                var param = Variable.InferParam(root, argument, out chainException, batchParameters[i++]);
                TryThrow();
                root.TryAddParamOrThrow(param, true);
            });

            Executable = new Executable((Compilable)prev, arguments);
        }