Yaptığınız bir uygulamayı ClickOnce ile publish ettiniz ve web uygulamanızdan açtınız. Peki eğer açtığınız uygulamaya parametre göndermek isterseniz ? Bunun sebebi ise açılan uygulama , web sitenizi gezen kullanıcıya göre işlem yapacağı içindir. Açılan uygulamada bir daha kullanıcıya kullanıcı adı ve şifre girdirmek istemiyorsanız uygulamaya parametre göndermek en kolay çözümlerden biridir. bunu yapmak için ilk önce uygulamızın özelliklerinden Publish menüsüne gelip oradan da Options butonuna tıklayıp Allow URL Paramers... checkbox'ını seçmeniz gerekiyor. Daha sonradan gönderilecek olan parametreleri yakalamak için ise :

AppDomain.CurrentDomain.SetupInformation.ActivationArguments.ActivationData[0].ToString() ile gelen veriyi alabilirsiniz.

Web sitenizden ise uygulamaya parametre göndermek için linki aşağıdaki şekilde değiştirmeniz yeterli olacaktır.

http://internetsitem/uygulama.application?pametre=deger

burada dikkat edilmesi gereken büyük bir güvenlik sorunu. IE bu linki geçmiş kayıtlarına atacak ve eğer başka bir kullanıcı bu adrese direk ulaşmak isterse ulaşmasına maalesef izin verilecek bunun için uygulama gönderilen parametrelere ek güvenlik değerleri ekleyip onu client uygulamada kontrol etmenizi tavsiye ederim.


 
Categories: .Net | Csharp

June 10, 2008
@ 04:09 PM

let ifadesi linq ile sorgulama yaparken değişken tanımlamayı sağlar. Örneğin aşağıdaki gibi bir sorguya ekleme yapacak olursak ;

IEnumerable<string> sonuc = (from a in isimler where (a.StartsWith("B"))

select a

);

foreach (string s in sonuc)

{

Console.WriteLine(s);

}

Bu sorgu içerisinde (her ne kadar da böyle yapılmaması gereksede örnek olsun diye yapıyorum) isimlerin başına "Sayın" ifadesi eklemek istersek ve değişken kullanıcaz diye tutturursak :) let ifadesi kullanmak gerekir.

IEnumerable<string> sonuc = (from a in isimler where (a.StartsWith("B"))

let abc = "Sayın "

select abc + a

);

foreach (string s in sonuc)

{

Console.WriteLine(s);

}

 


 
Categories: .Net | Csharp | Linq

OrderBy sql server'dan bildiğimiz süzme işlemini yapmaktadır. OrderByDescending ise tersten süzme işlemi yapmaktadır.

ThenBy kelimesi ise orderby içerisinde kullanılan 2.cil kriterleri temsil eder. Daha açıklayıcı bir deyişle Sql Server üzerinden bildiğimiz Order By Deneme, Deneme2  cümlesindeki Deneme2'yi temsil etmektedir. Örnekleri aşağıda bulabilirsiniz.

            static string[] isimler = new string[] {"Okan","Yalçın", "Bora","Güneş","Boran","Ekin","Hızır" };

            static void OrderByMetodu()

            {

            IEnumerable<string> sonuc = from r in isimler orderby r select r;

            foreach (string s in sonuc)

            {

            Console.WriteLine(s);

            }

            }

            static void OrderByDescendingMetodu()

            {

            IEnumerable<string> sonuc = from r in isimler orderby r descending select r;

            foreach (string s in sonuc)

            {

            Console.WriteLine(s);

            }

            }

            static List<Musteri> musteriListesi = new List<Musteri>() {new Musteri{Ad="Bora", Soyad="Burgucugil"}, new Musteri{Ad="Bora", Soyad="Beken"} };

 

 

            static void ThenByMetodu()

            {

 

      

 

               var sonuc = musteriListesi.OrderBy(a => a.Ad).ThenBy(a => a.Soyad);

 

               foreach (Musteri m in sonuc)

               {

                   Console.WriteLine(m.Ad + " " + m.Soyad);

               }

              

           }

 

            static void ThenByDescendingMetodu()

            {

 

                var sonuc = musteriListesi.OrderBy(a => a.Ad).ThenByDescending(a => a.Soyad);

 

               foreach (Musteri m in sonuc)

               {

                   Console.WriteLine(m.Ad + " " +  m.Soyad);

               }

            }


 
Categories: .Net | Csharp | Linq

June 10, 2008
@ 03:14 PM

Select metodu bir koleksiyondan veya diziden verileri listelemeyi, seçmeyi sağlar. SelectMany metodu ile arasında fark select keyword'u sadece tek boyutlu kaynak üzerinden çalışır.

static string[] isimler = new string[] {"Okan","Yalçın", "Bora","Güneş","Boran","Ekin","Hızır" };

IEnumerable<string> sonuc = from a in isimler where (a.StartsWith("B")) select a;

foreach (string s in sonuc)

{

Console.WriteLine(s);

}

SelectMany ise birden fazla boyutu olan kompleks olan koleksiyonlar için kullanılır. Örneğin :

public class Musteri

{

public string Ad { get; set; }

public List<string> Kitaplar {get;set;}

}

Sorgulama yapmak için :  

Musteri[] bilgiler ={new Musteri { Ad = "Okan ",Kitaplar = new List<string>{"Sql Server", @"C#"}},

new Musteri { Ad = "Ekin ",Kitaplar = new List<string>{"Mobile Applications", "Linq"}},

new Musteri { Ad = "Yalçın, Kitaplar = new List<string>{"Sigara Bırakma Yöntemleri", "Rakı içme Teknikleri"}}};

IEnumerable<string> sonuc = bilgiler.SelectMany(a=> a.Kitaplar);

foreach (string s in sonuc)

{

Console.WriteLine(s);

}


 
Categories: .Net | Csharp | Linq

June 10, 2008
@ 02:41 PM

C# 3.5 ile gelen extension metotlardan olan Union metodu verilen 2 kaynağı birleştirmeyi sağlar. Bu birleşim sonucu her 2 koleksiyondaki ortak elemanlar tekrarlanmaz farkı elemanlar listelenir. Örneğin :

int[] sayilar = new int[] { 1, 567, 34556, 487, 3, 5, 15, 7, 9 };

int[] sayilar2 = new int[]{3,7,9,1,12312365,17};

IEnumerable<int> sonuc = sayilar.Union(sayilar2);

foreach (int i in sonuc)

{

Console.WriteLine(i);

}

Bu çıktı sonucunda sayilar2 dizisindeki bazı sayılar ilk dizide de olduğu için ekranda gösterilmediği görülmektedir.


 
Categories: .Net | Csharp | Linq

June 10, 2008
@ 12:50 PM

Artık Linq ile Xml belgeleri üzerinde çalışmak oldukça kolaylaştı. Örneğin :

XElement dosyam = XElement.Load(@"C:\\Calisanlar.xml");

dosyam.Add(new XElement("Kisi", new XElement("Ad", "Okan"), new XElement("Soyad", "Tekeli")));

dosyam.Add(new XElement("Kisi", new XElement("Ad", "Yalçın"), new XElement("Soyad", "Uzun")));

dosyam.Add(new XElement("Kisi", new XElement("Ad", "Mahir"), new XElement("Soyad", "Gündüz")));

dosyam.Save(@"C:\\Calisanlar.xml");

Eğer Attribute eklemek isterseniz :

XElement dosyam = XElement.Load(@"C:\\Calisanlar.xml");

dosyam.Add(

new XElement("Kisi",

new XElement(

"Ad",

"Okan",

new XAttribute("Id",1)),

new XElement("Soyad", "Tekeli")));

dosyam.Add(new XElement("Kisi", new XElement("Ad", "Yalçın"), new XElement("Soyad", "Uzun")));

dosyam.Add(new XElement("Kisi", new XElement("Ad", "Mahir"), new XElement("Soyad", "Gündüz")));

dosyam.Save(@"C:\\Calisanlar.xml");


 
Categories: .Net | Csharp | Linq

Sadece entity katmanı sayesinde veritabanı üzerine işlem yapabilmek için DataContext sınıfı size yardımcı olacaktır. Yalnız entity üzerine attribute ile çalışmak gerekiyor. Örnek bir kullanım için aşağıdaki kodu inceleyebilirsiniz.

[Table(Name="Person.Contact")]

public class Contact

{

[Column(Name="FirstName")]

public string FirstName { get; set; }

[Column(Name = "LastName")]

public string LastName { get; set; }

}

Verileri görüntülemek için kısa yoldan herhangi bir ek katman veya sorgu yazmadan :

DataContext dt = new DataContext("server=.;database=AdventureWorks;uid=sa;pwd=**");

Table<Contact> ct = dt.GetTable<Contact>();

var result = from c in ct where c.FirstName select new { c.FirstName, c.LastName };


 
Categories: .Net | Csharp | Linq

Generic sınıflar ile birlikte default kullanmak oldukça kullanışlı olacaktır. Şöyleki, 400 sutunlu bir tablo üzerinde çalışıyorsunuz ve bu sutunlardan yaklaşık olarak 200'ü NULL veri içeriyor.  Tabloda 100.000 kayıt var ve siz bunları DataReader ile okumak istediniz. SqlCommand ile okuma yaparken sizin hata almamanız için IsDBNull kontrolü yapmanız gerekiyor her satır için. Daha az yazmak için ise biraz reflection'dan yararlanıp tek bir static metot sayesinde bu sorunu giderebilirsiniz. Eğer verimiz null ise o tipin default değerini almak için aşağıdaki gibi bir örnek yapabiliriz.

public static T GetMyValue(SqlDataReader rdr, String column)

        {

            Type type = typeof(T);

            Assembly asm = type.Assembly;

            object obj = asm.CreateInstance(asm.FullName);

            obj = Activator.CreateInstance<T>();

 

            T value = (rdr.IsDBNull(rdr.GetOrdinal(column))) ? (T)obj : (T)rdr[column];

            return value;

        }

Databaseden okuma yaparken ise :

nesne.Özellik = Class<int>.GetMyValue(rdr, "Sutun");

şeklinde bir okuma yaparsanız sorun ortadan kalkar. Yazdığınız static metot sayesinde artık her satırda IsDBNull kontrolü yapmanıza gerek kalmaz. Bu metot sayesinde artık eğer veri null ise size null değil tipin default değeri döner. Bunun daha da kısa yolu nedir diye sorarsanız default kelimesini kullanmaktır.  Şöyleki :

public class IslemYap<T>

{

static T veri = default(T);

public static T DegerOku()

{

return veri;

}

}

Artık reflection da kullanmadan sadece default kelimesinin nimetlerinden yararlanarak bu işlemi kısaca yapabilirsiniz.

DateTime z = IslemYap<DateTime>.DegerOku();

Default kelimesi Generic class ile birlikte kullanıldığında size tipin default değerini döndürmektedir.


 
Categories: .Net | Csharp

WPF uygulamalarınızda runtime'da FlowDocumentPageViewer kontrolüne paragraf eklemek isterseniz önce döküman ekleyip daha sonra eklenen dökümana paragrafı ekleyebilirsiniz.

Paragraph p = new Paragraph();

p.Inlines.Add("yazi");

FlowDocument flw = new FlowDocument();

flw.Blocks.Add(p);

YaziAlani.Document = flw;

Not : Yukarıda YaziAlani olarak belirtilen FlowDocumentPageViewer kontrolünün x:Name özelliğidir.


 
Categories: .Net | Csharp