public static void InsertStaffInfoSql(Models.Staff.Staff staff) { using (var sqlConnection = new SqlConnection(ConString)) { var commandStringBuilderFirstPart = new StringBuilder("INSERT INTO StaffInfo ("); var commandStringBuilderSecondPart = new StringBuilder(") VALUES ("); var properties = staff.GetType().GetProperties(); // 抓取属性名称生成SQL语句 var cur = 1; foreach (var property in properties) { commandStringBuilderFirstPart.Append(property.Name); if (property.PropertyType.Name == "String") { commandStringBuilderSecondPart .Append(ConvertStringToSql((string)staff.GetPropertyValue(property.Name))); } else { commandStringBuilderSecondPart.Append((int)staff.GetPropertyValue(property.Name)); } if (cur++ < properties.Length) { commandStringBuilderFirstPart.Append(", "); commandStringBuilderSecondPart.Append(", "); } } var command = commandStringBuilderFirstPart + commandStringBuilderSecondPart.ToString() + ")"; var sqlCommand = new SqlCommand(command, sqlConnection); sqlConnection.Open(); sqlCommand.ExecuteNonQuery(); } }
/// <summary> /// 比对两个Staff实例,将更新的部分提交SQL数据库进行更新 /// </summary> /// <param name="origin">旧Staff实例</param> /// <param name="target">新Staff实例</param> public static void UpdateStaffInfoSql(Models.Staff.Staff origin, Models.Staff.Staff target) { // 属性比对,生成的SQL语句只包含要修改的部分 var properties = origin.GetType().GetProperties(); var updateList = new List <PropertyInfo>(); foreach (var property in properties) { if (!Equals(origin.GetPropertyValue(property.Name), target.GetPropertyValue(property.Name))) { updateList.Add(property); } } // 生成SQL语句 var commandStringBuilder = new StringBuilder("UPDATE StaffInfo SET "); var cur = 1; foreach (var targetProperty in updateList) { if (targetProperty.PropertyType.Name == "String") { commandStringBuilder.Append(targetProperty.Name + " = " + ConvertStringToSql((string)target .GetPropertyValue(targetProperty.Name))); } // 用了Flags特性的枚举不能直接转int,不知道为什么 else if (targetProperty.PropertyType.Name == "Temperament") { commandStringBuilder.Append(targetProperty.Name + " = " + (int)(Temperament)target.GetPropertyValue(targetProperty.Name)); } else { commandStringBuilder.Append(targetProperty.Name + " = " + (int)target.GetPropertyValue(targetProperty.Name)); } if (cur++ < updateList.Count) { commandStringBuilder.Append(", "); } } commandStringBuilder.Append(" WHERE StaffNumber = " + ConvertStringToSql(origin.StaffNumber)); // 执行 try { using (var sqlConnection = new SqlConnection(ConString)) { var sqlCommand = new SqlCommand(commandStringBuilder.ToString(), sqlConnection); sqlConnection.Open(); sqlCommand.ExecuteNonQuery(); } } catch (Exception e) { Debug.WriteLine(e); Debug.WriteLine("无变化!"); } }