protected T Update <T>([NotNull] UpdateBase u, [NotNull] string tableName, [NotNull] KeyValuePair <string, object>[] pkFilters, [CanBeNull] Func <IDataRecord, T> reader) where T : DtoDbBase <T> { bool outputInserted = reader != null; if (u.IsEmpty) { return(outputInserted ? DoSelect(tableName, pkFilters, reader) : null); } using (SqlConnection conn = new SqlConnection(ConnectionString)) using (SqlCommand com = conn.CreateCommand()) { com.CommandType = CommandType.Text; StringBuilder sb; if (outputInserted) { sb = new StringBuilder("declare @id as table (" + string.Join(", ", pkFilters.Select( kvp => EnsureInBraces(kvp.Key) + " " + GetSqlType(kvp.Value.GetType()))) + "); update "); } else { sb = new StringBuilder("update "); } sb.Append(EnsureInBraces(tableName)); sb.Append(" set "); AddEqualityParameters(u.ChangedProps, com, sb, " , "); if (outputInserted) { sb.Append(" output " + string.Join(", ", pkFilters.Select(kvp => "inserted." + EnsureInBraces(kvp.Key))) + " into @id "); } return(AddWhereAndExecute(pkFilters, reader, conn, sb, com, outputInserted ? "; select t.* from " + EnsureInBraces(tableName) + " t where " + string.Join(" and ", pkFilters.Select( kvp => string.Format("t.{0}=(select top 1 {0} from @id)", EnsureInBraces(kvp.Key)))) : null )); } }
/// <param name="pkFilters"> Must not contains DBNull parameters </param> protected void Update([NotNull] UpdateBase u, [NotNull] string tableName, [NotNull] IEnumerable <KeyValuePair <string, object> > pkFilters) { Update <DtoDummy>(u, tableName, pkFilters.ToArray(), null); }