Forum

Sql verilerini data...
 
Bildirimler
Hepsini Temizle

Sql verilerini datagride atarken uzun sürmesi

15 Yazılar
4 Üyeler
0 Likes
3,691 Görüntüleme
(@aytacarslan)
Gönderiler: 799
Noble Member
Konu başlatıcı
 

Merhabalar sql içerisinde bir sorgu ile elde ettiğim verileri datagride atarken nedense çok uzun sürüyor. ama aynı sorguyu sql de yaparken saliseler sürmesiyle bende adım adım visual studio ile kodları inceledim. herşey hızlı bir şekilde ilerlerken sorgudan elde ettiğim verileri datatable atıyorum buraya kadar sorun yok. ne zaman datatable daki veriyi datagrid için datasource olarak gösteriyorum o anda sistemde 30-40 satırlık bilgi bile 10-15 sn sürüyor. hatta denemek için sql sunucuda bile denediğimde değişen bir şey olmadı yardımcı olursanız sevinirim.

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
//combobox ile seçim yaptığında olacaklar

{

try

{

SqlConnection sqlConn = new SqlConnection();
  //yeni bağlantı oluştu

SqlCommand sqCom = new SqlCommand();
 // yeni sql komut oluştu

DataTable dtProd = new DataTable();
  // boş bir datatable oluştu

SqlDataAdapter sqDa = new SqlDataAdapter();

//yeni bir bağlantı adaptörü oluştu

firma = comboBox1.SelectedItem.ToString();
  //firma isimli değişkene combobox tan atanan değeri verdim

sqlConn.ConnectionString = "Data Source =192.168.26.195; Initial Catalog =" + firma + "; Integrated Security =True; ";

  //bağlantı cümlem hazır

sqCom.Connection = sqlConn;
//komut bağlantı cümlesi atanıyor

sqCom.CommandText = "SELECT PROJE_KODU FROM TBLPROJE ORDER BY PROJE_KODU DESC";
  //çalışacak komut dizisi atandı

sqCom.CommandType = CommandType.Text;

//komutun atanması

sqlConn.Open(); //bağlantı açıldı

sqCom.ExecuteScalar();
//komut işledi

//dtProd.Clear();
  bu satır aktif olsada olmasada durum aynı

sqDa.SelectCommand = sqCom;
//adaptöre sonuç atanıyo

sqDa.Fill(dtProd);
//datatable adaptörden dönen sonuçla doluyor

sqlConn.Close();
//bağlantı koparılıyor

dataGridView1.DataSource = dtProd;
  //datagride veriler atanıyor bu satırı bağlantı kesilmeden önce yazsam bile sonuç aynı

}

teşekkürler

 
Gönderildi : 03/11/2011 20:24

(@ahmetaltuntas)
Gönderiler: 731
Prominent Member
 

---Kodu Kendine Göre Düzenle---

  SqlConnection con = new SqlConnection(
"Data Source =localhost; Initial Catalog =DataBase; Integrated Security =sspi;
");
SqlCommand cmd_VeriGetir = new SqlCommand(
"SELECT PROJE_KODU FROM TBLPROJE ORDER BY PROJE_KODU DESC"
,con);
con.Open();
SqlDataAdapter da_VeriGetir = new SqlDataAdapter(cmd_VeriGetir);
DataTable dt_VeriGetir = new DataTable();
da_VeriGetir.Fill(dt_VeriGetir);
dataGridView1.DataSource = dt_VeriGetir;
con.Close();

 
Gönderildi : 04/11/2011 12:12

(@aytacarslan)
Gönderiler: 799
Noble Member
Konu başlatıcı
 

sizin ilettiğiniz şekilde düzelttim fakat yine aynı şekilde 30 tane kayıdı dökmesi 7-8 sn sürüyor


 düzeltilmiş hali


private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)


        {


            firma = comboBox1.SelectedItem.ToString();


            try


            {


                SqlConnection sqlConn = new SqlConnection("Data Source =192.168.26.195; Initial Catalog =" + firma + "; Integrated Security =True; ");


                SqlCommand sqCom = new SqlCommand("SELECT PROJE_KODU FROM TBLPROJE ORDER BY PROJE_KODU DESC", sqlConn);


                sqlConn.Open();


                SqlDataAdapter sqDa = new SqlDataAdapter(sqCom);


                DataTable dtProd = new DataTable();


                sqDa.Fill(dtProd);


                dataGridView1.DataSource = dtProd;


                sqlConn.Close();


 

 
Gönderildi : 04/11/2011 14:41

(@ahmetaltuntas)
Gönderiler: 731
Prominent Member
 

farklı tablodan veri çekmeyi deneyebilirmisin , aynı sorun devam edecekmi kontrol edelim.

Ayrıca projeyi başka bir bilgisayar üzerinde çalıştırarak deneyebilirsin.

 
Gönderildi : 04/11/2011 15:49

(@aytacarslan)
Gönderiler: 799
Noble Member
Konu başlatıcı
 

yüzlerce kayıt bulunan bir tablodan veri çekiyorum yine yavaş, aynı işlemleri sql üzerinden yaptığımda hiç sorun yok ml saniyelerle dökülüyor. Farklı 3 adet makinede deniyorum. Değişen bir şey yok. kodlarımıda kontrol ediyorum sorun yok gibi. 4 farklı databese de aynı tablodan farklı verilerle çekmeye çalışıyorum. kaydı az olan hemen dökülüyor ama 10 ve üzeri olduğunda döküm işlemi 20 sn bile çıkabiliyor çok ilginç

 
Gönderildi : 04/11/2011 15:54

(@ahmetaltuntas)
Gönderiler: 731
Prominent Member
 

kullandıgınız grid devexpress degil dimi,standart grid kullanıyorsunuz.

aynı işlemi access veritabanı oluşturarak denemenizi tavsiye ederim.ayrıca listeleme işlemi esnasında görev yöneticisinden programı izleyin ram ve cpu kullanımını kontrol edin.

 
Gönderildi : 04/11/2011 16:24

(@Anonim)
Gönderiler: 0
 

Ahmet Beyin Dediği gibi kullandığınız grid gridview ise temasını iptal ederek tekrar deneyin,

Devexpressin gridviewı extra kullandığı zaman ilk yüklemede uzun süreler bekletebilir.

 
Gönderildi : 04/11/2011 16:40

(@aytacarslan)
Gönderiler: 799
Noble Member
Konu başlatıcı
 

abi standart datagridview toollardan direk ekledim.

 
Gönderildi : 04/11/2011 17:16

(@ahmetaltuntas)
Gönderiler: 731
Prominent Member
 

sanrım senin sql serverla baglantında sıkıntı var.baglantı uzun sürüyor olabilir;

connection string'e Connect Timeout=05; şeklinde ekleyip

try

{

conn.open();

}

catch(Exception ex)

{

Messagebox.show(ex.message);

}

şeklinde deneyebilirmisin.Eger hata vermezse bu süreyi dahada düşürerek dene..

 
Gönderildi : 04/11/2011 18:31

(@aytacarslan)
Gönderiler: 799
Noble Member
Konu başlatıcı
 

pooling=true; connection lifetime=10; connection timeout=5; packet size=1024;";
gibi diğer parametreleri bile denedim sonuç değişmiyor makinenin kendi üzerindede olsa farklı bir makinede olsa aynı şeyi yapıyor delirtti beni

 
Gönderildi : 04/11/2011 19:28

(@aytacarslan)
Gönderiler: 799
Noble Member
Konu başlatıcı
 

hatta connection time outu 1 sn bile düşürdüm hata vermeden veriyi table içine veriyor. sorun sql tarafında değil sanırım F11 ile bile adım adım gidiyorum bağlantıyı yaptığı makine üstünde derliyorum. sıkıntı sanki sql sorgusundan dönen veriyi datagride atarken oluyor.

 
Gönderildi : 04/11/2011 19:33

(@aytacarslan)
Gönderiler: 799
Noble Member
Konu başlatıcı
 

Kodu şu şekilde değiştirdim bayram bayram taktım kafaya arada kodlarla oynuyorum 😀 dikkat ettiğim program datagride kaynak olarak datatableyi gösterdiğim anda yavaşlıyor. diğer adımlarda sorun yok


private void button2_Click(object sender, EventArgs e)


{


try


{


SqlConnection sqlConn = new SqlConnection("Data Source=localhost; database=SUV; uid=sa; pwd=1q2w3e4r; pooling=true; connection lifetime=10; connection timeout=5; packet size=1024;");


SqlCommand sqCom = new SqlCommand("SELECT PROJE_KODU FROM TBLPROJE ORDER BY PROJE_KODU DESC", sqlConn);


sqlConn.Open();


MessageBox.Show("Bağlantı Açıldı");


SqlDataAdapter sqDa = new SqlDataAdapter(sqCom);


DataTable dtProd = new DataTable();


MessageBox.Show("adaptör ve datatabel tanımlandı");


sqDa.Fill(dtProd);


MessageBox.Show("data table dolduruldu adaptör ile");


dataGridView1.DataSource = dtProd; // işte bu kısımda uzun süre bekliyor !!!


MessageBox.Show("datagride kaynak gösterildi");


sqlConn.Close();


MessageBox.Show("Bağlantı Kapandı");

 
Gönderildi : 06/11/2011 15:59

(@RagipUNAL)
Gönderiler: 171
Estimable Member
 

iyi günler,

öncelikle sorgunucu store procedure ile sql de yazıp veriyi çekerkende exec procedure_adi sorgusuyla ile çekin.

2. si indexleme yapın örneğin aramaları id veya adi kolonlarında yapıyorsanız ona göre index tutturun sql e.

3. sık çektiğiniz ve sql in çok işlem yapmasına neden olacak sorguları view yazıp viewlarıda storage proc ile seçktirin. (en hızlısı bu galiba). view tablolarınız sql de sürekli hazır olduğu için sorgularınız müthiş bir hızla gelecektir.

4. yazdığınız kodun başına timer başlatıp. her basamakta timerdan geçen süreyi milisaniye olarak yazdırın. hangi basamakta yavaşlık çektiğini göreceksiniz.

 Denemelerinizin cevaplarını 4 gözle bekliyorum.

kolay gelsin iyi çalışmalar.

 
Gönderildi : 06/11/2011 22:30

(@ahmetaltuntas)
Gönderiler: 731
Prominent Member
 

Kodu şu şekilde değiştirdim bayram bayram taktım kafaya arada kodlarla oynuyorum 😀 dikkat ettiğim program datagride kaynak olarak datatableyi gösterdiğim anda yavaşlıyor. diğer adımlarda sorun yok

private void button2_Click(object sender, EventArgs e)

{

try

{

SqlConnection sqlConn = new SqlConnection("Data Source=localhost; database=SUV; uid=sa; pwd=1q2w3e4r; pooling=true; connection lifetime=10; connection timeout=5; packet size=1024;");

SqlCommand sqCom = new SqlCommand("SELECT PROJE_KODU FROM TBLPROJE ORDER BY PROJE_KODU DESC", sqlConn);

sqlConn.Open();

MessageBox.Show("Bağlantı Açıldı");

SqlDataAdapter sqDa = new SqlDataAdapter(sqCom);

DataTable dtProd = new DataTable();

MessageBox.Show("adaptör ve datatabel tanımlandı");

sqDa.Fill(dtProd);

MessageBox.Show("data table dolduruldu adaptör ile");

dataGridView1.DataSource = dtProd; // işte bu kısımda uzun süre bekliyor !!!

MessageBox.Show("datagride kaynak gösterildi");

sqlConn.Close();

MessageBox.Show("Bağlantı Kapandı");

 


Merhaba Dataset kullanmadan sorgunu şu şekilde deneyebilir misin?

SqlConnection sqlConn = new SqlConnection("Data Source=localhost; database=SUV; uid=sa; pwd=1q2w3e4r; pooling=true; connection lifetime=10; connection timeout=5; packet size=1024;");

SqlCommand sqCom = new SqlCommand("SELECT PROJE_KODU FROM TBLPROJE ORDER BY PROJE_KODU DESC", sqlConn);

sqlConn.Open();

SqlDataReader dr = 
sqCom.executereader();

while (dr.read())

{

Listbox1.items.add(dr["
PROJE_KODU
"].tostring());

}

dr.close();

 
Gönderildi : 07/11/2011 18:06

(@aytacarslan)
Gönderiler: 799
Noble Member
Konu başlatıcı
 

sonuç ne yaparsam yapayım değişmedi. fakat bu kod seçimimizden hangisiyle yeni bir proje oluşturup çalıştırsam gayet tatminkar hızda çalıştı. sanırım üzerinde çalıştığım projede bir sorun var. tek tek inceleyeceğim. sildiğim fakat izleri kalan bazı objeleri tamamen temizlemeye başladım. sanırım biraz dağınık çalışıyorum onunda etkisi olmuş 😀

 
Gönderildi : 13/11/2011 02:46

Paylaş: