Как следить за последней строкой MySQL в C # - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь отслеживать последнюю строку базы данных Mysql, и когда она изменяется, я собираюсь отобразить сообщение, но я не уверен, как контролировать с помощью C #.

У меня уже была возможность время от времени запрашивать последнюю строку, но я хотел бы отобразить ее, только если она отличается от предыдущей

эта первая часть запускает мой счетчик вместе с загрузкой формы:

private void AnteSala_Load(object sender, EventArgs e)
        {
            var timer = new System.Timers.Timer
            {
                Interval = 2 * 60 * 1000,
                SynchronizingObject = this
            };
            timer.Elapsed += delegate
            {
                //MessageBox.Show(@"tentou update check 1");
                ReadInformationFromeMessage();
                //MessageBox.Show(@"passou 1");
            };
            timer.Start();
        }

эта вторая часть берет мое последнее сообщение из банка:

private void ReadInformationFromeMessage()
        {
            try
            {
                const string mySelectQuery =
                    "select * from send_eMessages order by id desc limit 1";
                var myCommand = new MySqlCommand(mySelectQuery, ConexaoBancoMySql.GetConexao());
                var reader = myCommand.ExecuteReader();

                while (reader.Read())
                {
                    var eMessage = (reader.GetString("eMessage"));

                    Invoke((MethodInvoker)delegate
                   {

                       var pop = new PopupNotifier
                       {
                           //escopo de mensagem
                           TitleText = "*  Informativo de Segurança  *",
                           ContentText = "" + eMessage,
                           //fim do escopo de mensagem
                           TitleFont = new Font("Tahoma", 12),
                           //cor do titulo do form
                           TitleColor = Color.White,
                           BodyColor = System.Drawing.Color.FromArgb(0, 75, 0),
                           //contorno do form
                           BorderColor = System.Drawing.Color.FromArgb(0, 255, 0),
                           //cor da fonte do aviso
                           ContentColor = System.Drawing.Color.FromArgb(255, 255, 255),
                           //tamanho da fonte
                           ContentFont = new System.Drawing.Font("Tahoma", 12F),
                           //cor da fonte do aviso quando mouse em cima
                           ContentHoverColor = System.Drawing.Color.FromArgb(255, 255, 255),
                           //centralizacao da mensagem no form 
                           ImagePadding = new Padding(0),
                           ContentPadding = new Padding(10),
                           Delay = 15000,
                           GradientPower = 150,
                           //tamanho da borda superior
                           HeaderHeight = 1,
                           Scroll = true,
                           ShowCloseButton = true,
                           ShowGrip = true,
                           ShowOptionsButton = false,

                       };
                        pop.Popup();
                   });
                }
            }
            catch (MySqlException ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                ConexaoBancoMySql.FecharConexao();
            }
       }

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

@amura.cxg, спасибо, я внес некоторые коррективы, и теперь все, кажется, работает очень хорошо, я оставляю здесь код для тех, кто нуждается и ищет день.

using System.Drawing;
using System.IO;
using System.Windows.Forms;
using eMessage.Classes;
using Tulpep.NotificationWindow;
using MySql.Data.MySqlClient;

namespace eMessage.Forms
{
    public partial class EMessageForm : MetroFramework.Forms.MetroForm
    {
        private int? _lastId;
        private const string MessageQuery = "SELECT * FROM eMessage ORDER BY id DESC LIMIT 1";
        private const string DataFilePath = "somefilename.ext";

/*
        private static string _eMessage1;
*/
        public EMessageForm()
        {
            InitializeComponent();

        }

        private void EMessageForm_Load(object sender, System.EventArgs e)
        {
            _lastId = ReadLastSeenId();

            var timer = new System.Timers.Timer
            {

                Interval = 100,
                SynchronizingObject = this,


            };
            timer.Elapsed += delegate
            {
                ReadInformationFromeMessage();
            };
            timer.Start();
        }
        private void ReadInformationFromeMessage()
        {
            try
            {
                var myCommand = new MySqlCommand(MessageQuery, ConexaoBancoMySql.GetConexao());
                var reader = myCommand.ExecuteReader();

                if (!reader.Read()) return;
                var currentId = reader.GetInt32("id");

                if (currentId == _lastId) return;
                _lastId = currentId;
                var eMessage = (reader.GetString("eMessage"));

                var pop = new PopupNotifier
                {
                    //escopo de mensagem
                    TitleText = "*  lastInfo  *",
                    ContentText = "" + eMessage,
                    //fim do escopo de mensagem
                    TitleFont = new Font("Tahoma", 12),
                    //cor do titulo do form
                    TitleColor = Color.White,
                    BodyColor = Color.FromArgb(0, 75, 0),
                    //contorno do form
                    BorderColor = Color.FromArgb(0, 255, 0),
                    //cor da fonte do aviso
                    ContentColor = Color.FromArgb(255, 255, 255),
                    //tamanho da fonte
                    ContentFont = new Font("Tahoma", 12F),
                    //cor da fonte do aviso quando mouse em cima
                    ContentHoverColor = Color.FromArgb(255, 255, 255),
                    //centralizacao da mensagem no form 
                    ImagePadding = new Padding(0),
                    ContentPadding = new Padding(10),
                    Delay = 15000,
                    GradientPower = 150,
                    //tamanho da borda superior
                    HeaderHeight = 1,
                    Scroll = true,
                    ShowCloseButton = true,
                    ShowGrip = true,
                    ShowOptionsButton = false,

                };
                pop.Popup();

                WriteLastSeenId(_lastId);
            }
            catch (MySqlException ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                ConexaoBancoMySql.FecharConexao();
            }
        }
        private static void WriteLastSeenId(int? id)
        {
            var rawValue = (id != null ? id.Value.ToString() : string.Empty);

            File.WriteAllText(DataFilePath, rawValue);
        }
        private static int? ReadLastSeenId()
        {
            int? id = null;

            if (!File.Exists(DataFilePath)) return null;
            var rawValue = File.ReadAllText(DataFilePath);

            if (int.TryParse(rawValue, out var temp))
            {
                id = temp;
            }

            return id;
        }
    }
}
0 голосов
/ 17 июня 2019

Если id изменяется каждый раз, когда в таблицу добавляется новое сообщение, вы можете отслеживать последнее просмотренное значение и отображать всплывающее окно, только если текущее значение id отличается от сохраненной версии.

Пример этого будет выглядеть примерно так:

public Class YourClass
{
    private int? lastId;
    private const string MESSAGE_QUERY = "SELECT * FROM send_eMessages ORDER BY id DESC LIMIT 1";
    private const string DATA_FILE_PATH = "somefilename.ext";

    private void AnteSala_Load(object sender, EventArgs e)
    {
        this.lastId = ReadLastSeenId();
         /*...Your Timer Code...*/
    }

    private void ReadInformationFromeMessage()
    {
        try
        {   
            var myCommand = new MySqlCommand(MESSAGE_QUERY, ConexaoBancoMySql.GetConexao());
            var reader = myCommand.ExecuteReader();

            if(reader.Read())
            {
                int currentId = reader.GetInt32("id");

                if(currentId != this.lastId)
                {
                    this.lastId = currentId;
                    var eMessage = (reader.GetString("eMessage"));

                    /*...Your Popup Code...*/

                    WriteLastSeenId(this.lastId);
                }
            }
        }
        catch (MySqlException ex)
        {
            MessageBox.Show(ex.ToString());
        }
        finally
        {
            ConexaoBancoMySql.FecharConexao();
        }
    }

    private static void WriteLastSeenId(int? id)
    {
        string rawValue = (id != null ? id.Value.ToString() : string.Empty);

        File.WriteAllText(DATA_FILE_PATH, rawValue);
    }

    private static int? ReadLastSeenId()
    {
        int? id = null;

        if(File.Exists(DATA_FILE_PATH))
        {
            string rawValue = File.ReadAllText(DATA_FILE_PATH);

            if (int.TryParse(inputString, out int temp))
            {
                id = temp;
            }
        }

        return id;
    }
}

Примечание: Я не проверял этот код, поэтому могут быть ошибки, но он должен дать вам представление о том, какВы могли бы пойти об этом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...