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