Ejemplo n.º 1
0
        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
                                              ));
                }
        }
Ejemplo n.º 2
0
 /// <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);
 }