Yazar |
|
aliolci
en dipten taa derind
Kayıt: 19.01.2006 |
|
enginkdal yazdi | mrb arkadaşlar. benim yaptığım projede iki tane aynı sayfa yaptım.
birincede datalistleri otomatik olarak datasorcunu eklemiş durumdayım. diğerinde ise butuna tıklayınca verileri çekip dataliste atıyorum. otomatik olarak bağladığım sayfa daha hızlı çalışıyor sizce hangisi daha hızlı. yani ototmaik olarak bağlamak mı yoksa butuna tıklayınca verileri datalist içine atmak mı daha mantıklı???? |
Otomatik bağladım derken sanırım sayfanda bir datasource kontrolü var ve sen buna bir data list bağlamışsın. bu durumda sayfa her postback olduğunda(yenilendiğinde) datasource kontrolün veritabanına bağlanıp veriçeker ve datalistin databound eventinde dataliste bağlanır. Eğer sen linkbuttonun onclick event inde datasource una tekrar databind yapmasını söylüyorsan bu olay veritabanına 2 kez bağlanmaya neden olur çünkü datasource kontrol herzaman default sql sorgusuyla sayfa postback olduğunda mutlaka veritabanından veri çeker.
Tavsiyem: datasource kontrolünü kullanmak yerine veriyi kendin bir datatable a doldurup datalistine bağlaman bu konuda internetten kaynak bulabilirsin.
| bir de benim anlamaıdğım. bir sorun daha var. linkbutunlara tıklayınca sürekli olarak sayfa kendini yenileyip sonra listeliyor. kendini yenilemeden listeleme yapma imkanı yok mu acaba.
|
asp.net sayfası yaşam döngüsüne göre sayfa herpost back olduğunda çeşitli durumlara göre eventler tetiklenir. bu eventler arasında Init PageLoad PageLoadComplete,Render,PreRender gibi yada kontrollerin kendine özel Onclick , OnSelectedIndexChange, gibi eventleri tetiklerin postback olay tüm pageeventlerini otomatik olarak tetikler (PageLoad,PageLoadComplete vs) LinkButtonun OnClick Eventi Sayfayı postback ettiğinden aynı şekilde tüm pageEventlerini tetikler ve çalıştırır.
Şimdi sorunun iki çözümü var
1.Eğer sayfanda psotback sırasında calıştırmak Istemediğin ksıımlar varsa oralara If(!IsPostBack) kontrolü koyarak postback değilse çalışmalarını sağlayabilirsin ancak bu sayfanın refresh olmasını engellemez
2. Ajax Update panel kullanman : UpdatePanel içindeki bölüm refresh edilir diğer bölümler olduğu gibi kalır. Ajax ile ilgili bilgi asp.net sitesinden edinebilirsin
Cant you see the writing on the wall?
"die young gonna die young"
So! Live for today
Tomorrow never comes..
|
|
Yazar |
|
enginkdal
Kayıt: 09.01.2008 |
|
aliolci yazdi |
Otomatik bağladım derken sanırım sayfanda bir datasource kontrolü var ve sen buna bir data list bağlamışsın. bu durumda sayfa her postback olduğunda(yenilendiğinde) datasource kontrolün veritabanına bağlanıp veriçeker ve datalistin databound eventinde dataliste bağlanır. Eğer sen linkbuttonun onclick event inde datasource una tekrar databind yapmasını söylüyorsan bu olay veritabanına 2 kez bağlanmaya neden olur çünkü datasource kontrol herzaman default sql sorgusuyla sayfa postback olduğunda mutlaka veritabanından veri çeker.
Tavsiyem: datasource kontrolünü kullanmak yerine veriyi kendin bir datatable a doldurup datalistine bağlaman bu konuda internetten kaynak bulabilirsin.
|
DATAtable at derken ben zaten datasete atarak bağlıyorum
kodum şu şekilde
private void listele(string sorgum,DataList dtlist)
{
OleDbConnection co = new OleDbConnection(bag_str);
co.Open();
OleDbCommand ko = new OleDbCommand(sorgum, co);
ko.ExecuteNonQuery();
OleDbDataAdapter adp = new OleDbDataAdapter(ko);
DataSet da = new DataSet();
adp.Fill(da);
dtlist.DataSource = da;
dtlist.DataBind();
co.Close();
}
burada linkbutuna tıklayınca sorguyu ve hangi datalisti dolduracağımı gonderiyorum. ve verileri datasetin içine atıyroum. dataset ile datatable arasında da pek bir fark olduğunu sanmıyorum.
tabi datatableden kastın başka birşeyse o ayrı.
cevaplarınız için teşkeküerlerimi sunarım arkadaşlar.
B?ZLER PAZARLiK DEGiL MEZARLIK DOSTLARIYIZ.
|
|
Yazar |
|
aliolci
en dipten taa derind
Kayıt: 19.01.2006 |
|
enginkdal yazdi | aliolci yazdi |
Otomatik bağladım derken sanırım sayfanda bir datasource kontrolü var ve sen buna bir data list bağlamışsın. bu durumda sayfa her postback olduğunda(yenilendiğinde) datasource kontrolün veritabanına bağlanıp veriçeker ve datalistin databound eventinde dataliste bağlanır. Eğer sen linkbuttonun onclick event inde datasource una tekrar databind yapmasını söylüyorsan bu olay veritabanına 2 kez bağlanmaya neden olur çünkü datasource kontrol herzaman default sql sorgusuyla sayfa postback olduğunda mutlaka veritabanından veri çeker.
Tavsiyem: datasource kontrolünü kullanmak yerine veriyi kendin bir datatable a doldurup datalistine bağlaman bu konuda internetten kaynak bulabilirsin.
|
DATAtable at derken ben zaten datasete atarak bağlıyorum
kodum şu şekilde
private void listele(string sorgum,DataList dtlist)
{
OleDbConnection co = new OleDbConnection(bag_str);
co.Open();
| OleDbCommand ko = new OleDbCommand(sorgum, co);
ko.ExecuteNonQuery();
OleDbDataAdapter adp = new OleDbDataAdapter(ko);
DataSet da = new DataSet();
adp.Fill(da); |
dtlist.DataSource = da;
dtlist.DataBind();
co.Close();
}
burada linkbutuna tıklayınca sorguyu ve hangi datalisti dolduracağımı gonderiyorum. ve verileri datasetin içine atıyroum. dataset ile datatable arasında da pek bir fark olduğunu sanmıyorum.
tabi datatableden kastın başka birşeyse o ayrı.
cevaplarınız için teşkeküerlerimi sunarım arkadaşlar. |
kodunda i çalıştırmana gerek yok çünkü dataadapter in Fill fonksiyonu databaseden sorguyu ceker ve data table a doldurur sen yukarıdaki kodunda 2 kez database e aynı sorguyu gönderiyorsun fonksiyonu sorguyu calıştırıyor ancak sonucunuhiç bir yere bağlamıyor bu fonksyion ADO da daha cok insert delete update gibi sorgularda yani geri dönüş değeri onemsizsorgularda kullanılır
Cant you see the writing on the wall?
"die young gonna die young"
So! Live for today
Tomorrow never comes..
|
|
Yazar |
|
enginkdal
Kayıt: 09.01.2008 |
|
aliolci yazdi
kodunda i çalıştırmana gerek yok çünkü dataadapter in Fill fonksiyonu databaseden sorguyu ceker ve data table a doldurur sen yukarıdaki kodunda 2 kez database e aynı sorguyu gönderiyorsun fonksiyonu sorguyu calıştırıyor ancak sonucunuhiç bir yere bağlamıyor bu fonksyion ADO da daha cok insert delete update gibi sorgularda yani geri dönüş değeri onemsizsorgularda kullanılır
[/quote]
evet haklısın unutmuşum onu. iki sefer çalıştıyorum teşkekkür ettim sağol.
B?ZLER PAZARLiK DEGiL MEZARLIK DOSTLARIYIZ.
|
|
Yazar |
|
offman
Kayseri
Kayıt: 20.01.2006 |
|
Arkadaşlar gerektiği kadar anlatmışlar ama benimde eklemek istediğim bir kaç konu var. Bu yaz başına kadar DataTable benimde vazgeçilmezimdi ama yapı içerisinde genel manada bir çok şey
( Kullanmadığın şeyler olduğu için) DataTable yerine Database deki her tablo yu .Net tarafında bir class ile tasvir etmen gerektiğini dusunuyorum veriyide çekince List<tablo_adı> şeklinde çekersen IIS deki yükü kaldırmış olursun çünki diğer durumda gerçekden çok fazla veriyle IIS in kafasını karıştırıyorsun.
Bu noktadan sonra eklemek istediğim ise eğer sen bir listeleme sayfası yapıyorsan burada mutlaka ve mutlaka bir paging yapısı tasarlaman lazım yani eğer 100 200 tane veri grubu çekiyorsan pek bir şey fark etmediğini dusunebilirsin ama diyelim ki 1000 ve üzeri veri çekiyorsun o durumda explorer'ın donduğunu gorebilirsin :)
Özetleyecek olursak;
1:Bir projede Data Access Layer diye bir katman olacaksa mutlaka ve mutlaka Database i class mantığını kullanarak .Net'e geçirmen lazım.
2:Generics yapısını(List) yapısını bir incele gerçekden işin koptuğu nokta orası.
3:Listeleme sayfalarının olmazsa olmazı Paging mekanizmalarıdır...
Kolay gelsin.
331. KSD
*.NET DEVELOPER
|
|
Yazar |
|
tarikkranda
Kayıt: 07.01.2006 |
|
offman yazdi | Arkadaşlar gerektiği kadar anlatmışlar ama benimde eklemek istediğim bir kaç konu var. Bu yaz başına kadar DataTable benimde vazgeçilmezimdi ama yapı içerisinde genel manada bir çok şey
( Kullanmadığın şeyler olduğu için) DataTable yerine Database deki her tablo yu .Net tarafında bir class ile tasvir etmen gerektiğini dusunuyorum veriyide çekince List<tablo_adı> şeklinde çekersen IIS deki yükü kaldırmış olursun çünki diğer durumda gerçekden çok fazla veriyle IIS in kafasını karıştırıyorsun.
Bu noktadan sonra eklemek istediğim ise eğer sen bir listeleme sayfası yapıyorsan burada mutlaka ve mutlaka bir paging yapısı tasarlaman lazım yani eğer 100 200 tane veri grubu çekiyorsan pek bir şey fark etmediğini dusunebilirsin ama diyelim ki 1000 ve üzeri veri çekiyorsun o durumda explorer'ın donduğunu gorebilirsin :)
Özetleyecek olursak;
1:Bir projede Data Access Layer diye bir katman olacaksa mutlaka ve mutlaka Database i class mantığını kullanarak .Net'e geçirmen lazım.
2:Generics yapısını(List) yapısını bir incele gerçekden işin koptuğu nokta orası.
3:Listeleme sayfalarının olmazsa olmazı Paging mekanizmalarıdır...
Kolay gelsin. |
Gökhan selam:)
Ben de şunları ekleyeyim o zaman:) Yazın herhalde ORM veya Domain Driven Design ile proje geliştiren bir yerlere takıldın:) Eminim faydalı olmuştur. ORM i çok sevmeyen birisi olarak şunları söyleyebilirim. Yeni ado.net ile ki artık eski, datatable çok daha hafif bir container. Ayrıca dönen her bir record için bir nesnenin instance ını yaratırsan her kayır için yaratacagın nesne bir yuk getirir sisteme:) IIS in kafası veri ile karışmaz:) Çünkü her iki durumda da gelen veri aynı, ister sınıfları bir listede tut, istersen datatable da:) zaten IIS veri ile ugrasmıyor, ugrasan aspnet worker process. Oda düz veriyi getiriyor, sen bunu ister table a koyarsın istersen sınıf listesine:)
Diger taraftan madem hızdan bahsediliyor, en onemli noktayı atlamıs herkes. O da caching. Cache ile yatıp, cache ile kalkması lazım her developer ın bir süre:) O Ali nin de bahsettigi hazır .net sqldatasource nesnesi belki cacheleme kullanıyordur ama cache expiration ı nasıl yönetiyordur bilemiyorum, hiç kullanmadım, kullanmam da muhtemelen:) Klasik MS demo kontrolleri:)
Veritabanı Indeksleri de inanılmaz önemli bu arada. Duzgun bir DB normalizasyonu ve indeksiniz yoksa, uygulama tarafında nitro tuşuna da bassanız, işe yaramaz, şanzımanıi dağıtırsınız:))
|
|
|
|
-
Del.icio.us
-
Digg
-
Facebook
-
Furl
-
Google
-
Blink
-
Simpy
-
Spurl
-
Y! MyWeb
|
|
| | |