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();
}
}
利用反射實現了通用訪問數據庫類的泛型方法;