private List <object> GetRowValues(Dictionary <string, object> row, int rowIndex, List <TableColumn> columns, List <string> excludeColumnNames, long pageNumber, bool isAppendToFile, out Dictionary <string, object> parameters)
        {
            parameters = new Dictionary <string, object>();

            List <object> values = new List <object>();

            foreach (TableColumn column in columns)
            {
                if (!excludeColumnNames.Contains(column.Name))
                {
                    object value   = this.ParseValue(column, row[column.Name]);
                    bool   isBytes = ValueHelper.IsBytes(value);

                    if (!isAppendToFile)
                    {
                        if ((isBytes && !this.option.TreatBytesAsNullForExecuting) || this.NeedInsertParameter(column, value))
                        {
                            string parameterName = $"P{pageNumber}_{rowIndex}_{column.Name}";

                            string parameterPlaceholder = this.dbInterpreter.CommandParameterChar + parameterName;

                            parameters.Add(parameterPlaceholder, value);

                            value = parameterPlaceholder;
                        }
                        else if (isBytes && this.option.TreatBytesAsNullForExecuting)
                        {
                            value = null;
                        }
                    }
                    else
                    {
                        if (isBytes)
                        {
                            if (this.option.TreatBytesAsHexStringForFile)
                            {
                                value = this.GetBytesConvertHexString(value, column.DataType);
                            }
                            else
                            {
                                value = null;
                            }
                        }
                    }

                    values.Add(value);
                }
            }

            return(values);
        }
Beispiel #2
0
        public async Task <Dictionary <long, List <Dictionary <string, object> > > > GetPagedDataListAsync(DbConnection connection, Table table, List <TableColumn> columns, string primaryKeyColumns, long total, int pageSize, string whereClause = "")
        {
            var dictPagedData = new Dictionary <long, List <Dictionary <string, object> > >();

            long pageCount = PaginationHelper.GetPageCount(total, pageSize);

            for (long pageNumber = 1; pageNumber <= pageCount; pageNumber++)
            {
                if (this.CancelRequested)
                {
                    break;
                }

                DataTable dataTable = await this.GetPagedDataTableAsync(connection, table, columns, primaryKeyColumns, total, pageSize, pageNumber, whereClause);

                List <Dictionary <string, object> > rows = new List <Dictionary <string, object> >();

                foreach (DataRow row in dataTable.Rows)
                {
                    var dicField = new Dictionary <string, object>();

                    for (var i = 0; i < dataTable.Columns.Count; i++)
                    {
                        DataColumn column     = dataTable.Columns[i];
                        string     columnName = column.ColumnName;

                        if (columnName == DbInterpreter.RowNumberColumnName)
                        {
                            continue;
                        }

                        TableColumn tableColumn = columns.FirstOrDefault(item => item.Name == columnName);

                        object value = row[i];

                        if (ValueHelper.IsBytes(value))
                        {
                            if (this.Option.TreatBytesAsNullForReading)
                            {
                                if (!(((Byte[])value).Length == 16) && this.DatabaseType == DatabaseType.Oracle)
                                {
                                    value = null;

                                    if (dataTable.Columns[i].ReadOnly)
                                    {
                                        dataTable.Columns[i].ReadOnly = false;
                                    }

                                    row[i] = null;
                                }
                            }
                        }

                        dicField.Add(columnName, value);
                    }

                    rows.Add(dicField);
                }

                dictPagedData.Add(pageNumber, rows);

                if (this.OnDataRead != null && !this.CancelRequested && !this.HasError)
                {
                    await this.OnDataRead(new TableDataReadInfo()
                    {
                        Table      = table,
                        Columns    = columns,
                        TotalCount = total,
                        Data       = rows,
                        DataTable  = dataTable
                    });
                }
            }

            return(dictPagedData);
        }