public static void fetchResult(this StoredProcedure aSP, Config aConfig, DBHelper aHelper)
        {
            List <DBColumn> _result    = new List <DBColumn>();
            var             paramaters = GetParamaters(aSP.Paramaters);
            var             query      = NativeStoredProcedureQuery.GetSQLQuery(aSP.Name, paramaters);

            using (SqlConnection con = new SqlConnection(aConfig.DataSource))
            {
                try
                {
                    con.Open();
                    String q = query.Query;
                    q = "SET FMTONLY ON;" + q + ";SET FMTONLY OFF;";
                    using (SqlCommand Command = new SqlCommand(query.Query, con))
                    {
                        Command.Parameters.AddRange(query.Parameters.ToArray());
                        logger.Debug(q);

                        using (SqlDataReader aReader = Command.ExecuteReader())
                        {
                            DataTable _schema = aReader.GetSchemaTable();
                            if (_schema != null)
                            {
                                foreach (DataRow row in _schema.Rows)
                                {
                                    _result.Add(new DBColumn
                                    {
                                        TABLE_NAME  = "SP" + aSP.Name,
                                        DATA_TYPE   = row["DataType"].ToString(),
                                        COLUMN_NAME = row["BaseColumnName"].ToString()
                                    });
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    logger.Debug(ex);
                    con.Close();
                    _result.Add(new DBColumn
                    {
                        TABLE_NAME  = "SP" + aSP.Name,
                        DATA_TYPE   = typeof(DataTable).ToString(),
                        COLUMN_NAME = "Result"
                    });

                    var q = NativeQuery.SimpleQueryHelper("SET FMTONLY OFF;");
                    aHelper.Execute(delegate(DbSession aDBSession)
                    {
                        aDBSession.Execute(q, new DataReaderBinder());
                    });
                }

                var r = _result.Convert(false);
                aSP.Result = r.Count() > 0 ? r.First() : null;
            }
        }
        public List <DBStoredProcedureParamater> GetStoredProcedureParamaters()
        {
            var q = NativeQuery.SimpleQueryHelper("select r.SPECIFIC_SCHEMA, r.SPECIFIC_NAME, r.SPECIFIC_CATALOG, p.PARAMETER_NAME, p.DATA_TYPE from  DataBank.INFORMATION_SCHEMA.ROUTINES as r inner JOIN information_schema.PARAMETERS as p ON p.SPECIFIC_NAME = r.SPECIFIC_NAME where routine_type = @p0", "PROCEDURE");

            TemplateBinder <DBStoredProcedureParamater> _binder = new TemplateBinder <DBStoredProcedureParamater>();
            List <DBStoredProcedureParamater>           _r      = new List <DBStoredProcedureParamater>();

            _binder.OnBind = delegate(DBStoredProcedureParamater aT)
            {
                _r.Add(aT);
            };
            DBHelper.Execute(delegate(DbSession aDBSession)
            {
                aDBSession.Execute(q, _binder);
            });
            return(_r);
        }
        public IEnumerable <TableStructure> GetSchemaTables()
        {
            SqlQuery _query = NativeQuery.SimpleQueryHelper(
                "select col.TABLE_SCHEMA, col.TABLE_CATALOG, col.TABLE_NAME, col.COLUMN_NAME, col.DATA_TYPE, const.CONSTRAINT_TYPE " +
                "from INFORMATION_SCHEMA.COLUMNS as col " +
                "LEFT JOIN " +
                "(SELECT cu.TABLE_NAME, cu.COLUMN_NAME,  cu.CONSTRAINT_NAME, tc.CONSTRAINT_TYPE " +
                "From INFORMATION_SCHEMA.KEY_COLUMN_USAGE cu INNER JOIN " +
                "INFORMATION_SCHEMA.TABLE_CONSTRAINTS as tc ON " +
                "(cu.CONSTRAINT_NAME = tc.CONSTRAINT_NAME) where tc.CONSTRAINT_TYPE = 'PRIMARY KEY') AS const " +
                "ON  " +
                "(col.TABLE_NAME = const.TABLE_NAME AND col.COLUMN_NAME = const.COLUMN_NAME) " +
                "Order by col.TABLE_NAME ASC, col.COLUMN_NAME ASC");

            var _dbColumns = ExecuteQuery(_query);

            return(_dbColumns.Convert());
        }