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); }
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); }