Edit DBQueryStep to enable multiple rows return

Editorial architecture visual showing system boundaries, service interaction, and technical tradeoffs

By default, the DBQueryStep only looks for first row, in which case it will cause problem in multiple rows result.

I slightly changed the code in BizUnit to make this viable. As a result, stuff all columns to be returned in the <rows> secion, i.e.

     <Rows>
        <Columns>
          <TotalRecordCount>1</TotalRecordCount>
          <Direction>IN</Direction>
          <TotalRecordCount>1</TotalRecordCount>
          <Direction>OUT</Direction>
        </Columns>
      </Rows>

Updated code in DBQueryStep.cs,

                foreach (DBRowToValidate row in this.DBRowsToValidate.RowsToValidate)
                {
                    DataRow bamDBRow;
                    int columnsCount = 0;

                    // Get the element which has the unique flag on…
                    //DBCellToValidate uniqueCell = row.UniqueCell;
                    //if (null != uniqueCell)
                    //{
                    //    DataRow[] bamDBRowArray =
                    //        ds.Tables[0].Select(
                    //            string.Format(“{0} = ‘{1}’”, uniqueCell.ColumnName, uniqueCell.ExpectedValue));
                    //    bamDBRow = bamDBRowArray[0];
                    //}
                    //else
                    //{
                    //    bamDBRow = ds.Tables[0].Rows[0];
                    //    columnsCount = ds.Tables[0].Columns.Count;
                    //}

                    bamDBRow = ds.Tables[0].Rows[0];
                    columnsCount = ds.Tables[0].Columns.Count;

                    IList<DBCellToValidate> cells = row.Cells;
                    int counter=0;
                    int rowCounter = 0;
                    foreach (DBCellToValidate cell in cells)
                    {
                        if ((counter>0)&&(counter%columnsCount==0))
                        {
                            rowCounter++;
                        }

                        counter++;

                        bamDBRow = ds.Tables[0].Rows[rowCounter];

                        object dbData = bamDBRow[cell.ColumnName];
                       
                        string dbDataStringValue = “”;
                        if (0 == ValidateData(dbData, cell.ExpectedValue, ref dbDataStringValue))
                        {
                            context.LogInfo(“Validation succeeded for field: {0} equals: {1}”, cell.ColumnName,
                                            dbDataStringValue);
                        }
                        else
                        {
                            throw new Exception(
                                String.Format(
                                    “Validation failed for field: {0}. Expected value: {1}, actual value: {2}”,
                                    cell.ColumnName, cell.ExpectedValue, dbDataStringValue));
                        }
                    }

Next step

Need this reviewed in a real system?

Use the article as a starting point, then bring the actual decision, constraints, and failure paths into an architecture review.

Join the discussion

Sign in to comment. Signed-in comments appear immediately.

One response to “Edit DBQueryStep to enable multiple rows return”

Join the discussion