Esempio n. 1
0
 private void GetDynamicOrDefaultSql(QueryInfo info)
 {
     if (info.NamedQuery == null)
     {
         if (string.IsNullOrEmpty(info.CustomSQL))//从Type获取SQL
         {
             info.CustomSQL = GetMappedOrDefaultSql(info.GetMappingType());
         }
         else//已经制定SQL,动态化!
         {
             StatementParser.ParseDynamicSql(info);
         }
     }
 }
Esempio n. 2
0
        /// <summary>
        /// 执行sql(注:有加入缓存读写的表格不可以使用该方法)
        /// </summary>
        /// <param name="mapSql"></param>
        /// <param name="param">支持Dictionary类型</param>
        /// <returns></returns>
        public int Execute(string mapSql, IDictionary <string, object> param)
        {
            if (mapSql.IndexOf(' ') > 0)
            {
                CheckSqlInject(mapSql);
            }

            string sql = StatementParser.ParseDynamicSql(mapSql, param);

            CheckNoParams(sql, param);
            //if (sql.IndexOf(";") > 0)
            //    sql = sql.Replace("\r\n", " ");

            //Dao.TxBegin();
            return(Dao.Execute(sql, param));
        }
Esempio n. 3
0
        /// <summary>
        /// 根据T创建select,结合param生成where语句
        /// </summary>
        string AddParamToSqlWhere(Type type, string mapSql, ref object param)
        {
            if (string.IsNullOrEmpty(mapSql))//类型获取
            {
                return(GetMappedOrDefaultSql(type));
            }

            if (param != null)
            {
                QueryInfo info = new QueryInfo();//添加当前参数,通过参数名可以控制语句类型:EQ,LK,GT等

                ////参数类型Anonymous对象? 转换为IDictionary
                //if (!typeof(System.Collections.IDictionary).IsAssignableFrom(param.GetType()))
                //{
                //    var props = Dappers.Context.Reflection.GetHolder(param.GetType());
                //    Dictionary<string, Dappers.Context.GetHandler> getters = props.Getters;

                //    Dictionary<string, object> di = new Dictionary<string, object>(getters.Count);
                //    foreach(var getter in getters){
                //        di.Add(getter.Key,
                //            getter.Value(param) );
                //    }
                //    param = di;
                //}

                info.Parameters = (IDictionary <string, object>)param;
                if (!string.IsNullOrEmpty(mapSql))//重新映射
                {
                    info.CustomSQL = mapSql;
                }
                StatementParser.ParseDynamicSql(info); //配置语句 动态构造
                param = info.Parameters;               //参数已被修改

                return(info.ToSQLString() + info.ToOrderBy());
            }
            else
            {
                string sql = StatementParser.GetMappedStaticSql(mapSql);
                if (sql.Equals(mapSql) && sql.IndexOf(" ") < 0)
                {
                    throw new ArgumentOutOfRangeException("无效的Sql配置项,请检查Key是否正确:" + mapSql);
                }
                return(sql);
            }
        }
Esempio n. 4
0
        /// <typeparam name="T">为空时,从T创建语句</typeparam>
        public T SelectOne <T>(string mapSql, object param)
        {
            CheckSqlInject(mapSql);
            string sql = null;

            if (param is string)
            {
                param = new Dictionary <string, object>()
                {
                    { GetPrimaryKey(typeof(T)), param }
                };
                sql = StatementParser.ParseDynamicSql(mapSql, param as Dictionary <string, object>);
            }
            else
            {
                sql = AddParamToSqlWhere(typeof(T), mapSql, ref param);
            }

            return(Dao.Query <T>(sql, param).SingleOrDefault());
        }