private RowSetCollectionData ProcessData(IDataReader reader) { var result = new RowSetCollectionData(); do { MetadataBuilder.Build(reader); var rowset = new RowSetData(); while (reader.Read()) { var row = new AtomCollectionData(); var columns = MetadataBuilder.Columns.OrderBy(c => c.Ordinal); foreach (var column in columns) { try { var atom = new AtomData(); atom.Name = column.Name; atom.Value = reader.GetValue(column.Ordinal); row.AddAtom(atom); } catch (Exception ex) { throw new Exception($"Error reading column {column.Ordinal} ({column.Name})", ex); } } rowset.AddRow(row); } result.AddRowSet(rowset); }while (reader.NextResult()); return(result); }
/// <summary> /// Execute the underlying stored procedure and returns a result. /// </summary> /// <param name="arguments">The arguments to execute the stored procedure</param> /// <returns>The data resulting from the stored procedure</returns> public RowSetCollectionData Execute(AtomCollectionData arguments) { if (Database == null) { throw new InvalidOperationException("Missing database connection"); } if (OperationName == null) { throw new InvalidOperationException("Missing operation name"); } if (MetadataBuilder == null) { throw new InvalidOperationException("Missing metadata builder"); } Database.Open(); using (var cmd = Database.CreateCommand()) { cmd.CommandType = CommandType.StoredProcedure; cmd.CommandText = OperationName; SetupArguments(cmd, arguments); var result = new RowSetCollectionData(); using (var reader = cmd.ExecuteReader()) { return(ProcessData(reader)); } } }
private void SerializeResult(Stream stream, RowSetCollectionData data) { using (stream) { var serializer = new JsonResultSerializer(); var writer = new StreamWriter(stream); serializer.SerializeData(writer, data); writer.Flush(); } }
/// <summary> /// Serialize result data to JSON /// </summary> /// <param name="writer">A <c>System.IO.TextWriter</c> to write JSON to</param> /// <param name="data">A structured collection of result data</param> public void SerializeData(TextWriter writer, RowSetCollectionData data) { var resultToken = new JObject(); try { InternalSerializeData(resultToken, data); } catch (Exception ex) { InternalSerializeError(resultToken, ex); } writer.Write(resultToken.ToString()); }
private void InternalSerializeData(JObject resultToken, RowSetCollectionData data) { var rowsetArrayToken = new JArray(); resultToken[DataName] = rowsetArrayToken; foreach (var rowset in data.RowSets) { var rowsetToken = new JArray(); rowsetArrayToken.Add(rowsetToken); foreach (var row in rowset.Rows) { var rowToken = new JObject(); rowsetToken.Add(rowToken); foreach (var atom in row.Atoms) { rowToken[atom.Name] = JToken.FromObject(atom.Value); } } } }