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); }
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); }