SqlitePerson.SelectAllPersonsRecuperable C# (CSharp) Method

SelectAllPersonsRecuperable() public static method

public static SelectAllPersonsRecuperable ( string sortedBy, int except, int inSession, string searchFilterName ) : ArrayList
sortedBy string
except int
inSession int
searchFilterName string
return ArrayList
    public static ArrayList SelectAllPersonsRecuperable(string sortedBy, int except, int inSession, string searchFilterName)
    {
        //sortedBy = name or uniqueID (= creation date)

        //1st select all the person.uniqueID of people who are in CurrentSession (or none if except == -1)
        //2n select all names in database (or in one session if inSession != -1)
        //3d filter all names (save all found in 2 that is not in 1)
        //
        //probably this can be made in only one time... future
        //
        //1

        string tp = Constants.PersonTable;
        string tps = Constants.PersonSessionTable;

        Sqlite.Open();
        dbcmd.CommandText = "SELECT " + tp + ".uniqueID " +
            " FROM " + tp + "," + tps +
            " WHERE " + tps + ".sessionID == " + except +
            " AND " + tp + ".uniqueID == " + tps + ".personID ";
        LogB.SQL(dbcmd.CommandText.ToString());

        SqliteDataReader reader;
        reader = dbcmd.ExecuteReader();

        ArrayList arrayExcept = new ArrayList(2);

        while(reader.Read())
            arrayExcept.Add (reader[0].ToString());

        reader.Close();
        Sqlite.Close();

        //2
        //sort no case sensitive when we sort by name
        if(sortedBy == "name") {
            sortedBy = "lower(" + tp + ".name)" ;
        } else {
            sortedBy = tp + ".uniqueID" ;
        }

        Sqlite.Open();
        if(inSession == -1) {
            string nameLike = "";
            if(searchFilterName != "")
                nameLike = " WHERE LOWER(" + tp + ".name) LIKE LOWER (\"%" + searchFilterName + "%\") ";

            dbcmd.CommandText =
                "SELECT * FROM " + tp +
                nameLike +
                " ORDER BY " + sortedBy;

        } else {
            dbcmd.CommandText =
                "SELECT " + tp + ".* FROM " + tp + ", " + tps +
                " WHERE " + tps + ".sessionID == " + inSession +
                " AND " + tp + ".uniqueID == " + tps + ".personID " +
                " ORDER BY " + sortedBy;
        }
        LogB.SQL(dbcmd.CommandText.ToString());

        SqliteDataReader reader2;
        reader2 = dbcmd.ExecuteReader();

        ArrayList arrayReturn = new ArrayList(2);

        bool found;

        //3
        while(reader2.Read()) {
            found = false;
            foreach (string line in arrayExcept) {
                if(line == reader2[0].ToString()) {
                    found = true;
                    goto finishForeach;
                }
            }

        finishForeach:

            if (!found) {
                Person p = new Person(
                        Convert.ToInt32(reader2[0].ToString()), //uniqueID
                        reader2[1].ToString(), 			//name
                        reader2[2].ToString(), 			//sex
                        UtilDate.FromSql(reader2[3].ToString()),//dateBorn
                        Convert.ToInt32(reader2[4].ToString()), //race
                        Convert.ToInt32(reader2[5].ToString()), //countryID
                        reader2[6].ToString(), 			//description
                        Convert.ToInt32(reader2[9].ToString()) //serverUniqueID
                        );
                arrayReturn.Add(p);
            }
        }

        reader2.Close();
        Sqlite.Close();

        return arrayReturn;
    }