Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        /// <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));
                }
            }
        }
Esempio n. 3
0
 private void SerializeResult(Stream stream, RowSetCollectionData data)
 {
     using (stream)
     {
         var serializer = new JsonResultSerializer();
         var writer     = new StreamWriter(stream);
         serializer.SerializeData(writer, data);
         writer.Flush();
     }
 }
Esempio n. 4
0
        /// <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());
        }
Esempio n. 5
0
        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);
                    }
                }
            }
        }