示例#1
0
        public bool TryGetStoredProcedure(IContext context, ICriterion criterion, ModelActionOption option, SqlConnection connection, string hash, out Discovery.SqlStoredProcedure storedProcedure)
        {
            bool b = false;

            storedProcedure = null;
            string s = String.Empty;

            if (!IsCacheLoaded(connection))
            {
                LoadCache(connection);
            }

            List <Discovery.SqlStoredProcedure> list = StoredProcedures[connection.ConnectionString];

            if (list != null && list.Count > 0)
            {
                Discovery.SqlStoredProcedure found = null;
                if (option == ModelActionOption.Post | option == ModelActionOption.Put)
                {
                    found = list.FirstOrDefault(x =>
                    {
                        bool b1 = false;
                        if (!String.IsNullOrEmpty(x.Hash) && x.Hash.Length >= hash.Length)
                        {
                            b1 = hash.Equals(x.Hash.Substring(0, hash.Length), StringComparison.OrdinalIgnoreCase);
                        }
                        return(b1);
                    });
                }
                else
                {
                    found = list.FirstOrDefault(x =>
                    {
                        return(!String.IsNullOrEmpty(x.Hash) && x.Hash.Equals(hash, StringComparison.OrdinalIgnoreCase));
                    });
                }

                if (found != null)
                {
                    storedProcedure = found;
                    b = true;
                }
            }
            return(b);
        }
示例#2
0
        private void LoadCache(SqlConnection connection)
        {
            if (Tables == null)
            {
                Tables = new Dictionary <string, List <Discovery.SqlTable> >();
            }

            List <string> Schemas         = new List <string>();
            int           tableschemasize = 3;

            List <XF.Common.Discovery.SqlTable> tables = new List <Discovery.SqlTable>();

            using (SqlCommand cmd = connection.CreateCommand())
            {
                cmd.CommandType = CommandType.Text;
                cmd.CommandText = DiscoveryResources.Discovery_Tables;
                using (SqlDataReader reader = cmd.ExecuteReader())
                {
                    tables.Add(new XF.Common.Discovery.SqlTable(reader));
                    while (reader.NextResult())
                    {
                        tables.Add(new XF.Common.Discovery.SqlTable(reader));
                    }
                }
            }
            foreach (var table in tables)
            {
                if (!Schemas.Contains(table.TableSchema))
                {
                    Schemas.Add(table.TableSchema);
                }
            }

            foreach (var item in tables)
            {
                int j = item.TableSchema.Length;
                if (j > tableschemasize)
                {
                    tableschemasize = j;
                }
            }

            Tables.Add(connection.ConnectionString, tables);


            if (StoredProcedures == null)
            {
                StoredProcedures = new Dictionary <string, List <Discovery.SqlStoredProcedure> >();
            }

            string sql = DiscoveryResources.Discovery_StoredProcedures;
            List <Discovery.SqlParameter> list = new List <Discovery.SqlParameter>();

            using (DbCommand cmd = connection.CreateCommand())
            {
                cmd.CommandText = sql;
                cmd.CommandType = CommandType.Text;
                using (IDataReader reader = cmd.ExecuteReader())
                {
                    while (reader.Read())
                    {
                        list.Add(new Discovery.SqlParameter(reader));
                    }
                }
            }


            Dictionary <string, List <Discovery.SqlParameter> > d = new Dictionary <string, List <Discovery.SqlParameter> >();

            foreach (var item in list)
            {
                if (!d.ContainsKey(item.StoredProcedureName))
                {
                    d.Add(item.StoredProcedureName, new List <Discovery.SqlParameter>());
                }
                d[item.StoredProcedureName].Add(item);
            }

            List <Discovery.SqlStoredProcedure> l = new List <Discovery.SqlStoredProcedure>();

            foreach (var item in d)
            {
                Discovery.SqlStoredProcedure sproc = new Discovery.SqlStoredProcedure(item.Value);
                if (sproc.IsModelAction)
                {
                    l.Add(sproc);
                }
            }
            StoredProcedures.Add(connection.ConnectionString, l);
        }
示例#3
0
        public bool TryGetStoredProcedure <T>(IContext context, ICriterion criterion, ModelActionOption option, SqlConnection connection, out Discovery.SqlStoredProcedure storedProcedure) where T : class, new()
        {
            string hash = ComposeHash <T>(context.ApplicationContextKey, criterion, option);

            return(TryGetStoredProcedure(context, criterion, option, connection, hash, out storedProcedure));
        }