PostBack herhangi bir nesne postettiğinde true değer verir.

IsCrossPostBack a.aspx sayfası b.aspx sayfasına post ettiğinde true çalışır.

PreviousPage Server.Transfer yada a.aspx den b.aspx e post anında çalışır ve bir önceki sayfayı verir. Bu performans kaybı yaşatır. ViewState verisi taşımak yük bindirir sunucuya. Bu yüzden QueryString kullanmanı tavsiye ederim.


ExecuteScalar tek bir değer döndüren işlemlerde kullanılır. Object türünde döndüğü için sql den ne dönerse dönsün kabul eder.

select Sum(Borc) AS Borc FROM tblBorc WHERE KisiId = 1;
sorgusunu çalıştırırsın sana Borc sutunun tipi neyse ona göre veri döndürür

object objBorc = cmd.ExecuteScalar();
//object null olabilir veri gelmezse! Kontrol etmek her zaman iyidir.
if(objBorc!=null){
decimal toplamBorc = Convert.ToDecimal(objBorc);
}

ExecuteReader DbDataReader dan türemiştir. SqlCommand çalıştırıyorsan SqlDataReader, MySqlCommand çalıştırıyorsan MySqlDataReader döner ama kökü DbDataReader dır... OOP yi bilmek gerekir detaya inmeyelim:

select * from hedehodo;

using(SqlDataReader dr = cmd.ExecuteReader()){
while(dr.Read()){
//Read true olduğu sürece rowlar tek tek okunur.
string adi = dr["Adi"].ToString();
int yasi = Convert.ToInt32(dr["Yasi"]);

// Eğer sütun index sayısını biliyorsan, 0. sutun adi, 1. sutun yasi, 2. sutun silinmiş mi? Bunu genelde kullanmazlar, Index belli değil yada eksik yada farklı girilmişse hata fırlatır. En güzeli sütun adını çekmektir.
bool silinmisMi = dr.GetSqlBoolean(2);
}
}

ExecuteNonQuery sql de insert, update, delete yapılmışsa bunun etkilenen sorgu sayısını verir.

--tablo da 10 tane row var. id leri 0 dan büyük. hepsinin adını hepsi aynı yapacak.
update tablo set adi = 'hepsi aynı' where id > 0;

int etkilenenSatir = cmd.ExecuteNonQuery();
//etkilenenSatir = 10 olur.

SqlCommand her zaman çok hızlı çalışır. Direkt sqlconnection ile bağlıdır. Çok kritik sql sorgu performansı gerekli olduğu durumlarda kullanırım. Onun dışında ORM rules :P