好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

MysqlHelper使用反射机制智能推算数据类型以及属性名称

class MySqlHelper { private string ConnString; public MySqlHelper( string connectionString) { ConnString = connectionString; } public IList<T> RunMySqlSelect4ReturnList<T>( string strCommand) where T : new () { MySqlCommand mySqlCommand = new MySqlCommand(); mySqlCommand.CommandText = strCommand.ToString(); IList <PropertyInfo> ilPropertyInfo = typeof (T).GetProperties().ToList(); // p[0].Name =travel_id; IList<T> ilResult = new List<T> (); DataTable dt = new DataTable(); using (MySqlConnection conn = new MySqlConnection( this .ConnString)) { conn.Open(); using (MySqlCommand cmd = mySqlCommand) { cmd.Connection = conn; using (MySqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess)) { dt.Load(rdr); } } } foreach (DataRow dr in dt.Rows) { T tItem = new T(); foreach ( var v in ilPropertyInfo) { if (dt.Columns[v.Name] == null ) continue ; ConvertionExtensions.SetValue(tItem, v.Name, dr[v.Name]); } ilResult.Add(tItem); } return ilResult; } public T getSinggleObj<T>( string strCommand) where T : new () { MySqlCommand mySqlCommand = new MySqlCommand(); mySqlCommand.CommandText = strCommand.ToString(); IList <PropertyInfo> ilPropertyInfo = typeof (T).GetProperties().ToList(); // p[0].Name =travel_id; T ilResult = new T(); DataTable dt = new DataTable(); using (MySqlConnection conn = new MySqlConnection( this .ConnString)) { conn.Open(); using (MySqlCommand cmd = mySqlCommand) { cmd.Connection = conn; using (MySqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.SequentialAccess)) { dt.Load(rdr); } } } if (dt.Rows.Count <= 0 ) { return default (T); } else { foreach (DataRow dr in dt.Rows) { T tItem = new T(); foreach ( var v in ilPropertyInfo) { if (dt.Columns[v.Name] == null ) continue ; ConvertionExtensions.SetValue(tItem, v.Name, dr[v.Name]); } ilResult = tItem; } } return ilResult; } public IList<T> RunMySqlSelect4ReturnList<T>(DataTable dts) where T : new () { IList <PropertyInfo> ilPropertyInfo = typeof (T).GetProperties().ToList(); // p[0].Name =travel_id; IList<T> ilResult = new List<T> (); DataTable dt = dts; foreach (DataRow dr in dt.Rows) { T tItem = new T(); foreach ( var v in ilPropertyInfo) { if (dt.Columns[v.Name] == null ) continue ; ConvertionExtensions.SetValue(tItem, v.Name, dr[v.Name]); } ilResult.Add(tItem); } return ilResult; } } public static class ConvertionExtensions { public static T ConvertTo<T>( this IConvertible convertibleValue) { var t = typeof (T); if ( null == convertibleValue) { return default (T); } if (! typeof (T).IsGenericType) { return (T)Convert.ChangeType(convertibleValue, typeof (T)); } else { Type genericTypeDefinition = typeof (T).GetGenericTypeDefinition(); if (genericTypeDefinition == typeof (Nullable<> )) { return (T)Convert.ChangeType(convertibleValue, Nullable.GetUnderlyingType( typeof (T))); } } throw new InvalidCastException( string .Format( " Invalid cast from type \"{0}\" to type \"{1}\". " , convertibleValue.GetType().FullName, typeof (T).FullName)); } public static void SetValue( object inputObject, string propertyName, object propertyVal) { // find out the type Type type = inputObject.GetType(); // get the property information based on the type System.Reflection.PropertyInfo propertyInfo = type.GetProperty(propertyName); // find the property type Type propertyType = propertyInfo.PropertyType; // Convert.ChangeType does not handle conversion to nullable types // if the property type is nullable, we need to get the underlying type of the property var targetType = IsNullableType(propertyInfo.PropertyType) ? Nullable.GetUnderlyingType(propertyInfo.PropertyType) : propertyInfo.PropertyType; // Returns an System.Object with the specified System.Type and whose value is // equivalent to the specified object. propertyVal = Convert.ChangeType(propertyVal, targetType); // Set the value of the property propertyInfo.SetValue(inputObject, propertyVal, null ); } private static bool IsNullableType(Type type) { return type.IsGenericType && type.GetGenericTypeDefinition().Equals( typeof (Nullable<> )); } }

 

MysqlHelper使用反射机制智能推算数据类型以及属性名称

标签:

查看更多关于MysqlHelper使用反射机制智能推算数据类型以及属性名称的详细内容...

  阅读:25次