コード例 #1
0
        /// <summary>
        /// Evaluates the StoredProcedure and returns the complete TriState result of it
        /// </summary>
        /// <param name="procedureName">the storedprocedure to call</param>
        /// <param name="entity">the entity for which to evaluate this constraint</param>
        /// <returns>the complete value of the stored procedure</returns>
        private SimpleTriStateResult AutoProcExT(string procedureName, T entity)
        {
            ParameterDescriptor[] parameters = DescribeProcedure(procedureName, entity, true);
            SimpleTriStateResult  retVal     = RunProcedureT(procedureName, parameters);

            return(retVal);
        }
コード例 #2
0
        /// <summary>
        /// Evaluates the provided storedprocedure and returns its result as TriState DecisionResult
        /// </summary>
        /// <param name="procedureName">the name of the stored procedure</param>
        /// <param name="entity">the entity for which to evaluate the parameters</param>
        /// <returns>a value indicating whether the stored procedure evaluated the given entity properly</returns>
        private DecisionResult AutoProcT(string procedureName, T entity)
        {
            SimpleTriStateResult retVal = AutoProcExT(procedureName, entity);

            LastMessage = retVal.Message;
            return(retVal.Result);
        }
コード例 #3
0
        /// <summary>
        /// Runs a Procedure with the given name and parameters and returns a SimpleTriStateResult
        /// </summary>
        /// <param name="procedureName">the procedurename without schema</param>
        /// <param name="parameters">the parameters to pass to the procedure</param>
        /// <returns>a value containing the simple result of the procedure</returns>
        private SimpleTriStateResult RunProcedureT(string procedureName, ParameterDescriptor[] parameters)
        {
            SqlParameter[] args = (from t in parameters
                                   where !t.IsOptional || t.ParameterValue != null
                                   select
                                   new SqlParameter
            {
                ParameterName = t.ParameterName,
                Direction = !t.IsRef ? ParameterDirection.Input : ParameterDirection.InputOutput,
                Value = t.ParameterValue ?? DBNull.Value
            }).ToArray();

            using (database.Database.UseConnection(out DbCommand cmd))
            {
                cmd.CommandText = $"[{Schema}].[{procedureName}]";
                cmd.Parameters.AddRange(args);
                cmd.CommandType = CommandType.StoredProcedure;
                SimpleTriStateResult retVal = new SimpleTriStateResult {
                    Result = DecisionResult.None
                };
                bool doClose = false;

                using (var reader = cmd.ExecuteReader())
                {
                    bool first       = true;
                    bool messageRead = false;
                    while (reader.Read())
                    {
                        if (first)
                        {
                            retVal.Result = (DecisionResult)reader.GetInt32(0);
                            if (reader.FieldCount >= 2)
                            {
                                if (!reader.IsDBNull(1))
                                {
                                    retVal.Message = reader.GetString(1);
                                }

                                messageRead = true;
                            }

                            first = false;
                        }
                    }

                    (from t in parameters
                     join a in args on t.ParameterName equals a.ParameterName
                     where t.IsRef
                     select new { Param = t, Arg = a }).ForEach(n => n.Param.ParameterValue = n.Arg.Value);
                    if (!messageRead)
                    {
                        ParameterDescriptor desc =
                            parameters.FirstOrDefault(
                                n =>
                                n.IsRef &&
                                n.ParameterName.Equals("@message", StringComparison.OrdinalIgnoreCase));
                        if (desc != null)
                        {
                            retVal.Message = desc.ParameterValue as string;
                        }
                    }
                }

                return(retVal);
            }
        }