internal List <ITableRow> Execute() { this.connection.StartTransaction(System.Data.IsolationLevel.ReadCommitted); DbCommand command = this.connection.CreateCommand(this.query.QueryString); var adapter = this.connection.CreateDataAdapter(command); var dataset = new DataSet(); adapter.Fill(dataset); List <ITableRow> rows = new List <ITableRow>(); for (int i = 0; i < dataset.Tables[0].Rows.Count; i++) { TableRow row = new TableRow(); Dictionary <IColumn, object> columnValues = new Dictionary <IColumn, object>(); row.ColumnValues = columnValues; object[] values = dataset.Tables[0].Rows[i].ItemArray; for (int j = 0; j < values.Count(); j++) { object value = values[j] == DBNull.Value ? null : values[j]; if (((SelectFilter)query).Columns[j].Type.Equals(typeof(DateTime))) { value = DateTime.SpecifyKind((DateTime)values[j], DateTimeKind.Utc); } if (((SelectFilter)query).Columns[j].Type.Equals(typeof(DateTime?)) && value != null) { value = DateTime.SpecifyKind((DateTime)value, DateTimeKind.Utc); } columnValues.Add(((SelectFilter)query).Columns[j], value); } if (this.table.BlobNameColumn != null) { object blobName = columnValues[this.table.BlobNameColumn]; object blobContainer = columnValues[this.table.BlobContainerColumn]; IBlobStore blobStore = BlobStoreFactory.Instance.GetBlobStore(); byte[] blobValue = blobStore.GetBlob(blobContainer.ToString(), blobName.ToString()); columnValues.Add(this.table.BlobValueColumn, blobValue); } rows.Add(row); } return(rows); }