Example #1
0
 private static string ToSqlString(IDaoProvider provider, object value)
 {
     if (null == value || value is DBNull)
     {
         return(String.Empty);
     }
     else if (value is string)
     {
         return(provider.EscapeText(((string)value).Trim()));
     }
     else if (value is IEnumerable)
     {
         StringBuilder builder = new StringBuilder();
         foreach (object single in ((IEnumerable)value))
         {
             builder.Append(",");
             builder.Append(ToSqlString(provider, single));
         }
         return(builder.Length > 0 ? builder.Remove(0, 1).ToString() : string.Empty);
     }
     else
     {
         return(provider.EscapeText(value.ConvertTo <string>().Trim()));
     }
 }
Example #2
0
        public override bool ToCommand(IDaoProvider provider, SqlCommandBuilder builder, ISqlParameters parameters)
        {
            object value = parameters.Resolve(ParamName);

            if (_valueParameterClauseUsage == ValueParameterClauseUsage.In)
            {
                builder.AppendCommandText(ToInClauseSqlString(provider, value));
            }
            else
            {
                String content = ToSqlString(provider, value);
                if (String.IsNullOrEmpty(content) && !String.IsNullOrEmpty(_defaultValue))
                {
                    builder.AppendCommandText(_defaultValue);
                }
                else
                {
                    if (_valueParameterClauseUsage == ValueParameterClauseUsage.Like)
                    {
                        content = provider.EscapeLikeParamValue(content);
                    }
                    builder.AppendCommandText(content);
                }
            }
            return(true);
        }
Example #3
0
        public override bool ToCommand(IDaoProvider provider, SqlCommandBuilder builder, ISqlParameters parameters)
        {
            string sqlName = provider.EscapeParam(ParamName);

            builder.AppendCommandText(RawText.Replace(ParamName, sqlName));
            builder.AddCommandParameter(sqlName, parameters.Resolve(ParamName));

            return(true);
        }
Example #4
0
        public Dao(string name)
        {
            var setting = ConfigurationManager.ConnectionStrings[name];

            this._connectionString = setting.ConnectionString;
            this._provider         = DaoFactory.GetDaoProvider(setting.ProviderName);
            if (null == _provider)
            {
                throw new FoxOneException(string.Format("Dao Provider '{0}' Not Found", ConfigurationManager.ConnectionStrings[name].ProviderName));
            }
        }
Example #5
0
        public ISqlCommand CreateCommand(IDaoProvider provider, object parameters)
        {
            SqlCommandBuilder builder       = new SqlCommandBuilder();
            SqlParameters     sqlParameters = new SqlParameters(parameters);

            foreach (SqlClause clause in _clauses)
            {
                clause.ToCommand(provider, builder, sqlParameters);
            }

            return(builder.ToCommand());
        }
Example #6
0
 protected GenericDao(string name, string providerName)
 {
     this._name             = name;
     this._connectionString = ConfigurationManager.ConnectionStrings[name].ConnectionString;
     this._dbProviderName   = providerName;
     this._provider         = DaoFactory.GetDaoProviderOfDbProvider(_dbProviderName);
     this._mappingProvider  = DaoFactory.GetMappingProvider(_dbProviderName);
     if (null == _provider)
     {
         throw new FoxOneException(string.Format("Dao Provider '{0}' Not Found", ConfigurationManager.ConnectionStrings[name].ProviderName));
     }
 }
Example #7
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);
            }
        }
Example #8
0
        public override bool ToCommand(IDaoProvider provider, SqlCommandBuilder builder, ISqlParameters parameters)
        {
            IDictionary <string, object> outParams = new Dictionary <string, object>();

            string sql = _executor.Execute(_action, parameters, outParams);

            if (!string.IsNullOrEmpty(sql))
            {
                parameters = outParams.Count == 0 ? parameters : new ArrayParameters(outParams, parameters);

                IList <SqlClause> clauses = SqlParser.ParseToClauses(sql);

                foreach (SqlClause clause in clauses)
                {
                    clause.ToCommand(provider, builder, parameters);
                }
            }

            return(true);
        }
Example #9
0
        private string ToInClauseSqlString(IDaoProvider provider, Object value)
        {
            if (null == value)
            {
                return(String.IsNullOrEmpty(_defaultValue) ? _defaultValue : "''");
            }

            string content = null;

            if (value is String)
            {
                content = value.ToString().Trim();

                // 如果前后都已经有单引号则直接返回
                if (content.Length >= 2 && content.StartsWith("'") && content.EndsWith("'"))
                {
                    return(content);
                }

                content = provider.EscapeText(content);
            }
            else if (value is IEnumerable)
            {
                StringBuilder builder = new StringBuilder();
                foreach (var single in (IEnumerable)value)
                {
                    if (null != single)
                    {
                        builder.Append(",").Append(provider.EscapeText(single.ToString()));
                    }
                }
                content = builder.Length > 0 ? builder.ToString().Substring(1) : "";
                if (String.IsNullOrEmpty(content))
                {
                    return(String.IsNullOrEmpty(_defaultValue) ? "" : _defaultValue);
                }
            }

            return(ProcessInSqlParam(content));
        }
Example #10
0
        internal static IDaoProvider GetDaoProvider(string dbProviderName)
        {
            IDaoProvider provider = _providers.SingleOrDefault(p => p.Name.Equals(dbProviderName, StringComparison.OrdinalIgnoreCase) || p.SupportsDbProvider(dbProviderName));

            return(provider);
        }
Example #11
0
        public override bool ToCommand(IDaoProvider provider, SqlCommandBuilder builder, ISqlParameters parameters)
        {
            builder.AppendCommandText(RawText);

            return(true);
        }
Example #12
0
 /// <summary>
 /// </summary>
 /// <returns>返回是否被执行,有些语句是根据上下文动态判断是否需要被执行的</returns>
 public abstract bool ToCommand(IDaoProvider provider, SqlCommandBuilder builder, ISqlParameters parameters);
Example #13
0
 /// <summary>
 /// Initializes a new instance of the <see cref="EntityController{T}"/> class.
 /// </summary>
 /// <param name="daoProvider">The DAO provider.</param>
 protected EntityController(IDaoProvider daoProvider)
 {
     this.daoProvider = daoProvider;
 }