2013-07-10 106 views
3

數據庫鏈接泛型列表我有一個類使用反射

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>(); 

我明白了!

+2

爲什麼不使用[許多可用的ORM]之一(http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software#.NET)而不是滾動自己的? – GolfWolf

+0

這是你的意思嗎? http://stackoverflow.com/questions/12662318/how-to-convert-datatable-to-listt-using-reflections – Winks

+0

我明白了!謝謝 ! – SanRyu

回答

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; 
}