DataReader轉Dictionary數據類型之妙用

datareader轉dictionary有不少用處,能夠輸出表中部分字段轉實體字段,之前須要所有字段輸出或者再建一個實體模型才行,這樣就能夠減小數據庫的輸出量了,特別是某些接口的格式化輸出很方便。數據庫

先看底層代碼部分json

        /// <summary>
        /// DataReader轉Dictionary<string, object>數據類型/// </summary>
        /// <param name="dataReader"></param>
        /// <param name="close"></param>
        /// <returns></returns>
        public static List<Dictionary<string, object>> GetListDictionary(IDataReader dataReader, bool close = true)
        {
            List<Dictionary<string, object>> list = new List<Dictionary<string, object>>();
            if (close)
            {
                using (dataReader)
                {
                    while (dataReader.Read())
                    {
                        list.Add(DataFillDictionary(dataReader));
                    }
                }

            }
            else
            {
                while (dataReader.Read())
                {
                    list.Add(DataFillDictionary(dataReader));
                }
            }
            return list;
        }

        /// <summary>
        /// 將DataReader數據轉爲Dictionary<string, object>對象/// </summary>
        /// <param name="reader"></param>
        /// <returns></returns>
        public static Dictionary<string, object> DataFillDictionary(IDataReader reader)
        {
            Dictionary<string, object> dict = new Dictionary<string, object>();
            for (int i = 0; i < reader.FieldCount; i++)
            {
                try
                {
                    dict.Add(reader.GetName(i), reader.GetValue(i));
                }
                catch
                {
                    dict.Add(reader.GetName(i), null);
                }
            }
            return dict;
        }

調用this

        private void GetWebUserList(HttpContext context)
        {
            string jsonResult = string.Empty;
            var modifiedOn = context.Request["modifiedOn"];
            var list = new List<Dictionary<string, object>>();

            using (var dbHelper = DbHelperFactory.GetHelper(BaseSystemInfo.UserCenterDbType, BaseSystemInfo.UserCenterDbConnection))
            {
                try
                {

                    using (var dr = new BaseUserManager(dbHelper).GetWebUserList(modifiedOn))
                    {
                        if (dr != null)
                        {
                            list = DbLogic.GetListDictionary(dr);
                        }
                    }
                    var timeConverter = new IsoDateTimeConverter { DateTimeFormat = BaseSystemInfo.DateTimeFormat };
                    jsonResult = JsonConvert.SerializeObject(list, Formatting.Indented, timeConverter);
                }
                catch (Exception ex)
                {
                    NLogHelper.Warn(ex, "GetWebUserList異常");
                }
                finally
                {
                    dbHelper.Close();
                }
            }
        }

獲取數據的方法spa

        /// <summary>
        /// 向官網同步用戶信息
        /// 只傳部分字段
        /// </summary>
        /// <returns></returns>
        public IDataReader GetWebUserList(string modifiedOn)
        {
            string commandText = "SELECT A." + BaseUserEntity.FieldId
                                     + " ,A." + BaseUserEntity.FieldUserName
                                     + " ,A." + BaseUserEntity.FieldRealName
                                     + " ,A." + BaseUserEntity.FieldCode
                                     + " ,A." + BaseUserEntity.FieldCompanyId
                                     + " ,A." + BaseUserEntity.FieldCompanyName
                                     + " ,A." + BaseUserEntity.FieldCompanyCode
                                     + " ,B." + BaseUserContactEntity.FieldMobile
                                     + " ,B." + BaseUserContactEntity.FieldModifiedOn
                            + " FROM " + BaseUserEntity.TableName + " A "
                       + " LEFT JOIN " + BaseUserContactEntity.TableName + " B  "
                              + " ON A." + BaseUserEntity.FieldId + " = B." + BaseUserContactEntity.FieldId;

            // 不傳時間 一條記錄也不要給
            if (!string.IsNullOrWhiteSpace(modifiedOn))
            {
                var dbParameters = new List<KeyValuePair<string, object>>(); //查詢條件參數集合
                commandText += " WHERE B." + BaseUserContactEntity.FieldModifiedOn + " > TO_DATE(" + this.DbHelper.GetParameter(BaseUserContactEntity.FieldModifiedOn + ",'yyyy-MM-dd HH24:mi:ss')");
                // songbiao 作一下限制
                commandText += " AND ROWNUM <= 300";
                dbParameters.Add(new KeyValuePair<string, object>(BaseUserContactEntity.FieldModifiedOn, modifiedOn));
                return this.DbHelper.ExecuteReader(commandText, dbHelper.MakeParameters(dbParameters));
            }

            return null;
        }

輸出code

 

上面輸出的是數據庫字段,咱們只需改下查詢語句(field as modelfield),也能夠輸出實體屬性。orm

能夠有選擇輸出表中部分字段,這個方法加上好處不少。對象

相關文章
相關標籤/搜索