Beispiel #1
0
        public virtual string SerializeDbData(Func <string, bool> tableNamePredicate = null)
        {
            var tables = this.DbInspector.GetTables(true, tableNamePredicate);


            var dbData =
                new DynamicRow(); // it is strange to store entire data in 'dynamic' 'row', but why to invent new dynamic ancestor?

            using (var command = this.Connection.CreateCommand())
            {
                foreach (var table in tables)
                {
                    var sql = this.Cruder.ScriptBuilder.BuildSelectAllScript(table);
                    command.CommandText = sql;

                    var rows = DbUtils
                               .GetCommandRows(command);

                    dbData.SetValue(table.Name, rows);
                }
            }

            var json = JsonConvert.SerializeObject(dbData, Formatting.Indented);

            return(json);
        }
Beispiel #2
0
        public static IList <dynamic> GetCommandRows(IDbCommand command, ITableValuesConverter tableValuesConverter = null)
        {
            if (command == null)
            {
                throw new ArgumentNullException(nameof(command));
            }

            if (command == null)
            {
                throw new ArgumentNullException(nameof(command));
            }

            using (var reader = command.ExecuteReader())
            {
                var rows = new List <dynamic>();

                while (reader.Read())
                {
                    var row = new DynamicRow(true);

                    for (var i = 0; i < reader.FieldCount; i++)
                    {
                        var name = reader.GetName(i);

                        var value = reader[i];

                        if (tableValuesConverter == null)
                        {
                            // only simplest obvious transformation
                            if (value == DBNull.Value)
                            {
                                value = null;
                            }
                        }
                        else
                        {
                            var dbValueConverter = tableValuesConverter.GetColumnConverter(name);
                            var convertedValue   = dbValueConverter.FromDbValue(value);

                            if (convertedValue == DBNull.Value)
                            {
                                throw new NotImplementedException(); // error in your converter logic.
                            }

                            if (convertedValue == null && value != DBNull.Value)
                            {
                                // the only case IDbValueConverter.FromDbValue returns null is value equal to DBNull.Value.

                                throw new NotImplementedException();
                            }

                            value = convertedValue;
                        }

                        row.SetValue(name, value);
                    }

                    rows.Add(row);
                }

                return(rows);
            }
        }