c#進階之路-MVC&EF原理(筆記4)

1、創建實體模型

public class Users
    {
        public string UserID { get; set; }
        public string UserName { get; set; }
        public string Password { set; get; }
        public string Name { get; set; }
        public string UserType { set; get; }
        public DateTime Time { set; get; }
        public string Address { get; set; }
    }

實體模型對應數據表中字段;
2、創建訪問數據的類

public class DBHelper
    {
        private static string Connstr = "data source=.;initial catalog=OBS;user id=sa;pwd=111111";
        public T QueryDamin<T>(T userName) where T :Models.Users //申明泛型方法,傳入userName值。條件約束爲實體模型中的user
        {
            Type type = typeof(T);//獲得泛型T的類型
            T t = (T)Activator.CreateInstance(type);//實例化泛型T
            string columns = string.Join(",", type.GetProperties().Select(p => string.Format("[{0}]", p.Name)));//以,號分割實力t,lanmb表達式一一對應,生成select語句
            string sql=string.Format("Select {0} FROM {1} WHERE UserName='{2}';",columns,type.Name, userName.UserName);//合併字符串
            using (SqlConnection conn = new SqlConnection(Connstr))
            {
                SqlCommand command = new SqlCommand(sql, conn);
                conn.Open();
                SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
                if (reader.Read())
                {
                    foreach (var prop in type.GetProperties())//循環實例化的T模型
                    {
                        string proptyname = prop.Name;//proptyname等於模型中發字段
                        prop.SetValue(t, reader[prop.Name]);//給模型T一對一賦值
                        Console.WriteLine("{0}:{1}",prop.Name,prop.GetValue(t));,//prop.GetValue(t)獲得實例的值
                    }
                    return t;//返回T
                }
            }
            return default(T);//無值返回默認值
        }

三、調用

class Program
    {
        static void Main(string[] args)
        {
            DBHelper db = new DBHelper();
            Users user = new Users() { UserName = "test6" };
            db.QueryDamin(user);
            Console.ReadKey();
        }
    }

利用反射實現了通用訪問數據庫類的泛型方法;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章