/// <summary> /// 更新一个对象数据到数据库中 /// </summary> /// <typeparam name="T">类型</typeparam> /// <param name="sql">语句</param> /// <param name="bolIsProcedure">是否是存储过程</param> /// <param name="obj">数据对象</param> /// <returns>更新数量</returns> public int SqlExcuteUpdateOrInsertOrDeleteObject <T>(string sql, bool bolIsProcedure, T obj) { lock (_lockThis) { var objType = obj.GetType(); var propertyArray = TypeOfCacheManager.GetInstance().GetTypeProperty(objType).Values; Command.CommandText = sql; Command.Parameters.Clear(); Command.CommandType = bolIsProcedure ? CommandType.StoredProcedure : CommandType.Text; foreach (var props in propertyArray) { var values = props.GetValue(obj, null); if (values != null) { Command.Parameters.AddWithValue("@" + props.Name, values); } } return(Command.ExecuteNonQuery()); } }
protected List <T> Deserializer <T>(IDbCommand command) where T : new() { using (var dataRead = command.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult) ) { #if NET45 var func = DeserializerManager.GetInstance().GetFuncForType <T>(dataRead); return(func(dataRead)); #else var objList = new List <T>(); var objType = typeof(T); var names = new List <string>(dataRead.FieldCount); for (var i = 0; i < dataRead.FieldCount; i++) { names.Add(dataRead.GetName(i)); } var tmpdiy = TypeOfCacheManager.GetInstance().GetTypeProperty(objType); while (dataRead.Read()) { var temp = new T(); foreach (var fieldname in names) { PropertyInfo prope; if (tmpdiy.TryGetValue(fieldname, out prope)) { var data = dataRead[fieldname]; if (!(data is DBNull)) { prope.SetValue(temp, data, null); } } } objList.Add(temp); } dataRead.Close(); return(objList); #endif } }