Article View: alt.pl.comp.lang.csharp
Article #22458MySQL - zapytanie co kilka sekund, co drugi wynik to NULL
From: Przemysław Jedynowicz
Date: Tue, 25 Dec 2012 22:10
Date: Tue, 25 Dec 2012 22:10
88 lines
4083 bytes
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-mailShow 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