コード例 #1
0
        /// <summary>
        /// 对单表执行查询单条记录操作
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="parse2QuerySql">生成完整SQL语句的函数</param>
        /// <param name="queryParam">查询子句集合</param>
        /// <returns></returns>
        protected T QuerySingle <T>(Parse2QuerySQL parse2QuerySql, QueryParam queryParam, string cacheKey) where T : class
        {
            List <T> lst = Query <T>(parse2QuerySql, queryParam, cacheKey);

            if (lst == null || lst.Count == 0)
            {
                return(null);
            }

            return(lst[0]);
        }
コード例 #2
0
        /// <summary>
        /// 对单表执行查询操作
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="parse2QuerySql">生成完整SQL语句的函数</param>
        /// <param name="queryParam">查询子句集合</param>
        /// <param name="cacheKey">缓存键</param>
        /// <returns></returns>
        protected List <T> Query <T>(Parse2QuerySQL parse2QuerySql, QueryParam queryParam, string cacheKey) where T : class
        {
            if (queryParam.PropFns == null)
            {
                queryParam.PropFns = new Dictionary <string, DBFn>();
            }
            List <T> recs = new List <T>();

            // 组装Sql
            Dictionary <string, string> tblNames = new Dictionary <string, string>();
            Type modelType = typeof(T);

            // 获取表名
            FilterTbls(tblNames, modelType);

            StringBuilder fromClause = new StringBuilder(); // FROM子句

            StringBuilder cols = new StringBuilder();       // 字段名称

            PropertyInfo[] propertyInfos = modelType.GetProperties(BindingFlags.Public | BindingFlags.Instance);
            if (StringHelper.IsNullOrWhiteSpace(cacheKey) || !cacheQuerySQL.ContainsKey(cacheKey))
            {
                RelAttr[]      relAttrs      = (RelAttr[])modelType.GetCustomAttributes(typeof(RelAttr), true);
                DistinctAttr[] distinctAttrs = (DistinctAttr[])modelType.GetCustomAttributes(typeof(DistinctAttr), true);
                GetFormAndSelectClause(fromClause, cols, propertyInfos, tblNames, queryParam.ExcludedProps, queryParam.PropFns, relAttrs, distinctAttrs);
            }

            SQLQueryClause sqlQueryClause = new SQLQueryClause();

            sqlQueryClause.Select  = cols.ToString();
            sqlQueryClause.From    = string.Format(" {0} ", fromClause.ToString());
            sqlQueryClause.Where   = string.Format(" {0} ", Parse2Sql(queryParam.Where, propertyInfos));
            sqlQueryClause.OrderBy = string.Format(" {0} ", Parse2Sql(queryParam.OrderBy, propertyInfos));
            sqlQueryClause.GroupBy = string.Format(" {0} ", Parse2Sql(queryParam.GroupBy, propertyInfos));
            sqlQueryClause.Having  = string.Format(" {0} ", Parse2Sql(queryParam.Having, propertyInfos));

            string sql = parse2QuerySql(sqlQueryClause, cacheQuerySQL, cacheKey);

            if (m_IsDebug)
            {
                Logger.WriteMsg2LogFile(sql);
            }

            IDataReader reader = m_Db.ExecReader(sql, queryParam.ParamInfos, CommandBehavior.CloseConnection);

            if (null != reader)
            {
                try
                {
                    ConvertRO2DO <T>(reader, recs, queryParam.ExcludedProps);
                }
                catch (Exception ex)
                {
                    Logger.WriteEx2LogFile(ex);
                }
                finally
                {
                    if (!reader.IsClosed)
                    {
                        reader.Close();
                    }
                }
            }

            return(recs);
        }