Пример #1
0
        public override bool TryResolve(string name, out object value)
        {
            bool resolved = false;

            if (null != _params)
            {
                resolved = _params.TryResolve(name, out value);
                value    = EmptyStringToNull(value);
            }
            else
            {
                value = null;
            }

            if (!resolved)
            {
                ///若自动匹配的 ISqlParameter不能正常分解SQL参数,于是试图从DaoFactory中获取所有ISqlParameter去分解
                ///若分解成功则把分解出来的值值空
                foreach (ISqlParameters parameter in DaoFactory.Parameters)
                {
                    if (parameter.TryResolve(name, out value))
                    {
                        value = EmptyStringToNull(value);
                        return(true);
                    }
                }
            }

            return(resolved);
        }
Пример #2
0
        public override bool ToCommand(IDaoProvider provider, SqlCommandBuilder builder, ISqlParameters parameters)
        {
            if (_paramClause != null)
            {
                object value;

                bool exist = parameters.TryResolve(_paramClause.ParamName, out value);

                if (!_strict && (null == value || (value is string && string.IsNullOrEmpty(value as string))))
                {
                    return(false);
                }

                if (_strict && !exist)
                {
                    return(false);
                }
            }

            if (_foundNestedDynamicClause)
            {
                bool anyNestedDynamicClauseExecuted = false;

                SqlCommandBuilder nestedBuilder = new SqlCommandBuilder();

                foreach (SqlClause clause in _childs)
                {
                    if (clause.ToCommand(provider, nestedBuilder, parameters) && clause is DynamicClause)
                    {
                        anyNestedDynamicClauseExecuted = true;
                    }
                }

                //只有任何一个嵌套的动态语句被执行了才进行输出
                if (anyNestedDynamicClauseExecuted)
                {
                    builder.AppendCommandText(nestedBuilder.CommandText.ToString());
                    nestedBuilder.Params.ForEach(p => builder.AddCommandParameter(p));
                }

                return(anyNestedDynamicClauseExecuted);
            }
            else
            {
                foreach (SqlClause clause in _childs)
                {
                    clause.ToCommand(provider, builder, parameters);
                }

                return(true);
            }
        }
Пример #3
0
 public override bool TryResolve(string name, out object value)
 {
     if (null != _items && _items.TryGetValue(name, out value))
     {
         return(true);
     }
     else if (null != _params && _params.TryResolve(name, out value))
     {
         return(true);
     }
     value = null;
     return(false);
 }