예제 #1
0
        private void EnsureInstall()
        {
            if (!installChecked)
            {
                lock (installLock)
                {
                    if (!installChecked)
                    {
                        using (var connMan = new MsSqlDbConnectionManager())
                            using (var cmd = connMan.OpenDBConnection.CreateCommand())
                            {
                                cmd.CommandText = "SELECT COUNT(*) FROM [INFORMATION_SCHEMA].[TABLES] WHERE [TABLE_NAME] = 'jdr_diceroll'";
                                object result = cmd.ExecuteScalar();

                                if (result == DBNull.Value || result.Equals(0))
                                {
                                    cmd.CommandText = @"CREATE TABLE [jdr_diceroll] ([DiceRollId] [int] NOT NULL, [Formula] VARCHAR(MAX) NOT NULL, [Result] VARCHAR(MAX) NOT NULL, CONSTRAINT [PK_jdr_diceroll] PRIMARY KEY CLUSTERED ([DiceRollId]))";
                                    cmd.ExecuteNonQuery();
                                }

                                installChecked = true;
                            }
                    }
                }
            }
        }
예제 #2
0
        private string GetOrCreateRollDice(int postId, string newFormula)
        {
            string previousResult  = null;
            string previousFormula = null;
            bool   isNew           = true;
            bool   changed;

            if (rollCache.TryGetValue(postId, out previousResult))
            {
                isNew           = false;
                previousFormula = rollFormulaCache[postId];

                if (previousFormula.Equals(newFormula, StringComparison.OrdinalIgnoreCase))
                {
                    return(previousResult);
                }
            }

            string newResult;

            using (var connMan = new MsSqlDbConnectionManager())
                using (var cmd = connMan.OpenDBConnection.CreateCommand())
                {
                    if (previousFormula == null)
                    {
                        // La formule n'est pas en cache, on vérifie si elle existe en base
                        cmd.CommandText = "SELECT [Result], [Formula] FROM [jdr_diceroll] WHERE [DiceRollId] = @Id";
                        cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@Id", System.Data.SqlDbType.Int)).Value = this.MessageID;

                        using (var reader = cmd.ExecuteReader())
                        {
                            if (reader.Read())
                            {
                                previousResult  = !reader.IsDBNull(0) ? reader.GetString(0) : null;
                                previousFormula = !reader.IsDBNull(1) ? reader.GetString(1) : null;
                                isNew           = false;
                            }
                            else
                            {
                                isNew = true;
                            }
                        }
                    }

                    if (isNew)
                    {
                        // Nouvelle formule ou nouveau message
                        newResult = this.GenerateResult(null, null, newFormula, out changed);
                        if (changed)
                        {
                            cmd.CommandText = "INSERT INTO jdr_diceroll (DiceRollId, Formula, Result) VALUES (@Id, @Formula, @Result)";

                            cmd.Parameters.Clear();
                            cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int)).Value          = postId;
                            cmd.Parameters.Add(new SqlParameter("@Formula", SqlDbType.VarChar)).Value = newFormula;
                            cmd.Parameters.Add(new SqlParameter("@Result", SqlDbType.VarChar)).Value  = newResult;
                            cmd.ExecuteNonQuery();
                        }
                    }
                    else
                    {
                        // Modification de la formule
                        newResult = this.GenerateResult(previousFormula ?? string.Empty, previousResult ?? string.Empty, newFormula, out changed);
                        if (changed)
                        {
                            cmd.CommandText = "UPDATE jdr_diceroll SET [Formula] = @Formula, [Result] = @Result WHERE [DiceRollId] = @Id";

                            cmd.Parameters.Clear();
                            cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int)).Value          = postId;
                            cmd.Parameters.Add(new SqlParameter("@Formula", SqlDbType.VarChar)).Value = newFormula;
                            cmd.Parameters.Add(new SqlParameter("@Result", SqlDbType.VarChar)).Value  = newResult;
                            cmd.ExecuteNonQuery();
                        }
                    }
                }

            if (changed)
            {
                rollCache[postId]        = newResult ?? string.Empty;
                rollFormulaCache[postId] = newFormula ?? string.Empty;
            }

            return(newResult);
        }