Forum
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
---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();
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();
farklı tablodan veri çekmeyi deneyebilirmisin , aynı sorun devam edecekmi kontrol edelim.
Ayrıca projeyi başka bir bilgisayar üzerinde çalıştırarak deneyebilirsin.
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ç
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.
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.
abi standart datagridview toollardan direk ekledim.
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..
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
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.
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ı");
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.
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();
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ş 😀