使用反射与数据库链接的通用列表

Posted

技术标签:

【中文标题】使用反射与数据库链接的通用列表【英文标题】:Generic List linked with Database using Reflection 【发布时间】:2013-07-10 06:16:08 【问题描述】:

我有课

public class UserInfo

    public int ID  get; set; 
    public string Name  get; set; 
    public string Address  get; set; 

我需要在数据库之间建立一个链接,使用以下代码:

using (SqlDataReader reader = cmd.ExecuteReader())

   while (reader.HasRows)
   

   

在数据库的所有行上使用反射。

并将它们存储到通用列表中:

List<UserInfo> users = new List<UserInfo>();

我明白了!!

【问题讨论】:

为什么不使用many available ORMs 之一而不是自己滚动? 这是你的意思吗? ***.com/questions/12662318/… 发布您的发现作为答案 【参考方案1】:

我明白了!!

这就是结果,也许有人需要它!

public List<UserInfo> GetAllUsers()

    List<UserInfo> users = new List<UserInfo>();

    try
    
        using (SqlConnection sqlConnection = connectionString)
        
            using (SqlCommand cmd = new SqlCommand())
            
                cmd.CommandText = "dbo.GetAllUsers";
                cmd.CommandType = CommandType.StoredProcedure;

                cmd.Connection = sqlConnection;
                sqlConnection.Open();

                using (SqlDataReader dataReader = cmd.ExecuteReader())
                
                    if (dataReader.HasRows)
                    
                        while (dataReader.Read())
                        
                            UserInfo user = new UserInfo();
                            PropertyInfo[] pList = typeof(UserInfo).GetProperties();
                            foreach (PropertyInfo pi in pList)
                            
                                object value = dataReader[pi.Name];
                                if (!value.GetType().Equals(typeof(DBNull)))
                                
                                    users.GetType().GetProperty(pi.Name, BindingFlags.Public | BindingFlags.Instance).SetValue(user, value, null);
                                
                            
                            users.Add(user);
                        
                    
                    else
                    
                        users = null;
                    
                
            
            sqlConnection.Close();
        
    


    catch (Exception)
    
        return null;
    

    return users;

【讨论】:

以上是关于使用反射与数据库链接的通用列表的主要内容,如果未能解决你的问题,请参考以下文章

使用反射将数据读取器转换为列表的最快方法

将列表框与访问数据库链接

Python 爬虫的工具列表 附Github代码下载链接

iOS 上的通用链接与深层链接(URL 方案)

与 Firebase 和 Ionic 的通用链接

微众WeCross 跨链平台“UBI通用区块链接口”设计