Yazar |
|
serseru
Kayıt: 12.07.2009 |
|
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
Kayıt: 30.01.2006 |
|
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
Kahramanmaras
admin
Kayıt: 24.10.2006 |
|
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
Istanbul
Kayıt: 19.01.2007 |
|
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
|
|
Yazar |
|
emre
Kayıt: 26.01.2007 |
|
pardon yanlış konuya yazdım silmeyide bulamadım
|
|
Yazar |
|
serseru
Kayıt: 12.07.2009 |
|
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
Istanbul
Kayıt: 19.01.2007 |
|
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
Kayıt: 12.07.2009 |
|
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 yine yani son eklenen 1o kaydı ekliyor ve duyor öyle
|
|
Yazar |
|
aliprinter
İstanbul
Kayıt: 12.02.2006 |
|
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
|
|
| | | | | |