Konuyu görüntüle
IUCODERS FORUM > Programlama > .NET > Veritabanına eklenen son kayıtları listviewda görüntülemek
Yazar
serseru


avatar

Kayıt: 12.07.2009
16.02.2010-00:13 #66977
sql serverda bir tane tablom var. Program çalışmaya başlayınca tabloya belirli aralıklarla yeni kayıtlar ekleniyor

tablodaki kaydın tarihini programın çalışma saatiyle karşılaştırıyorum. Son eklenenleri bulmak için bulmak için sql sorgumda bu

"SELECT x, y, z FROM Table WHERE db_added_time >= getdate()";
db_added_time : kaydın veritabanına ekleme süresi

fonksiyonun içide bu;?*

SqlDataReader dr;
dr = db_comm.ExecuteReader();

//while (true)
//{
while(dr.Read())
{
ListViewItem packetItem = new ListViewItem();

packetItem.SubItems.Add(dr["x"].ToString());
packetItem.SubItems.Add(dr["y"].ToString());
packetItem.SubItems.Add(dr["z"].ToString());
listView1.Items.Add(packetItem);

}

sürekli bekleme halinde herhangi bir kayıt eklendiği zaman bunu listeye ekleme işlemini yapamadım.

Veritabanından veriyi okuduğum yeri sonsuz döngüye aldım, o zamanda döngüden çıkamıyor.
bilgisayar kitleniyor.

nasıl yapmacam bunu





Yazar
fealin


avatar

Kayıt: 30.01.2006
16.02.2010-00:43 #66978
tavsiyem sorgudan dönen kayıtların hepsini bir datatable a at böylece bilgileri tek seferde çekmiş olursun tekrar tekrar veritabanına bağlanmazsın bu yazdığın uygulamayı hızlandırır daha sonrasında da şu şekilde kayıtlara teker teker ulaşabilirsin:

string temp="";
foreach (datarow dr in datatable.Rows)
{
temp = dr["x"].toString() + dr["y"].toString() + dr["z"].toString();
}

gibi





there is no emotion; there is peace
there is no ignorance; there is knowledge
there is no passion; there is serenity
there is no chaos; there is harmony
there is no death: there is the force
Yazar
extreme


avatar
Kahramanmaras
admin
Kayıt: 24.10.2006
16.02.2010-01:06 #66979
her döngüde sorguyu tekrar çekip bi süre bekletmelisin sistemi. dr nesnesi sadece "dr = db_comm.ExecuteReader();" komutu ile üzerine veri alır. Yeni eklendiğinde veritabanına bu değişkende bi değişiklik olmaz.





The Man Who Loved Algorithm&Ubuntu.
www.burakamasyali.com





Yazar
hazakli


avatar
Istanbul
Kayıt: 19.01.2007
16.02.2010-03:34 #66982
Belli bir zaman aralığına göre sürekli bir işlem yapmak istiyorsan "threading" kullan, işini çözer.

Google'da kullanımıyla ilgili detayları bulabilirsin peace





Yazar
emre


avatar

Kayıt: 26.01.2007
16.02.2010-06:52 #66983
pardon yanlış konuya yazdım silmeyide bulamadım
















Yazar
serseru


avatar

Kayıt: 12.07.2009
16.02.2010-07:15 #66985


while (true)
{

System.Threading.Thread.Sleep(60000);
SqlDataReader dr;
dr = db_comm.ExecuteReader();

if(dr.Read())
{
ListViewItem packetItem = new ListViewItem();

packetItem.SubItems.Add(dr["x"].ToString());
packetItem.SubItems.Add(dr["y"].ToString());
packetItem.SubItems.Add(dr["z"].ToString());
listView1.Items.Add(packetItem);

}
}

bu şekilde düzenledim çalıştırmadan önce galiba 1 dakika bekliyor. döngüye her girişte tekrar exeute ediyorum ama hala kitleniyor.

c# thread olaylarına bakiyim bide





Yazar
hazakli


avatar
Istanbul
Kayıt: 19.01.2007
16.02.2010-10:17 #66988
serseru yazdi
 


while (true)
{

System.Threading.Thread.Sleep(60000);
SqlDataReader dr;
dr = db_comm.ExecuteReader();

if(dr.Read())
{
ListViewItem packetItem = new ListViewItem();

packetItem.SubItems.Add(dr["x"].ToString());
packetItem.SubItems.Add(dr["y"].ToString());
packetItem.SubItems.Add(dr["z"].ToString());
listView1.Items.Add(packetItem);

}
}

bu şekilde düzenledim çalıştırmadan önce galiba 1 dakika bekliyor. döngüye her girişte tekrar exeute ediyorum ama hala kitleniyor.

c# thread olaylarına bakiyim bide



Thread'in kullanımı bu şekilde değil. Biraz daha araştır bu konuyu.
Burada herhangi bir döngü kullanmayacaksın. Sadece bir fonksiyonun olacak, bu fonksiyonda veritabanını sadece bir defa okuyacak ve son kayıtları alacaksın. Ama thread kullanarak bu fonksiyonu belirli aralıklarla çalıştırmış olacaksın.


Örnek:

using System.Threading;

public void GetNewRecords()
{
//veritabanında okuma işlemleri...
Thread.Sleep(60000);
}

Bu kısmı bir eventta çağıracaksın... :
t = new Thread(new ThreadStart(GetNewRecords));
t.Start();









Yazar
serseru


avatar

Kayıt: 12.07.2009
16.02.2010-23:28 #67001
hocam thread baktım biraz, dediğn gibi thread fonksiyonu içinde tek sorguyu çağırıyorum.
thread fonksiyonun içindeki sorguda şu şekilde. son eklenen 10 kaydı al şeklinde

select top 10 x, y, z from table order by db_added_time DESC

Şuda thread oluşturma ve çağırma kısmı

System.Windows.Forms.Form.CheckForIllegalCrossThreadCalls = false;
Thread threadForList = new Thread(new ThreadStart(list_add_function));
threadForList.Start();

ama bi kez yazıyor yinethinking yani son eklenen 1o kaydı ekliyor ve duyor öyle





Yazar
aliprinter


avatar
İstanbul
Kayıt: 12.02.2006
17.02.2010-00:26 #67003
Timer da kullanabilirsin. Intervalini milisaniye cinsinden ayarla, Tick olayına belirli aralılarla yapmak istediğin işi yazarsın.

Ya da ayrı bir thread üzerinden işlem görmesi için BackgroundWorker componentinden de faydalanabilirsin.





Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb