예제 #1
0
        public List <dynamic> getDynamicQuery(int id, SearchOptions o)
        {
            ReportDefinition     report = dbset.Single(a => a.ID == id);
            List <QueryMetadata> meta   = MacheteAdoContext.getMetadata(report.sqlquery, _readonlyConnectionString);
            Type       queryType        = ILVoodoo.buildQueryType(meta);
            MethodInfo method           = Type.GetType("Machete.Data.MacheteAdoContext")
                                          .GetMethod("SqlQuery", new[] { typeof(string), typeof(string), typeof(SqlParameter[]) });
            MethodInfo man = method.MakeGenericMethod(queryType);

            dynamic dynamicQuery = man.Invoke(null, new object[] {
                report.sqlquery,
                _readonlyConnectionString,
                new[] {
                    new SqlParameter {
                        ParameterName = "beginDate", Value = o.beginDate
                    },
                    new SqlParameter {
                        ParameterName = "endDate", Value = o.endDate
                    },
                    new SqlParameter {
                        ParameterName = "dwccardnum", Value = o.dwccardnum
                    }
                }
            });

            var dynamicList = new List <dynamic>();

            foreach (var row in dynamicQuery)
            {
                dynamicList.Add(row);
            }

            return(dynamicList);
        }
        public void getDynamicQuery_test_all_metadata()
        {
            // arrange
            var reports = frb.ToFactory().ReportDefinitions.AsQueryable();

            foreach (var r in reports)
            {
                var result = MacheteAdoContext.getMetadata(r.sqlquery, connectionString);
                Assert.IsTrue(result.Count > 2);
            }
            // act
            // assert
        }
예제 #3
0
 public List <QueryMetadata> getColumns(string tableName)
 {
     return(MacheteAdoContext.getMetadata($"select top 0 * from {tableName}", _readonlyConnectionString));
 }