Example #1
0
        internal ArrayList p_ReadMultiple(object persistableObject, string top, string where, string orderby, string groupby)
        {
            PersistDataSourceAttribute       pdsa;                    // contient les requetes utile pour l'acces au données
            PersistConnectionStringAttribute pcs;                     // contient l'attribut de la chaine de connexion
            ArrayList  alPrimaryKeys;                                 // contient la liste des clés primaire
            SortedList slFieldsValue;                                 // contient la liste des champs et leur valeurs

            Type persistableObjectType = persistableObject.GetType(); // on recupere les informations sur le type de l'objet a persister

            ArrayList alAggregatedObjects = GetAggregatedObject(persistableObject);

            GetDatabaseInformation(persistableObjectType, out pdsa, out pcs);

            // on recupere les infos sur les cle primaires
            CreateFieldAndPKeyList(persistableObjectType, out alPrimaryKeys, out slFieldsValue);

            ArrayList alMultObject = new ArrayList();
            string    reqSql       = "SELECT";

            if (top != null)
            {
                reqSql += " TOP " + top;
            }

            reqSql += " ";

            string separateur = "";

            foreach (string pk in alPrimaryKeys)
            {
                PersistFieldInfo pfi = (PersistFieldInfo)slFieldsValue[pk];
                reqSql    += separateur + pfi.DBFieldName;
                separateur = ",";
            }
            if (groupby != null)
            {
                reqSql += separateur + groupby;
            }

            reqSql += " FROM " + pdsa.TableName;
            if (where != null)
            {
                reqSql += " WHERE " + where;
            }
            if (groupby != null)
            {
                reqSql += " GROUP BY " + groupby;
            }
            if (orderby != null)
            {
                reqSql += " ORDER BY " + orderby;
            }

            // on se connecte a la base de donnée en utilisant la chaine de connection présent dans l'attribut [PersistConnectionString]
            IDbConnection cnx = dbhelper.GetConnection(pcs.ConnectionString);
            IDbCommand    cmd = dbhelper.GetNewCommand(reqSql);

            cmd.Connection = cnx;
            IDataReader rdr = cmd.ExecuteReader();
            Type        tpo = persistableObject.GetType();

            while (rdr.Read())
            {
                SortedList slNewFieldValue = new SortedList();
                object     npo             = Activator.CreateInstance(tpo);
                foreach (string pk in alPrimaryKeys)
                {
                    PersistFieldInfo pfi = (PersistFieldInfo)slFieldsValue[pk];
                    pfi.SetInstanceValue(npo, rdr[pfi.DBFieldName]);
                }
                PersistDAL.Read(npo);
                alMultObject.Add(npo);
            }
            rdr.Close();
            rdr.Dispose();
            cmd.Dispose();
            dbhelper.GetConnection("").Close();

            return(alMultObject);
        }
Example #2
0
        internal ArrayList p_Query(Type persistableObjectType, params SQLRequestElement[] sqle)
        {
            throw new PersistException("Not implemented");

            PersistDataSourceAttribute       pdsa; // contient les requetes utile pour l'acces au données
            PersistConnectionStringAttribute pcs;  // contient l'attribut de la chaine de connexion
            ArrayList  alPrimaryKeys;              // contient la liste des clés primaire
            SortedList slFieldsValue;              // contient la liste des champs et leur valeurs


            //ArrayList alAggregatedObjects=GetAggregatedObject(persistableObject);
            GetDatabaseInformation(persistableObjectType, out pdsa, out pcs);

            // on recupere les infos sur les cle primaires
            CreateFieldAndPKeyList(persistableObjectType, out alPrimaryKeys, out slFieldsValue);

            ArrayList alMultObject = new ArrayList();

            // ICI : appel du dbhelper pour contruire la requete SQL !
            string reqSql = "";
//////			if (top!=null) reqSql+=" TOP " + top;
//////
//////			reqSql+=" ";
//////
//////			string separateur="";
//////			foreach(string pk in alPrimaryKeys)
//////			{
//////				PersistFieldInfo pfi=(PersistFieldInfo)slFieldsValue[pk];
//////				reqSql+=separateur + pfi.DBFieldName;
//////				separateur=",";
//////			}
//////			if (groupby!=null) reqSql+=separateur+groupby;
//////
//////			reqSql+=" FROM " + pdsa.TableName;
//////			if (where!=null) reqSql+=" WHERE " + where;
//////			if (groupby!=null) reqSql+=" GROUP BY " + groupby;
//////			if (orderby!=null) reqSql+=" ORDER BY " + orderby;
//////
            // on se connecte a la base de donnée en utilisant la chaine de connection présent dans l'attribut [PersistConnectionString]
            IDbConnection cnx = dbhelper.GetConnection(pcs.ConnectionString);
            IDbCommand    cmd = dbhelper.GetNewCommand(reqSql);

            cmd.Connection = cnx;
            IDataReader rdr = cmd.ExecuteReader();
            Type        tpo = persistableObjectType;

            while (rdr.Read())
            {
                SortedList slNewFieldValue = new SortedList();
                object     npo             = Activator.CreateInstance(tpo);
                foreach (string pk in alPrimaryKeys)
                {
                    PersistFieldInfo pfi = (PersistFieldInfo)slFieldsValue[pk];
                    pfi.SetInstanceValue(npo, rdr[pfi.DBFieldName]);
                }
                PersistDAL.Read(npo);
                alMultObject.Add(npo);
            }
            rdr.Close();
            rdr.Dispose();
            cmd.Dispose();
            dbhelper.GetConnection("").Close();

            return(alMultObject);
        }