🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: alt.pl.comp.lang.csharp
Article #22458

MySQL - zapytanie co kilka sekund, co drugi wynik to NULL

#22458
From: Przemysław Jedynowicz
Date: Tue, 25 Dec 2012 22:10
88 lines
4083 bytes
Witam,

Tak dla treningu chciałem napisać prostego czata... Aplikacja z polem na wpisanie pokoju, usera, oraz wiadomości + jedna tabela w bazie przechowująca id|room|user|msg|timestamp. Ustawiłem timera by po 5 sekund ściągał 1000 ostatnich rekordów z tabeli i wyświetlał w czwartym textBoxie (właściwe okno rozmowy).

Do komunikacji z bazą danych używam klasy:

    class DBClass
    {
        private MySqlConnection mySqlCon = new MySqlConnection("Data Source=" + "ip.ip.ip.ip" + ";Port=3306;Database=" + "baza" + ";User ID=" + "user" + ";Password=" + "password");

        private Exception ConnectDB()
        {
            try
            {
                mySqlCon.Open();
            }
            catch (Exception ex)
            {
                return ex;
            }
            return null;
        }

        public MySqlDataReader QueryDBRead(string str)
        {
            if (ConnectDB() == null)
            {

                MySqlCommand mySqlCmd = new MySqlCommand(str, mySqlCon);

                MySqlDataReader mySqlReader = mySqlCmd.ExecuteReader();

                return mySqlReader;
            }
            mySqlCon.Close();
            return null;
        }

        public int QueryDBOther(string str)
        {
            if (ConnectDB() == null)
            {

                MySqlCommand mySqlCmd = new MySqlCommand(str, mySqlCon);

                int result = mySqlCmd.ExecuteNonQuery();

                return result;
            }
            mySqlCon.Close();
            return -1;
        }

    }

----

Przy trigerze z zegara wykonuję kod:

        private void timer1_Tick(object sender, EventArgs e)
        {
            
            data_read = baza.QueryDBRead("select * from pjedynow_chat.chat order by id desc LIMIT 0,1000");

//            if (data_read != null)
//            {
                textBox4.Text = "";
                while (data_read.Read())
                {
                    textBox4.Text += "<" + data_read.GetValue(1) + ">  " + data_read.GetValue(3) + "\r\n";
                }
//            }
        }
-----

Aplikacja się uruchamia, po 5 sekundach wyświetla "rozmowy", ale po kolejnych 5 sekundach wywala się... Jak do tej pory udało mi się sprawdzić wywala się ponieważ data_read przyjmuje wartość null. To co jest zakomentowane pozwala by aplikacja jakoś działała - pomija momenty gdy data_read==null.

Dwa pytania:
1. Dlaczego tak się dzieje?
2. Jak powinno się pisać komunikację w tego typu aplikacji, by można było w miarę szybko wymieniać dane z serwerem? U mnie za każdym razem łączę się na nowo z bazą... (komputer lokalny vs baza na hostingu)

Ps. Jeśli ktoś mógłby pomóc to mogę wystawić cały projekt w VS2012 EE na ftpie...


Pozdrawiam!
-- 
Przemysław Jedynowicz
"There's always another way - usually a better one!"
Technical Details
Message-ID: <84cd7aef-b8e9-4f19-9984-abf6fba1c487@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.glorb.com!ee4no2314124qab.0!news-out.google.com!k2ni2110qap.0!nntp.google.com!ee4no2314121qab.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail

Show Full Headers
Complete Article Headers
X-Received: by 10.224.205.65 with SMTP id fp1mr13064490qab.4.1356473428207;        Tue, 25 Dec 2012 14:10:28 -0800 (PST)
Received: by 10.49.81.72 with SMTP id y8mr3725316qex.42.1356473428192; Tue, 25 Dec 2012 14:10:28 -0800 (PST)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed.pionier.net.pl!news.glorb.com!ee4no2314124qab.0!news-out.google.com!k2ni2110qap.0!nntp.google.com!ee4no2314121qab.0!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: alt.pl.comp.lang.csharp
Date: Tue, 25 Dec 2012 14:10:28 -0800 (PST)
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=78.131.235.66; posting-account=2IlHBQoAAAAjNfMRwih3_kRVmdgdgnN3
NNTP-Posting-Host: 78.131.235.66
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <84cd7aef-b8e9-4f19-9984-abf6fba1c487@googlegroups.com>
Subject: MySQL - zapytanie co kilka sekund, co drugi wynik to NULL
From: Przemysław Jedynowicz <boryspower@gmail.com>
Injection-Date: Tue, 25 Dec 2012 22:10:28 +0000
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit