Beispiel #1
0
        /// <summary>
        /// Creates the sql for an achievement. The sql is stored as a list of sql operation to perform.
        /// </summary>
        /// <param name="a">The achievement.</param>
        /// <param name="DJID">The DJ's ID.</param>
        /// <param name="sql">Out string that represents the sum of all sql statement.</param>
        /// <param name="sqlCommands">List of sql commands that must be run to determine who qualifies for the achievement.</param>
        /// <returns></returns>
        public static ExpResponse CreateAchievementSQL(Achievement a, int DJID, out string sql, out List<SqlCommand> sqlCommands)
        {
            List<SqlCommand> commands = new List<SqlCommand>();
            ExpResponse r = new ExpResponse();
            SqlCommand cmd;
            sql = string.Empty;
            sqlCommands = new List<SqlCommand>();
            foreach (AchievementSelect achieveSel in a.selectList)
            {
                r = CreateStatementGeneric(achieveSel, DJID, out cmd);
                if (r.error)
                    return r;
                sqlCommands.Add(cmd);
                sql += CreateDebugSQLText(cmd) + "\n";
            }

            return r;
        }
Beispiel #2
0
        /// <summary>
        /// Add an achievement to the list of DJ achievements stored in the server.
        /// If the achievement is invalid, an error is returned.
        /// </summary>
        /// <param name="achievement">The achievement to add.</param>
        /// <param name="DJKey">The DJKey for the venue.</param>
        /// <returns>The outcome of the operation.</returns>
        public Response DJAddAchievement(Achievement achievement, long DJKey)
        {
            int DJID = -1;
            using (DatabaseConnectivity db = new DatabaseConnectivity())
            {
                // Try to establish a database connection
                Response r = db.OpenConnection();
                if (r.error)
                    return r;

                // Convert the DJKey to a DJID
                r = DJKeyToID(DJKey, out DJID, db);
                if (r.error)
                    return r;

                foreach(AchievementSelect a in achievement.selectList)
                {
                    if (a.startDate.Year < 1754)
                    {
                        a.startDate = new DateTime(1900, 1, 1);
                    }
                }

                string sqlText;
                List<SqlCommand> cmds;
                r = AchievementParser.CreateAchievementSQL(achievement, DJID, out sqlText, out cmds);
                if (r.error)
                    return r;

                r = db.DJAddAchievement(DJID, achievement);
                if (r.error)
                    return r;

                achievement.ID = r.result;

                r = Common.EvaluateAchievement(DJID, achievement, db);
                if (r.error)
                    return r;

                r.message = achievement.ID.ToString();
                r.result = achievement.ID;
                return r;
            }
        }
        internal ExpResponse DJModifyAchievement(int DJID, Achievement achievement)
        {
            ExpResponse r = new ExpResponse();
            try
            {
                MemoryStream streamAchievement = new MemoryStream();
                DataContractSerializer achievementSerializer = new DataContractSerializer(typeof(Achievement));
                achievementSerializer.WriteObject(streamAchievement, achievement);
                byte[] serializedAchievementBytes = streamAchievement.ToArray();

                SqlCommand cmd = new SqlCommand("update Achievements set Object = @achievement, Name = @name, ObjectSize = @achievementSize, Visible = @visible where ID = @achievementID and DJID = @DJID;", con);
                cmd.Parameters.AddWithValue("@achievement", serializedAchievementBytes);
                cmd.Parameters.AddWithValue("@name", achievement.name);
                cmd.Parameters.AddWithValue("@achievementSize", serializedAchievementBytes.Length);
                cmd.Parameters.AddWithValue("@visible", Common.GetBitFromBool(achievement.visible));
                cmd.Parameters.AddWithValue("@achievementID", achievement.ID);
                cmd.Parameters.AddWithValue("@DJID", DJID);

                r.result = int.Parse(cmd.ExecuteScalar().ToString());
                return r;
            }
            catch (SqlException e)
            {
                r.setAll(true, "SQLException in DBDJModifyAchievement number: " + e.Number + " " + e.Message, e.StackTrace, e.Number);
                return r;
            }
            catch (Exception e)
            {
                r.setErMsgStk(true, "Exception in DJModifyAchievement: " + e.Message, e.StackTrace);
                return r;
            }
        }
        internal ExpResponse DJAddAchievement(int DJID, Achievement achievement)
        {
            MemoryStream streamAchievement = new MemoryStream();
            DataContractSerializer achievementSerializer = new DataContractSerializer(typeof(Achievement));
            achievementSerializer.WriteObject(streamAchievement, achievement);
            byte[] serializedAchievementBytes = streamAchievement.ToArray();

            ExpResponse r = new ExpResponse();
            SqlCommand cmd = new SqlCommand("insert into Achievements (DJID, Object, Name, ObjectSize, Visible) values (@DJID, @achievement, @name, @objectSize, @visible); SELECT SCOPE_IDENTITY();", con);
            cmd.Parameters.AddWithValue("@DJID", DJID);
            cmd.Parameters.AddWithValue("@achievement", serializedAchievementBytes);
            cmd.Parameters.AddWithValue("@name", achievement.name);
            cmd.Parameters.AddWithValue("@objectSize", serializedAchievementBytes.Length);
            cmd.Parameters.AddWithValue("@visible", Common.GetBitFromBool(achievement.visible));

            try
            {
                r.result = int.Parse(cmd.ExecuteScalar().ToString());
                return r;
            }
            catch (SqlException e)
            {
                if (e.Number == 2601)
                    r.setAll(true, "An achievement with that name already exists, please choose a new name.", e.StackTrace, e.Number);
                else
                    r.setErMsgStk(true, "Exception in DJAddAchievement: " + e.Message, e.StackTrace);
                return r;
            }
            catch (Exception e)
            {
                r.setErMsgStk(true, "Exception in DJAddAchievement: " + e.Message, e.StackTrace);
                return r;
            }
        }