Example #1
0
        public DataResult Update(DynamicRow row)
        {
            #region check
            if (!row.__DatabaseFirst)
            {
                throw new Exception(
                          LogRecord
                          .Create()
                          .SetMessage(
                              "DynamicRow instance ",
                              "in 'CodeFirst' mode ",
                              "can't invoke Update() method."
                              )
                          .Error()
                          .Message
                          );
            }

            if (row.__DynamicTableNames.IsNullOrEmpty())
            {
                throw new Exception(
                          LogRecord
                          .Create()
                          .SetMessage(
                              "DynamicRow instance ",
                              "can't invoke Update() method ",
                              "without settings table name."
                              )
                          .Error()
                          .Message
                          );
            }

            if (row.__DynamicTableNames.Count() > 1)
            {
                throw new Exception(
                          LogRecord
                          .Create()
                          .SetMessage(
                              "You can't invoke Update() method ",
                              "for multiple tables ",
                              "in DynamicRow instance."
                              )
                          .Error()
                          .Message
                          );
            }
            #endregion

            return(base.Update(
                       row.__DynamicTableNames[0],
                       row.__DynamicDirtyValues,
                       row.__DynamicBasePrimaryKeys
                       ));
        }
Example #2
0
        public static List <dynamic>[] ToDynamics(
            this DbDataReader reader, int pageSize, int pageIndex)
        {
            var all = new List <List <dynamic> >();

            if (null == reader || !reader.HasRows)
            {
                return(all.ToArray());
            }
            bool paging = pageSize > 0 && pageIndex > 0;

            do
            {
                var list    = new List <dynamic>();
                int index   = 0;
                var columns = reader.GetColumns();
                while (reader.Read())
                {
                    index++;
                    if (paging)
                    {
                        if ((pageIndex - 1) * pageSize > index)
                        {
                            continue;
                        }
                        if (pageIndex * pageSize > index)
                        {
                            break;
                        }
                    }

                    DynamicRow row = new DynamicRow();
                    reader.CurrentBindDynamicRow(columns, ref row);
                    list.Add(row as dynamic);
                }
                all.Add(list);
            }while(reader.NextResult());

            return(all.ToArray());
        }
Example #3
0
        public static void CurrentBindDynamicRow(
            this DbDataReader reader,
            List <DynamicColumn> columns,
            ref DynamicRow row)
        {
            if (null == reader)
            {
                return;
            }
            if (columns.IsNullOrEmpty())
            {
                return;
            }

            var dbValues = new object[columns.Count];

            reader.GetValues(dbValues);

            var flatValues  = new List <Any>();
            var values      = new List <Any>();
            var hashCodes   = new List <Any>();
            var dbNulls     = new List <string>();
            var columnIndex = -1;

            foreach (var column in columns)
            {
                columnIndex++;
                var value = dbValues[columnIndex];
                if (DBNull.Value == value)
                {
                    dbNulls.Add(column.BaseColumnName);
                    value = null;
                }
                flatValues.SafeAdd(column.ColumnName, value);
                flatValues.SafeAdd(column.BaseColumnName, value);
                values.Add(column.BaseColumnName, value);


                if (null != value)
                {
                    int hashCode = value.GetHashCode();
                    hashCodes.Add(
                        column.BaseColumnName, hashCode
                        );
                }
            }

            row.__ReturnAny             = true;
            row.__DatabaseFirst         = true;
            row.__DynamicColumns        = columns;
            row.__FlatValues            = flatValues;
            row.__DynamicValues         = values;
            row.__DynamicOriginalValues = values;
            row.__OriginalHashCodes     = hashCodes;
            row.__DynamicDbNulls        = dbNulls;
            row.__OriginalHashCode      = row.GetHashCode();

            if (dbNulls.Any())
            {
                foreach (var dbNull in dbNulls)
                {
                    hashCodes.Add(
                        dbNull,
                        row.__OriginalHashCode
                        );
                }
            }
            row.__OriginalHashCodes = hashCodes;
        }
Example #4
0
        public static List <dynamic> ToDynamics(
            this DbDataReader reader, int pageSize, int pageIndex)
        {
            var list = new List <dynamic>();

            if (null == reader)
            {
                return(list);
            }
            bool paging = pageSize > 0 && pageIndex > 0;
            int  index  = 0;

            var schema    = reader.GetSchemaTable();
            var tableName = schema.TableName;

            var columns = new List <string>();

            for (int i = 0; i < reader.FieldCount; i++)
            {
                string s = reader.GetName(i);
                columns.Add(s);
            }

            var dbValues = new object[reader.FieldCount];

            while (reader.Read())
            {
                index++;
                if (paging)
                {
                    if ((pageIndex - 1) * pageSize > index)
                    {
                        continue;
                    }
                    if (pageIndex * pageSize > index)
                    {
                        break;
                    }
                }

                reader.GetValues(dbValues);

                //var row = schema.NewRow();
                var values    = new List <Any>();
                var hashCodes = new List <Any>();
                var dbNulls   = new List <string>();

                var columnIndex = -1;
                foreach (var column in columns)
                {
                    columnIndex++;
                    var value = dbValues[columnIndex];
                    if (DBNull.Value == value)
                    {
                        dbNulls.Add(column);
                        value = null;
                    }
                    values.Add(column, value);

                    if (null != value)
                    {
                        int hashCode = value.GetHashCode();
                        hashCodes.Add(column, hashCode);
                    }
                }

                var data = new DynamicRow()
                {
                    __ReturnAny     = true,
                    __DatabaseFirst = true,
                    __TableName     = tableName,
                    __Values        = values,
                    __HashCodes     = hashCodes,
                    __DbNulls       = dbNulls,
                };
                data.__OriginalHashCode = data.GetHashCode();

                if (dbNulls.Any())
                {
                    foreach (var dbNull in dbNulls)
                    {
                        hashCodes.Add(
                            dbNull,
                            data.__OriginalHashCode
                            );
                    }
                }
                data.__HashCodes = hashCodes;

                list.Add(data as dynamic);
            }
            return(list);
        }