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

利用反射实现了通用访问数据库类的泛型方法;

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