Giriş
(7)

ASP.NET & C# ile ilgili bir soru

falanca
Merhaba. Şimdi bir form'un codebehind'ında, başka bir .cs dosyasında tanımlanan bir SqlDataAdapter fonksiyonundan gelen data adaptör var. bu data adaptör commandbuilderla oluşuyor ve form içerisinde bu fonksiyonu çağırıyorum ve o data adaptörü kullanıyorum. form içerisinde her fonksiyon bu gelen dat
Merhaba.
Şimdi bir form'un codebehind'ında, başka bir .cs dosyasında tanımlanan bir SqlDataAdapter fonksiyonundan gelen data adaptör var. bu data adaptör commandbuilderla oluşuyor ve form içerisinde bu fonksiyonu çağırıyorum ve o data adaptörü kullanıyorum.

form içerisinde her fonksiyon bu gelen data adaptörü görsün diye de, data adaptörü ve dataseti en başta public olarak tanımladım. ama sadece public olarak tanımladığım zaman sayfa refresh filan olduğunda bu dataset filan resetleniyor galiba. çünkü "dt null'dur" gibi bir erör alıyorum.

Bunun üzerine data adaptörü ve dataseti public static yaptım. böyle olduğu zaman da sayfayı açan adam dataseti dataadaptörü dolduracak, ama bunlar static olduğu için aynı sayfayı açan başka bir adam o dataseti görecek. bunun olmasını istemiyorlar.

yani gelen data adaptörü, sadece o sessionı açan adamın görmesi nasıl mümkündür?

anlatamadıysam daha açık nasıl anlatabileceğimi söylerseniz ona göre cevap verebilirim. teşekkürler.
0
falanca
(16.01.09)
tam anlamadım ama Session["Data"] = myDataset; diğer sayafada da Dataset ds = (Dataset)Session["Data"]; gibi bişey işinizi görmez mi?
0
dinomazu
(16.01.09)
hayır çünkü session kullanmamı istemiyorlar. ehu
0
🌸falanca
(16.01.09)
örnek kod gönderebilir misiniz? dataseti nerede yarattınız, nerede set ettiniz falan gibi?
0
dinomazu
(16.01.09)
datasette değişiklik yapıyorsan acceptChanges() methoduyla değişikliğin,tanımladığın değişkenin kapasitesine göre kalıcı olmasını, ikide bir uçmamasını sağlayabilirsin.

ayrıca datasete veri dolduran fonksiyonu dataadapter değil de dataset return eden bir fonksion olarak ayarlarsan ve ihtiyacın olduğu zaman yukarıda tanımladığın datasete eşitlersen. her seferinde dataadapter tanımlamaktan kurtulursun sanki.
0
sunay
(16.01.09)
--form dosyası---

using Foo.Object;

namespace Foo
{
public partial class Form1 : System.Web.UI.Page
{
public static SqlDataAdapter adap;
public static DataTable dt;

.
.
.

public void TreeViewOlustur()
{
ObjyTanimlari a = new ObjyTanimlari();
dt = new DataTable();
adap = a.DataAdpTumTablo();
adap.Fill(dt);
TreeViewDoldur(dt);
}

.
.
.
}
}

---diğer dosya---

namespace Foo.Object
{
public class ObjyTanimlari
{
public SqlDataAdapter DataAdpTumTablo()
{
SqlConnection conn = DbConnections.CreateConnection();

SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM FOOTANIM", conn);
SqlCommandBuilder cb = new SqlCommandBuilder(da);

return da;
}
}
}



Sorarken hep dataset demişim Datatablemış.
ikinci kısımdaki dataadaptörü ben yazmadım. ama gayet kullanmamı istiyorlar.
dt = new datatable(); satırını en yukarıda yazmayı denediğimde de olmadı. static kullanmadan dt'ye null diyor.
0
🌸falanca
(16.01.09)
@sunay

dataset değil de dataadaptör döndürmesinin sebebi o adaptörü form güncellendikçe commandbuilder yardımıyla güncellemek istediğimizden.

hatalı bir davranış mı yoksa?

buradaki amaç "datatable paso baştan dolmasın, commandbuilder sayesinde sadece değişiklik yapılan kısımları database'e gitsin." idi.

yoksa tamamen saçmalamış mıyım? :o
0
🌸falanca
(16.01.09)
istediğin kadar public/private vs. vs. tanımlayın, o obje Session'a alınmadıkça uçar. Çünkü web teknolojisi stateless çalışır. Yani arkaya bağlanır, işini yapar, bırakır geri döner. .NET'in buna karşı buludğu çözüm ise objeleri hash'leyip response olarak kullanıcının browser'ına geri gönderir. Zaten bir aspx'in source'unu açıp bakarsanız, hidden bir input bulunur (__VIEWSTATE) ve değeri fantastiktir. İşte bu __VIEWSTATE içerisinde Session objeleri ve .NET'in kendi mekanizmasının eklediği objeleri gizlidir ve de saklıdır.

dinomazu'nun dediği gibi en kolay yol Session içerisine almak ancak bu da request ve response esnsındaki aktarılan verinin boyutunun artması demek. Bunu göze almak gerek.

Ha bilemiyorum, şöyle bir durum olabilir, public static falan tanımlayınca dataset dolu geliyordur(hiç denemedim açıkçası) ama kesin bişey var ki .NET bu durumda da dataset'i kendisi hashleyip __VIEWSTATE içine gömecektir.

Yamuluyorsam düzeltin ki sonra benzer bişey yapmaya kalkarım falan, patlamayayaım :)
0
sinuzit
(16.01.09)
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler basond, compumaster, fraise, kibritsuyu, rakicandir
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır.