C# 利用反射方便取得DbDataReader裡的值

來源:互聯網
上載者:User

概述

在我以前做項目時,讀DbDataReder裡的值時都會用Reader.Read()然後根據名字來逐個讀出.自從學會利用反射來讀後,一切變得很容易.

以前的做法

定義一個Entity

    public class FileInformationModel      {        #region Public Property        /// <summary>        /// Gets and sets the file ID        /// </summary>        public string FileID { get; set; }        /// <summary>        /// Gets and sets the file name        /// </summary>        public string FileName { get; set; }        /// <summary>        /// Gets and sets the file save type        /// </summary>        public int? FileSaveType { get; set; }        /// <summary>        /// Gets and sets the file url        /// </summary>        public string FileUrl { get; set; }        /// <summary>        /// Gets and sets the file is new         /// </summary>        public bool? IsNew { get; set; }        /// <summary>        /// Gets and sets the file last access time        /// </summary>        public DateTime? LastAccessTime { get; set; }        /// <summary>        /// Gets and sets the file modity time        /// </summary>        public DateTime? ModifyTime { get; set; }        /// <summary>        /// Gets and sets the file version        /// </summary>        public int? Version { get; set; }        /// <summary>        /// Gets and sets the file content owner        /// </summary>        public string ContentOwner { get; set; }        /// <summary>        /// Gets and sets the file content type        /// </summary>        public string ContentType { get; set; }        /// <summary>        /// Gets and sets the file create date time        /// </summary>        public DateTime? CreateTime { get; set; }        /// <summary>        /// Gets and sets the file access control        /// </summary>        public string FileAccessControl { get; set; }        /// <summary>        /// Gets and sets the file from        /// </summary>        public string FileFrom { get; set; }        #endregion    }

 

然後讀取DbDataReader

 

        /// <summary>        /// Execute reader by store procedure and parameter list        /// </summary>        /// <param name="cmdText">store procedure</param>        /// <param name="parameters">parameter list</param>        /// <returns>data reader</returns>        public DbDataReader ExecuteReader(string cmdText, List<DbParameter> parameters,out DbConnection conn)        {            lock (lockObject)            {                  conn = new MySqlConnection(ConnectionString);                MySqlCommand command = new MySqlCommand();                PrepareCommand(command, conn, cmdText, parameters);                MySqlDataReader mySqlDataReader = command.ExecuteReader();                return mySqlDataReader;            }        }

 

 

然後再如此讀出資料

        /// <summary>        /// Query FileInformationModel entity list by FileInformationModel entity        /// </summary>        /// <param name="entity">FileInformationModel entity</param>        /// <returns>FileInformationModel entity list</returns>        public List<FileInformationModel> Query(FileInformationModel entity)        {           DbConnection conn;            var result =                ConvertDataReaderToList(DBHelp.ExecuteReader(Constants.spSelectFileInformationByCondition,                                                             GetParameters(entity),out conn));           ContentHelp.CloseConnection(conn);           return result;        }        /// <summary>        /// Convert data reader to FileInformationModel entity list        /// </summary>        /// <param name="reader">Db DataReader</param>        /// <returns>FileInformationModel entity list</returns>        private List<FileInformationModel> ConvertDataReaderToList(DbDataReader reader)        {            List<FileInformationModel> fileInformationList = new List<FileInformationModel>();            using (reader)            {                while (reader.Read())                {                    FileInformationModel entity = new FileInformationModel();                    entity.ContentType = ContentHelp.GetObjectToString(reader["ConntentType"]);                    entity.ContentOwner = ContentHelp.GetObjectToString(reader["ContentOwner"]);                    entity.CreateTime = ContentHelp.GetObjectToDateTime(reader["CreateTime"]);                    entity.FileAccessControl = ContentHelp.GetObjectToString(reader["FileAccessControl"]);                    entity.FileFrom = ContentHelp.GetObjectToString(reader["FileFrom"]);                    if (ContentHelp.GetObjectToString(reader["IsNew"]) != null)                        entity.IsNew = Convert.ToBoolean(ContentHelp.GetObjectToInt(reader["IsNew"]));                    entity.FileName = ContentHelp.GetObjectToString(reader["FileName"]);                    entity.FileSaveType = ContentHelp.GetObjectToInt(reader["FileSaveType"]);                    entity.FileUrl = ContentHelp.GetObjectToString(reader["FileUrl"]);                    entity.FileID = ContentHelp.GetObjectToString(reader["FileID"]);                    entity.LastAccessTime = ContentHelp.GetObjectToDateTime(reader["LastAccessTime"]);                    entity.ModifyTime = ContentHelp.GetObjectToDateTime(reader["ModifyTime"]);                    entity.Version = ContentHelp.GetObjectToInt(reader["Version"]);                    fileInformationList.Add(entity);                }            }            return fileInformationList;        }

 

 

利用反射後,一切變得很容易.

        /// <summary>        /// Execute reader by store procedure and parameter list        /// </summary>        /// <param name="cmdText">store procedure</param>        /// <param name="parameters">parameter list</param>        /// <returns>data reader</returns>         public List<T> ReadEntityList<T>(string cmdText, List<DbParameter> parameters) where T : new()        {            lock (lockObject)            {                using (MySqlConnection conn = new MySqlConnection(ConnectionString))                {                    using (MySqlCommand command = new MySqlCommand())                    {                        PrepareCommand(command, conn, cmdText, parameters);                        MySqlDataReader mySqlDataReader = command.ExecuteReader();                        return ReadEntityListByReader<T>(mySqlDataReader);                    }                }            }        }        /// <summary>        /// Read entity list by reader        /// </summary>        /// <typeparam name="T">entity</typeparam>        /// <param name="reader">data reader</param>        /// <returns>entity</returns>        private List<T> ReadEntityListByReader<T>(MySqlDataReader reader) where T : new()        {            List<T> listT = new List<T>();            using (reader)            {                while (reader.Read())                {                    T inst = new T();                    foreach (var pi in typeof (T).GetProperties(BindingFlags.Instance | BindingFlags.Public))                    {                        var obj = new object();                        try                        {                            obj = reader[pi.Name];                        }                        catch (Exception ex)                        {                            continue;                        }                        if (obj == DBNull.Value || obj == null)                            continue;                        var si = pi.GetSetMethod();                        if (si == null)                            continue;                        pi.SetValue(inst, obj, null);                    }                    listT.Add(inst);                }            }            return listT;        }

 

 

然後再這樣取出來

        /// <summary>        /// Query FileInformationModel entity list by FileInformationModel entity        /// </summary>        /// <param name="entity">FileInformationModel entity</param>        /// <returns>FileInformationModel entity list</returns>        public List<FileInformationModel> Query(FileInformationModel entity)        {            return DBHelp.ReadEntityList<FileInformationModel>(Constants.spSelectFileInformationByCondition,                                                               GetParameters(entity));        }

 

 

用好反射,讓Coding變得更容易.

歡迎各位參與討論,如果覺得對你有協助,請點擊    推薦下,萬分謝謝.

作者:spring yang

出處:http://www.cnblogs.com/springyangwc/

本文著作權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文串連,否則保留追究法律責任的權利。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.