Esempio n. 1
0
        public int GetCurrentSize(int id)
        {
            BoxSizes?sizes = Parent.CurrentUser.Cache[ObjectLifetimeIdentifier.GetIdentifier(CacheObject.CurrentBoxSizes, Parent.CurrentUser.ConnectionString.LmId)] as BoxSizes?;

            if (sizes.HasValue)
            {
                return(sizes.Value.Sizes[id]);
            }

            using (NpgsqlConnection con = PostgreSQLConn.CreateConnection(Parent.CurrentUser))
            {
                using (NpgsqlCommand cmd = con.CreateCommand())
                {
                    sizes           = new BoxSizes(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
                    cmd.CommandText = @"SELECT box, count(*) AS count FROM ""UserCardState"" WHERE active=true and user_id=:user_id and cards_id IN (SELECT cards_id FROM ""LearningModules_Cards"" WHERE lm_id=:lm_id) GROUP BY box";
                    cmd.Parameters.Add("user_id", Parent.CurrentUser.Id);
                    cmd.Parameters.Add("lm_id", Parent.CurrentUser.ConnectionString.LmId);
                    NpgsqlDataReader reader = PostgreSQLConn.ExecuteReader(cmd, Parent.CurrentUser, false);
                    while (reader.Read())
                    {
                        sizes.Value.Sizes[Convert.ToInt32(reader["box"])] = Convert.ToInt32(reader["count"]);
                    }

                    Parent.CurrentUser.Cache[ObjectLifetimeIdentifier.Create(CacheObject.CurrentBoxSizes, Parent.CurrentUser.ConnectionString.LmId)] = sizes.Value;

                    return(sizes.Value.Sizes[id]);
                }
            }
        }
        /// <summary>
        /// Gets the size of the current.
        /// </summary>
        /// <param name="id">The id.</param>
        /// <returns></returns>
        /// <remarks>Documented by Dev03, 2009-01-09</remarks>
        /// <remarks>Documented by Dev08, 2009-01-09</remarks>
        public int GetCurrentSize(int id)
        {
            BoxSizes?sizes = Parent.CurrentUser.Cache[ObjectLifetimeIdentifier.GetIdentifier(CacheObject.CurrentBoxSizes, Parent.CurrentUser.ConnectionString.LmId)] as BoxSizes?;

            if (sizes.HasValue)
            {
                return(sizes.Value.Sizes[id]);
            }

            using (SqlCeCommand cmd = MSSQLCEConn.CreateCommand(Parent.CurrentUser))
            {
                sizes = new BoxSizes(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);          //filled with temp/default values

                cmd.CommandText = "SELECT CS.box, count(*) AS count FROM UserCardState CS INNER JOIN Cards C ON CS.cards_id = C.id WHERE CS.active=1 and CS.user_id=@user_id and C.lm_id=@lm_id GROUP BY CS.box";
                cmd.Parameters.Add("@user_id", Parent.CurrentUser.Id);
                cmd.Parameters.Add("@lm_id", Parent.CurrentUser.ConnectionString.LmId);
                SqlCeDataReader reader = MSSQLCEConn.ExecuteReader(cmd);
                while (reader.Read())
                {
                    sizes.Value.Sizes[Convert.ToInt32(reader["box"])] = Convert.ToInt32(reader["count"]);
                }
                reader.Close();

                Parent.CurrentUser.Cache[ObjectLifetimeIdentifier.Create(CacheObject.CurrentBoxSizes, Parent.CurrentUser.ConnectionString.LmId)] = sizes.Value;

                return(sizes.Value.Sizes[id]);
            }
        }
        private BoxSizes GetCurrentBoxContent()
        {
            BoxSizes sizes;

            using (NpgsqlConnection con = PostgreSQLConn.CreateConnection(Parent.CurrentUser))
            {
                using (NpgsqlCommand cmd = con.CreateCommand())
                {
                    sizes           = new BoxSizes(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
                    cmd.CommandText = @"SELECT CS.box AS box, count(*) AS count FROM ""UserCardState"" CS
                                        INNER JOIN ""Cards"" C ON C.id = CS.cards_id AND C.lm_id=:lm_id
                                        WHERE CS.active = TRUE AND CS.user_id = :user_id  
                                      GROUP BY CS.box";
                    cmd.Parameters.Add("user_id", Parent.CurrentUser.Id);
                    cmd.Parameters.Add("lm_id", Parent.CurrentUser.ConnectionString.LmId);

                    NpgsqlDataReader reader = PostgreSQLConn.ExecuteReader(cmd, Parent.CurrentUser);
                    while (reader.Read())
                    {
                        sizes.Sizes[Convert.ToInt32(reader["box"])] = Convert.ToInt32(reader["count"]);
                    }
                }
            }
            return(sizes);
        }
        /// <summary>
        /// Gets the size of the default.
        /// </summary>
        /// <param name="id">The id.</param>
        /// <returns></returns>
        /// <remarks>Documented by Dev03, 2009-01-09</remarks>
        public int GetDefaultSize(int id)
        {
            BoxSizes?sizes = Parent.CurrentUser.Cache[ObjectLifetimeIdentifier.GetIdentifier(CacheObject.DefaultBoxSizes, Parent.CurrentUser.ConnectionString.LmId)] as BoxSizes?;

            if (sizes.HasValue)
            {
                return(sizes.Value.Sizes[id]);
            }

            using (SqlCeCommand cmd = MSSQLCEConn.CreateCommand(Parent.CurrentUser))
            {
                cmd.CommandText = "SELECT Boxes.* FROM Boxes INNER JOIN Settings ON Boxes.id = Settings.boxes INNER JOIN LearningModules ON Settings.id = LearningModules.default_settings_id WHERE LearningModules.id = @lm_id";
                cmd.Parameters.Add("@lm_id", Parent.CurrentUser.ConnectionString.LmId);
                SqlCeDataReader reader = MSSQLCEConn.ExecuteReader(cmd);
                reader.Read();
                sizes = new BoxSizes(int.MaxValue,
                                     Convert.ToInt32(reader["box1_size"]),
                                     Convert.ToInt32(reader["box2_size"]),
                                     Convert.ToInt32(reader["box3_size"]),
                                     Convert.ToInt32(reader["box4_size"]),
                                     Convert.ToInt32(reader["box5_size"]),
                                     Convert.ToInt32(reader["box6_size"]),
                                     Convert.ToInt32(reader["box7_size"]),
                                     Convert.ToInt32(reader["box8_size"]),
                                     Convert.ToInt32(reader["box9_size"]),
                                     int.MaxValue);
                reader.Close();

                Parent.CurrentUser.Cache[ObjectLifetimeIdentifier.Create(CacheObject.DefaultBoxSizes, Parent.CurrentUser.ConnectionString.LmId)] = sizes.Value;

                return(sizes.Value.Sizes[id]);
            }
        }
        /// <summary>
        /// Gets the size.
        /// </summary>
        /// <param name="id">The id.</param>
        /// <returns></returns>
        /// <remarks>Documented by Dev03, 2009-01-09</remarks>
        public int GetSize(int id)
        {
            BoxSizes?sizes = Parent.CurrentUser.Cache[ObjectLifetimeIdentifier.GetIdentifier(CacheObject.BoxSizes, Parent.CurrentUser.ConnectionString.LmId)] as BoxSizes?;

            if (sizes.HasValue)
            {
                return(sizes.Value.Sizes[id]);
            }

            using (SqlCeCommand cmd = MSSQLCEConn.CreateCommand(Parent.CurrentUser))
            {
                sizes           = new BoxSizes(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
                cmd.CommandText = @"SELECT UserCardState.box AS box, count(*) AS count FROM UserCardState, Chapters_Cards
	                                WHERE UserCardState.active=1 and 
		                            Chapters_Cards.cards_id=UserCardState.cards_id and UserCardState.user_id=@user_id and 
		                            Chapters_Cards.chapters_id IN (
			                            SELECT chapters_id FROM SelectedLearnChapters INNER JOIN UserProfilesLearningModulesSettings
					                    ON SelectedLearnChapters.settings_id=UserProfilesLearningModulesSettings.settings_id
				                        WHERE UserProfilesLearningModulesSettings.user_id=@user_id and UserProfilesLearningModulesSettings.lm_id=@lm_id
		                            ) GROUP BY UserCardState.box"        ;
                cmd.Parameters.Add("@user_id", Parent.CurrentUser.Id);
                cmd.Parameters.Add("@lm_id", Parent.CurrentUser.ConnectionString.LmId);

                SqlCeDataReader reader = MSSQLCEConn.ExecuteReader(cmd);
                while (reader.Read())
                {
                    sizes.Value.Sizes[Convert.ToInt32(reader["box"])] = Convert.ToInt32(reader["count"]);
                }
                reader.Close();

                Parent.CurrentUser.Cache[ObjectLifetimeIdentifier.Create(CacheObject.BoxSizes, Parent.CurrentUser.ConnectionString.LmId, cacheLifeSpan)] = sizes.Value;

                return(sizes.Value.Sizes[id]);
            }
        }
        public void RecalculateBoxSizes(int sessionId)
        {
            using (NpgsqlConnection con = PostgreSQLConn.CreateConnection(Parent.CurrentUser))
            {
                using (NpgsqlCommand cmd = con.CreateCommand())
                {
                    cmd.CommandText = "UPDATE \"LearningSessions\" SET pool_content=:pool, box1_content=:b1, box2_content=:b2, box3_content=:b3, " +
                                      "box4_content=:b4, box5_content=:b5, box6_content=:b6, box7_content=:b7, box8_content=:b8, box9_content=:b9, box10_content=:b10 WHERE id=:sid AND user_id=:uid AND lm_id=:lmid";
                    cmd.Parameters.Add("sid", sessionId);
                    cmd.Parameters.Add("uid", Parent.CurrentUser.Id);
                    cmd.Parameters.Add("lmid", Parent.GetParentDictionary().Id);

                    int      counter      = 0;
                    int      cardsInBoxes = 0;
                    BoxSizes boxContent   = GetCurrentBoxContent();
                    foreach (int box in boxContent.Sizes)
                    {
                        if (counter == 0)
                        {
                            cmd.Parameters.Add("pool", box);
                            ++counter;
                            continue;
                        }

                        cmd.Parameters.Add("b" + Convert.ToString(counter++), box);
                        cardsInBoxes += box;
                    }

                    PostgreSQLConn.ExecuteNonQuery(cmd, Parent.CurrentUser);
                }
            }
        }
Esempio n. 7
0
        public void RecalculateBoxSizes(int sessionId)
        {
            SqlCeCommand cmd = MSSQLCEConn.CreateCommand(Parent.CurrentUser);

            cmd.CommandText = "UPDATE LearningSessions SET pool_content=@pool, box1_content=@b1, box2_content=@b2, box3_content=@b3, " +
                              "box4_content=@b4, box5_content=@b5, box6_content=@b6, box7_content=@b7, box8_content=@b8, box9_content=@b9, box10_content=@b10 WHERE id=@sid AND user_id=@uid AND lm_id=@lmid";
            cmd.Parameters.Add("sid", sessionId);
            cmd.Parameters.Add("@uid", Parent.CurrentUser.Id);
            cmd.Parameters.Add("@lmid", Parent.GetParentDictionary().Id);

            int      counter      = 0;
            int      cardsInBoxes = 0;
            BoxSizes boxContent   = GetCurrentBoxContent();

            foreach (int box in boxContent.Sizes)
            {
                if (counter == 0)
                {
                    cmd.Parameters.Add("@pool", box);
                    ++counter;
                    continue;
                }

                cmd.Parameters.Add("@b" + Convert.ToString(counter++), box);
                cardsInBoxes += box;
            }

            MSSQLCEConn.ExecuteNonQuery(cmd);
        }
        private GestorePrenotazioni()
        {
            _prenotazioni = PrenotazioniRW.Load();
            BoxSizes bs = ImpostazioniRW.LoadSettings();

            BOX_CANI_SIZE  = bs.NumBoxCani;
            BOX_GATTI_SIZE = bs.NumBoxGatti;
        }
        /// <summary>
        /// Opens the user learning session.
        /// </summary>
        /// <param name="lm_id">The lm_id.</param>
        /// <remarks>Documented by Dev08, 2008-09-05</remarks>
        public int OpenUserSession(int lm_id)
        {
            using (NpgsqlConnection con = PostgreSQLConn.CreateConnection(Parent.CurrentUser))
            {
                using (NpgsqlCommand cmd = con.CreateCommand())
                {
                    cmd.CommandText = "SELECT \"StartLearningSession\"(:usrid, :lmid, :pool, :b1, :b2, :b3, :b4, :b5, :b6, :b7, :b8, :b9, :b10)";

                    cmd.Parameters.Add("usrid", Parent.CurrentUser.Id);
                    cmd.Parameters.Add("lmid", lm_id);

                    int      counter      = 0;
                    int      cardsInBoxes = 0;
                    BoxSizes boxContent   = GetCurrentBoxContent();
                    foreach (int box in boxContent.Sizes)
                    {
                        if (counter == 0)
                        {
                            cmd.Parameters.Add("pool", box);
                            ++counter;
                            continue;
                        }

                        cmd.Parameters.Add("b" + Convert.ToString(counter++), box);
                        cardsInBoxes += box;
                    }

                    int newSessionId = PostgreSQLConn.ExecuteScalar <int>(cmd, Parent.CurrentUser).Value;

                    //Following Statement does add the "RunningSession" = true to the current Statistic.
                    PgSqlStatisticConnector connector = PgSqlStatisticConnector.GetInstance(Parent);
                    connector.RunningSession = newSessionId;

                    return(newSessionId);
                }
            }
        }
Esempio n. 10
0
        public int GetDefaultSize(int id)
        {
            BoxSizes?sizes = Parent.CurrentUser.Cache[ObjectLifetimeIdentifier.GetIdentifier(CacheObject.DefaultBoxSizes, Parent.CurrentUser.ConnectionString.LmId)] as BoxSizes?;

            if (sizes.HasValue)
            {
                return(sizes.Value.Sizes[id]);
            }

            using (NpgsqlConnection con = PostgreSQLConn.CreateConnection(Parent.CurrentUser))
            {
                using (NpgsqlCommand cmd = con.CreateCommand())
                {
                    cmd.CommandText = string.Format("SELECT * FROM \"Boxes\"" +
                                                    "WHERE id=(SELECT boxes FROM \"Settings\" WHERE id=(SELECT default_settings_id FROM \"LearningModules\" WHERE id=:lm_id))", id);
                    cmd.Parameters.Add("lm_id", Parent.CurrentUser.ConnectionString.LmId);
                    NpgsqlDataReader reader = PostgreSQLConn.ExecuteReader(cmd, Parent.CurrentUser);
                    reader.Read();
                    sizes = new BoxSizes(int.MaxValue,
                                         Convert.ToInt32(reader["box1_size"]),
                                         Convert.ToInt32(reader["box2_size"]),
                                         Convert.ToInt32(reader["box3_size"]),
                                         Convert.ToInt32(reader["box4_size"]),
                                         Convert.ToInt32(reader["box5_size"]),
                                         Convert.ToInt32(reader["box6_size"]),
                                         Convert.ToInt32(reader["box7_size"]),
                                         Convert.ToInt32(reader["box8_size"]),
                                         Convert.ToInt32(reader["box9_size"]),
                                         int.MaxValue);

                    Parent.CurrentUser.Cache[ObjectLifetimeIdentifier.Create(CacheObject.DefaultBoxSizes, Parent.CurrentUser.ConnectionString.LmId)] = sizes.Value;

                    return(sizes.Value.Sizes[id]);
                }
            }
        }
Esempio n. 11
0
        public int GetMaximalSize(int id)
        {
            BoxSizes?sizes = Parent.CurrentUser.Cache[ObjectLifetimeIdentifier.GetIdentifier(CacheObject.MaximalBoxSizes, Parent.CurrentUser.ConnectionString.LmId)] as BoxSizes?;

            if (sizes.HasValue)
            {
                return(sizes.Value.Sizes[id]);
            }

            using (NpgsqlConnection con = PostgreSQLConn.CreateConnection(Parent.CurrentUser))
            {
                using (NpgsqlCommand cmd = con.CreateCommand())
                {
                    cmd.CommandText = string.Format("SELECT * FROM \"GetBoxSizes\"(:uid, :lm_id)", id);
                    cmd.Parameters.Add("uid", Parent.CurrentUser.Id);
                    cmd.Parameters.Add("lm_id", Parent.CurrentUser.ConnectionString.LmId);
                    NpgsqlDataReader reader = PostgreSQLConn.ExecuteReader(cmd, Parent.CurrentUser);
                    reader.Read();
                    sizes = new BoxSizes(Convert.ToInt32(reader["box0"]),
                                         Convert.ToInt32(reader["box1"]),
                                         Convert.ToInt32(reader["box2"]),
                                         Convert.ToInt32(reader["box3"]),
                                         Convert.ToInt32(reader["box4"]),
                                         Convert.ToInt32(reader["box5"]),
                                         Convert.ToInt32(reader["box6"]),
                                         Convert.ToInt32(reader["box7"]),
                                         Convert.ToInt32(reader["box8"]),
                                         Convert.ToInt32(reader["box9"]),
                                         Convert.ToInt32(reader["box10"]));

                    Parent.CurrentUser.Cache[ObjectLifetimeIdentifier.Create(CacheObject.MaximalBoxSizes, Parent.CurrentUser.ConnectionString.LmId)] = sizes.Value;

                    return(sizes.Value.Sizes[id]);
                }
            }
        }
Esempio n. 12
0
        private BoxSizes GetCurrentBoxContent()
        {
            BoxSizes sizes;

            using (SqlCeCommand cmd = MSSQLCEConn.CreateCommand(Parent.CurrentUser))
            {
                sizes           = new BoxSizes(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
                cmd.CommandText = @"SELECT CS.box AS box, count(*) AS count FROM UserCardState CS
                                        INNER JOIN Cards C ON C.id = CS.cards_id AND C.lm_id=@lm_id
                                        WHERE CS.active = 1 AND CS.user_id = @user_id  
                                      GROUP BY CS.box";
                cmd.Parameters.Add("@user_id", Parent.CurrentUser.Id);
                cmd.Parameters.Add("@lm_id", Parent.CurrentUser.ConnectionString.LmId);

                SqlCeDataReader reader = MSSQLCEConn.ExecuteReader(cmd);
                while (reader.Read())
                {
                    sizes.Sizes[Convert.ToInt32(reader["box"])] = Convert.ToInt32(reader["count"]);
                }
                reader.Close();

                return(sizes);
            }
        }
        /// <summary>
        /// Gets the size of the maximal.
        /// </summary>
        /// <param name="id">The id.</param>
        /// <returns></returns>
        /// <remarks>Documented by Dev03, 2009-01-09</remarks>
        public int GetMaximalSize(int id)
        {
            BoxSizes?sizes = Parent.CurrentUser.Cache[ObjectLifetimeIdentifier.GetIdentifier(CacheObject.MaximalBoxSizes, Parent.CurrentUser.ConnectionString.LmId)] as BoxSizes?;

            if (sizes.HasValue)
            {
                return(sizes.Value.Sizes[id]);
            }

            using (SqlCeCommand cmd = MSSQLCEConn.CreateCommand(Parent.CurrentUser))
            {
                cmd.CommandText = "SELECT count(*) FROM UserProfilesLearningModulesSettings WHERE user_id=@uid and lm_id=@lm_id";
                cmd.Parameters.Add("uid", Parent.CurrentUser.Id);
                cmd.Parameters.Add("lm_id", Parent.CurrentUser.ConnectionString.LmId);
                int settingsCount = Convert.ToInt32(cmd.ExecuteScalar());
                cmd.Parameters.Clear();

                cmd.CommandText = "SELECT count(*) FROM Cards WHERE id IN (SELECT cards_id FROM LearningModules_Cards WHERE lm_id=@lm_id)";
                cmd.Parameters.Add("lm_id", Parent.CurrentUser.ConnectionString.LmId);
                int cardsCount = Convert.ToInt32(cmd.ExecuteScalar());
                cmd.Parameters.Clear();

                // get the default sizes
                cmd.CommandText = @"SELECT box1_size, box2_size, box3_size, box4_size, box5_size, box6_size, box7_size, box8_size, box9_size
	FROM Boxes INNER JOIN Settings ON Boxes.id = Settings.boxes
		INNER JOIN LearningModules ON Settings.id=LearningModules.default_settings_id
	WHERE LearningModules.id=@lm_id"    ;
                cmd.Parameters.Add("@lm_id", Parent.CurrentUser.ConnectionString.LmId);
                SqlCeDataReader reader = MSSQLCEConn.ExecuteReader(cmd);
                reader.Read();
                BoxSizes defaultSizes = new BoxSizes(cardsCount,
                                                     Convert.ToInt32(reader["box1_size"]),
                                                     Convert.ToInt32(reader["box2_size"]),
                                                     Convert.ToInt32(reader["box3_size"]),
                                                     Convert.ToInt32(reader["box4_size"]),
                                                     Convert.ToInt32(reader["box5_size"]),
                                                     Convert.ToInt32(reader["box6_size"]),
                                                     Convert.ToInt32(reader["box7_size"]),
                                                     Convert.ToInt32(reader["box8_size"]),
                                                     Convert.ToInt32(reader["box9_size"]),
                                                     cardsCount);
                reader.Close();

                if (settingsCount > 0)
                {
                    // get the user sizes
                    cmd.Parameters.Clear();
                    cmd.CommandText = "SELECT boxes FROM Settings INNER JOIN UserProfilesLearningModulesSettings ON Settings.id=UserProfilesLearningModulesSettings.settings_id WHERE user_id=@uid and lm_id=@lm_id";
                    cmd.Parameters.Add("@uid", Parent.CurrentUser.Id);
                    cmd.Parameters.Add("@lm_id", Parent.CurrentUser.ConnectionString.LmId);
                    int boxesId = Convert.ToInt32(cmd.ExecuteScalar());
                    cmd.Parameters.Clear();

                    cmd.CommandText = @"SELECT box1_size, box2_size, box3_size, box4_size, box5_size, box6_size, box7_size, box8_size, box9_size FROM Boxes WHERE id=@bid";
                    cmd.Parameters.Add("@bid", boxesId);
                    reader = MSSQLCEConn.ExecuteReader(cmd);
                    if (reader.Read())
                    {
                        sizes = new BoxSizes(cardsCount,
                                             GetUserOrDefaultSize(reader["box1_size"], defaultSizes.Sizes[1]),
                                             GetUserOrDefaultSize(reader["box2_size"], defaultSizes.Sizes[2]),
                                             GetUserOrDefaultSize(reader["box3_size"], defaultSizes.Sizes[3]),
                                             GetUserOrDefaultSize(reader["box4_size"], defaultSizes.Sizes[4]),
                                             GetUserOrDefaultSize(reader["box5_size"], defaultSizes.Sizes[5]),
                                             GetUserOrDefaultSize(reader["box6_size"], defaultSizes.Sizes[6]),
                                             GetUserOrDefaultSize(reader["box7_size"], defaultSizes.Sizes[7]),
                                             GetUserOrDefaultSize(reader["box8_size"], defaultSizes.Sizes[8]),
                                             GetUserOrDefaultSize(reader["box9_size"], defaultSizes.Sizes[9]),
                                             cardsCount);
                    }
                    else
                    {
                        sizes = defaultSizes;
                    }
                    reader.Close();
                }
                else
                {
                    sizes = defaultSizes;
                }

                Parent.CurrentUser.Cache[ObjectLifetimeIdentifier.Create(CacheObject.MaximalBoxSizes, Parent.CurrentUser.ConnectionString.LmId)] = sizes.Value;

                return(sizes.Value.Sizes[id]);
            }
        }
Esempio n. 14
0
        /// <summary>
        /// Creates a new user session.
        /// The old one will be automatically closed, in case of inconsistance data.
        /// </summary>
        /// <param name="lm_id">The lm_id.</param>
        /// <returns></returns>
        /// <remarks>Documented by Dev10, 2009-01-11</remarks>
        /// <remarks>Documented by Dev08, 2009-04-28</remarks>
        public int OpenUserSession(int lm_id)
        {
            //1. Check if the old session is closed
            bool     previousSessionExisting = false;
            DateTime?endtime         = null;
            int      latestSessionId = 0;

            SqlCeCommand cmd = MSSQLCEConn.CreateCommand(Parent.CurrentUser);

            cmd.CommandText = "SELECT * FROM LearningSessions WHERE lm_id=@lmid AND user_id=@userid ORDER BY starttime DESC";
            cmd.Parameters.Add("@lmid", lm_id);
            cmd.Parameters.Add("@userid", Parent.CurrentUser.Id);
            SqlCeDataReader reader = MSSQLCEConn.ExecuteReader(cmd);

            if (reader.Read())
            {
                previousSessionExisting = true;
                try
                {
                    latestSessionId = Convert.ToInt32(reader["id"]);
                    endtime         = Convert.ToDateTime(reader["endtime"]);
                }
                catch
                {
                    endtime = null;
                }
            }

            //2. Close the previous session, if it hasn't closed before (maybe cause of crash of ML)
            if (previousSessionExisting && !endtime.HasValue)
            {
                cmd.Parameters.Clear();
                cmd.CommandText = "UPDATE LearningSessions SET endtime=GETDATE() WHERE id=@id";
                cmd.Parameters.Add("@id", latestSessionId);
                MSSQLCEConn.ExecuteNonQuery(cmd);
            }

            //3. Add new session entry to DB
            cmd.Parameters.Clear();
            cmd.CommandText = "INSERT INTO LearningSessions (user_id, lm_id, starttime, sum_right, sum_wrong, pool_content, box1_content, box2_content, box3_content, " +
                              "box4_content, box5_content, box6_content, box7_content, box8_content, box9_content, box10_content)" +
                              "VALUES(@userid, @lmid, GETDATE(),  0, 0, @pool, @b1, @b2, @b3, @b4, @b5, @b6, @b7, @b8, @b9, @b10); SELECT @@IDENTITY;";
            cmd.Parameters.Add("@userid", Parent.CurrentUser.Id);
            cmd.Parameters.Add("@lmid", lm_id);
            int      counter      = 0;
            int      cardsInBoxes = 0;
            BoxSizes boxContent   = GetCurrentBoxContent();

            foreach (int box in boxContent.Sizes)
            {
                if (counter == 0)
                {
                    cmd.Parameters.Add("@pool", box);
                    ++counter;
                    continue;
                }

                cmd.Parameters.Add("@b" + Convert.ToString(counter++), box);
                cardsInBoxes += box;
            }

            int newSessionId = MSSQLCEConn.ExecuteScalar <int>(cmd).Value;

            //Following Statement does add the "RunningSession" = true to the current Statistic.
            MsSqlCeStatisticConnector connector = MsSqlCeStatisticConnector.GetInstance(Parent);

            connector.RunningSession = newSessionId;

            return(newSessionId);
        }