MySQL如何通過實例化對象參數查詢數據 ?(源代碼)

本篇文章給大家帶來的內容是關于mysql如何通過實例化對象參數查詢數據 ?(源代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

public static string QueryByEntity<T>(T t) where T : new() {    string resultstr = string.Empty;     MySqlDataReader reader = null;    try     {         Type type = typeof(T);         PropertyInfo[] properties = type.GetProperties();        string select = string.Format("Select * from {0} {1}", type.Name, "{0}");        string where = string.Empty;        foreach (PropertyInfo property in properties)         {            var value = t.GetPropertyValue<T>(property);            if (value != null && !value.Equals(property.GetDefaultValue()))             {                if (string.IsNullOrEmpty(where))                 {                    where = string.Format(" where {0}='{1}' ", property.Name, value);                 }                else                 {                    where = string.Format(" {0} and {1} = '{2}' ", where, property.Name, value);                 }             }         }        select = string.Format(select, where);          MySqlConnection connection = OpenConnection();        if (connection == null)            return resultstr;         MySqlCommand _sqlCom = new MySqlCommand(select, connection);         reader = _sqlCom.ExecuteReader();         List<T> tList = new List<T>();        while (reader.Read())         {             T t1 = new T();            foreach (PropertyInfo property in properties)             {                if (!string.IsNullOrEmpty(reader[property.Name].ToString()))                 {                     property.SetMethod.Invoke(t1, new object[] { reader[property.Name] });                 }             }             tList.Add(t1);         }         resultstr = JsonConvert.SerializeObject(tList);     }    catch (Exception ex)     {         Logging.Error(string.Format("查詢數據庫失敗,{0}", ex.Message));     }    finally     {        if (reader != null)         {             reader.Close();             reader.Dispose();         }     }    return resultstr; }internal static class ObjectExtend {    public static object GetPropertyValue<T>(this object obj, PropertyInfo property)     {         Type type = typeof(T);         PropertyInfo propertyInfo = type.GetProperty(property.Name);        if (propertyInfo != null)         {            return propertyInfo.GetMethod.Invoke(obj, null);         }        return null;     }    public static object GetDefaultValue(this PropertyInfo property)     {        return property.PropertyType.IsValueType ? Activator.CreateInstance(property.PropertyType) : null;     } }

通過實例化參數,對屬性賦值,將對象作為參數傳入,反射獲取對象名稱,列名,列值。要求對象名與表名一致,屬性與列名一致。

? 版權聲明
THE END
喜歡就支持一下吧
點贊12 分享