Params Anahtar Kelimesi ile Sınırsız Sayıda Parametre Tanımlama


Merhabalar;

Birbirinin devamı niteliğinde olan metod tanımları şekillerini gördük. Sıra params anahtar kelimesi ile sınırsız sayıda parametre kullanma yöntemine.

Bildiginiz gibi daha önce anlatılan metodlarda önceden belirlenen sayıda parametre verilirken bu yöntemde istenilen kadar parametre girilebilir.



Bu işleme göre sonuç olarak çıkar.

Out Parametre Metod Kullanımı

Merhabalar;

Out parametresinde gönderilen değerler üzerinde işlemler yapılır ve aynı degerler uot parametresi ile geri aynı değişken üzerinden dışarı taşınır.

Daha detaylı örnekler için araştırma yapmanızda faydalar vardır.


Konuyu daha iyi kavramanız için out ve ref anahtar sözcüklerini araştırmanız daha faydalı olacaktır.
Konunun SQL karşılıgı için buraya bakabilirsiniz.
Bir sonra ki yazımızda görüşmek üzer mutlu kalın....

Overloaded (Aşırı Yüklenmiş) Metotlar

Merhabalar ;
Bu yazımızda Overloaded yani Aşırı yüklenmiş metodlar üzerinde duracağım.
Overloaded Metodlar nedir ne işe yararlar kabaca anlatalım, daha sonrada bir örnek yapalım.
Aşırı yüklenmiş metodlar adında anlaşıldıgı gibi aynı isimde farklı işleri yerine getiren metodlardır. Resimde DataTable nesnesinin 3 tane Overloaded metodu oldugunu görüyoruz.






Bir metod aşırı yüklenmesi için kesinlikle aynı isime sahip olmalıdır ve farklı tipde değer döndermeli yada farklı sayıda (yada tipde) parametre almalıdır. Yani bir birinin aynı olan metod hata verecektir.

Bu bilgiler ışığında kendi örnegimizi yapıyoruz.

Topla adında bir metod tanımlayalım ve bunu 3 aşırı yükleme yapalım.

// 2 para metreli 1. toplama metodumuz
private int topla(int sayi1, int sayi2)
{
return sayi1 + sayi2; // 2 sayıyı toplar tam sayı olarak geri dönderir
}
// 3 parametreli 2. toplama metodumuz
private int topla(int sayi1, int sayi2, int sayi3)
{
return sayi1 + sayi2 + sayi3; // 3 sayıyı toplar tam sayı olarak geriye dönderir
}
// 3 parametreli 3. metodumuz (dikkat ederseniz bu strin türünden parametre alır)
private string topla(string sayi1, string sayi2, string sayi3)
{
return sayi1 + sayi2 + sayi3; // 3 string paramereti alır string olarak geriye dönderir}

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(topla(1,1).ToString());
MessageBox.Show(topla(1,1,1).ToString());
}
Geriye dönen degerler 2 ve 3 olacaktır.


Pekiii hemen akla şu soru gelecektir.

---string dönderen metodda 3 parametreli program nasıl anlayacak toplayacakmı yoksa bu stringleri birleştirecekmi??????

cevabı tabi gayet basit girilen bi ifadenin string olarak algılanması için " " (çift tırnak) içine alınması gerekir.

Hatırlayacagınız gibi 1 kendi başına int degeri taşırken "1" string olarak tanınacaktır.
Buna göre şöyle kullanılmalı;

MessageBox.Show(topla("1","1","1").ToString());

Dönen sonuç tabikide 111 olacaktır.

Konularımız biraz daha detaya doğru gidecek. Umarım buraya kadar anlatılanlar faydalı olmuştur.

Bir sonraki yazımda görünşüceye kadar mutlu kalın....

MARS(Multiple Active Result Sets)

MARS nedir??


MARS(Multiple Active Result Sets) ADO.NET 2.0 ile gelen tek bağlantı ile birden çok stored proc select vs. işlem yapmamıza olanak veren bit teknikdir.


Normal ADO.NET teknigi ile bu işi halletmeye kalksak ya iki ayrı bağlantı tanımlanacak yada bir işlem bittikden sonra diğerine geçmeden önce bağlantıyı kapatıp açmak gerekir.


Herşeyi doğru yazdınız ama yinede bir hata varsa dikkat etmeniz gereken bi yer var.

ConnectionString imizde MultipleActiveResultSets = true gözden kaçırmamanız gerekir.


Arasında ki farkı görmek için kendiniz önce normal bildigimiz yöntemle yazın daha sonra MARS tekniğini uygulayın böylece arasındaki farkı daha bariz farkedeceksiniz.


SqlConnection sqlCon = new SqlConnection("data source=localhost;initial catalog=TEST;integrated security=SSPI;MultipleActiveResultSets = true");
SqlCommand cmd1 = new SqlCommand("Select * From Musteri", sqlCon); //Müşteri listem
SqlCommand cmd2 = new SqlCommand("Select * From Siparis where M_ID=@MID", sqlCon); //Müşteri siparişleri listem

cmd2.Parameters.Add("@MID", System.Data.SqlDbType.Int);
SqlDataReader dr1;
SqlDataReader dr2;
sqlCon.Open();
dr1 = cmd1.ExecuteReader();
while (dr1.Read()) //müşteri listemden okumaya başladım 1. Müşterim
{
Console.WriteLine(dr1[1].ToString());
Console.WriteLine("-----------------------------");
Console.WriteLine("");
cmd2.Parameters["@MID"].Value = dr1[0]; //ID sini siparişe yolluyorum.
dr2 = cmd2.ExecuteReader(); // buraya dikkattt... Siparisler okunmaya başladı..
while (dr2.Read())
{
Console.WriteLine(dr2[2].ToString()); // siparişler listeleniyor.
}
dr2.Close(); // tüm siparişleri listeledik işimiz bitti kapattık dataReader ımızı.
}
sqlCon.Close();
Console.ReadLine();


Özet olarak anlatacak olursak :

1. db ye bağlandık

2. sorgu çekmek için komutlarımızı hazırladık

3. SqlDataReader larımızı tanımladık (Biri müşteri listesi, Diğeri Siparişler için)

4. Müşteri listesini almaya başladık. (1. müşteri adı ve ID aldık sonraki satırlarda siparişler için kullanacagız.)

5. Bu kezde müşterinin ID sini komut satırına yolladık ve müşteri ye ait siparişleri listelemeye başladık.

6. siparişleri okudugumuz SqlDataReader i kapattık.

7. Takip eden satırlar....


Ekran çıktısı şöle oluyor...






SqlCommandBuilder Sınıfı ve DataGridView üzerinden update işlemi

Merhabalar;

Bu yazımızda dataGridView nesnesi üzerinden güncelleme silme ve ekleme işlemlerini ögrenecez.

Hepimiz programlarımız da dataGridView kullanıyoruz vede tanıdıkca daha da çok seviyoruz.

Bazen kullanıcılar müşterilerin siparişlerini verirken bazı kayıtları düzenleme geregi duyarlar. Örnegin Teslimat günü 3 gün sonra olan bi ürün depoda kalmamış ve 4. gün gelecektir. Hemen formlar arasında gidip gelmekdense hemen orada aynı anda değiştirmek isterler ki bence haklarıdırda. Peki bu durumda neler yapalabiliriz.

Not: Muhtemelen aşagıda ki hatayı alırsınız.
" Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information."
Bu hatanın nedeni database de tablonuzda primery key yoktur. Yani genelde ID kolonu olur Birincil anahtar atarsanız çözüme ulaşırsınız.

string cnStr = "Server=.;DataBase=TEST;uid=sa; pwd=123";
SqlConnection Conn;
SqlCommand cmd = new SqlCommand();
SqlDataAdapter adp;
DataTable dt;
private void btnYukle_Click(object sender, EventArgs e)
{
// Bu kısım zaten biliyorsunuz...
// Database bağlanı sorgu çektik, dönen sonuçları dataGridView nesnesine doldurduk.
Conn = new SqlConnection(cnStr);
cmd = new SqlCommand("Select * From CustomerInfo", Conn);
adp = new SqlDataAdapter(cmd);
dt = new DataTable();
adp.Fill(dt);
dataGridView1.DataSource = dt;
}
private void btnGuncelle_Click(object sender, EventArgs e)
{
//Evet asıl olayın gerçekleştigi yer burasu buraya biraz dikkat ediyoruz.
SqlCommandBuilder cmdBuilder = new SqlCommandBuilder(adp);
// SqlCommandBuilder burda bizim için update delete vs. komutlar hazırlar ve dataAdapter ile ilişkendirilir.cmdBuilder.GetUpdateCommand(); //ben sadece update yapacagım için GetUpdateCommand() kullandım siz isterseniz ihtiyacınız için insert ve delete uygulayabilirsiniz.adp.Update(dt); // vee mutlu son dataTabledeki değişikliklerDatabase işleniyor.}

Umarım faydalı olur. Bence çok tatlı bişey bu mükkem pratiklik getiriyor.
Bu arada canım hala çok sıkılıyor....
Bir sonraki yazımızda görüşünceye kadar mutlu kalın....