Exemple #1
0
        private List <T> query <T>(Query query, RowReaderCallback <T> callback, bool firstOnly = false)
        {
            List <T> result = new List <T>();

            using (var sql = connect()) {
                using (var cmd = new SqlCommand(useDatabase(query.build()), sql)) {
                    foreach (var a in query.arguments)
                    {
                        if (a.Value != null)
                        {
                            cmd.Parameters.AddWithValue(a.Key, a.Value);
                        }
                    }

                    sql.Open();
                    using (var dr = cmd.ExecuteReader()) {
                        var reader = new RowReader(dr);
                        while (dr.Read())
                        {
                            result.Add(callback(reader));
                            if (firstOnly)
                            {
                                break;
                            }
                        }
                    }
                }
            }
            return(result);
        }
Exemple #2
0
 /// <summary>
 /// Reads the data from the currently processed row
 /// </summary>
 /// <param name="reader"></param>
 protected virtual void readRow(RowReader reader)
 {
     __ard = true;
     foreach (var field in __def.fields.Values)
     {
         var f = getField(field.name);
         if (f == null)
         {
             throw new ModelDefinitionException("target type does not implement model field " + field.name);
         }
         var v = reader.read(field.column, field.type);
         if (v != null && v.GetType() == typeof(NDateTime))
         {
             v = (v as NDateTime).dt;
         }
         this[field.name] = v;
         var _ref = field.reference;
         if (_ref != null && _ref.container != null)
         {
             var _obj = typeof(Model)
                        .GetMethod("getFirst")
                        .MakeGenericMethod(_ref.model)
                        .Invoke(null, new object[] {
                 new Where.Equals(_ref.field, this[field.name])
             });
             this[_ref.container] = _obj;
         }
     }
 }