ExecuteReader ve ExecuteScalar Performans Kıyaslaması

by Gökhan Eser 14. Mayıs 2010 23:55

MSsql veritabanımızda okuma işlemleri yapacağımız zaman ExecuteReader ve ExecuteScalar metodlarını kulanıyoruz. Bu iki metodda sadece select sorgulamalarında çalışmaktadır. Insert, Delete, Update gibi sorgulama işlemlerinde ise ExecuteNonQuery metodunu kullanıyoruz.

ExecuteScalar metodu tek bir değer döndüren sorgulama işlemlerinde kullanılmaktadır. Örneğin belli bir alandaki sayısal değerlerin toplamını veya tablodaki kayıt sayısını veren sorgulamalar gibi.  sum, count, avg, max, min vs. 

ExecuteReader metodu ise select sorgusu ile çektiğimiz verileri satır ve sütün olarak herhangi bir veri kaynağına aktaracağımız durumlarda tercih edilmektedir. Aynı zamanda bu metod ile executescalar gibi tek bir değeri okuma işlemide yapılabilmektedir. Bunun içinde executereader metodunun CommandBehavior.SingleResult parametresi kullanılmaktadır.

Şimdi her ikiside tek bir değeri okuma işlemini gerçekleştiriyor o zaman hangisini kullanmalıyız ?
Yapacağımız örnek uygulamada da bunu öğrenmeye çalışacağız. Burada metodların çalışma zamanını tesbit etmek için Stopwatch sınıfını kullanıcaz. Normalde kodun çalışma zamanını belirlemek için DateTime.Now kullanarak kodun ilk çalışma zamanı ile son çalışma zamanı arasındaki farkı alıyorduk. Stopwatch sınıfı ile bunu daha hassas bir şekilde ölçmüş olacağız.

Örnek Uygulama için aşağıdaki gibi basit bir veritabanı tasarladım. Veritabanımızın ismi deneme ve kisiler tablosuna sahip.



File > New > Project  ve yeni bir Console Application oluşturuyoruz. Ve kodlarıda aşağıdaki gibi yazıyoruz. Ben gerekli kısımlara açıklama satırları ekledim.

using System;

using System.Collections.Generic;

using System.Text;

using System.Data; // ekliyoruz.

using System.Data.SqlClient; // ekliyoruz.

using System.Diagnostics; // Stopwatch sınıfını kullanabilmek için bu namespace'i ekliyoruz.

 

 

namespace PerformansTest

{

    class Program

    {

        static void Main(string[] args)

        {

            /*ExecuteReader*/

            Stopwatch stpwch = new Stopwatch(); //stopwatch sınıfından stpwch isimli bir değişken oluşturduk.

 

            SqlConnection _con = new SqlConnection(@"Data Source=XP7\XPSEVENSQLSERVER;Initial Catalog=deneme;Integrated Security=True");

            SqlCommand _cmd = new SqlCommand("select*from kisiler", _con);

            _con.Open();

 

            stpwch.Start(); // stpwch değişkeninin ilk çalışma noktası burası.

            SqlDataReader _dr = _cmd.ExecuteReader(CommandBehavior.SingleResult);

            _dr.Read();

            stpwch.Stop(); // stpwch değişkeninin bitiş noktası burası. yani hangi kod aralığının çalışma zamanını kontrol edeceksek ilgili kodların üst ve alt satırlarında çalışma ve bitiş noktasını belirtiyoruz.

 

            Console.WriteLine("ExecuteReader Sonucu:");

            Console.WriteLine("----------------------");

            Console.WriteLine("Okunan Veriler = " + _dr["kisi_ad"].ToString());

 

            _con.Close();

            _dr.Close();

           

            Console.WriteLine("Verilerin okunma süresi = " + stpwch.Elapsed.ToString());

            Console.WriteLine("");

 

            /*ExecuteScalar*/

            Stopwatch stpwch2 = new Stopwatch(); //stopwatch sınıfından stpwch2 isimli bir değişken oluşturduk.

 

            SqlConnection _con2 = new SqlConnection(@"Data Source=XP7\XPSEVENSQLSERVER;Initial Catalog=deneme;Integrated Security=True");

            SqlCommand _cmd2 = new SqlCommand("select * from kisiler", _con2);

            _con2.Open();

 

            Console.WriteLine("");

            Console.WriteLine("ExecuteScalar Sonucu:");

            Console.WriteLine("----------------------");

 

            stpwch2.Start(); // stpwch2 değişkeninin ilk çalışma noktası burası

            Console.WriteLine("Okunan Veriler = " + _cmd2.ExecuteScalar().ToString());

            stpwch2.Stop(); // stpwch2 değişkeninin bitiş noktası burası.

 

            _con2.Close();

 

            Console.WriteLine("Verilerin okunma süresi = " + stpwch2.Elapsed.ToString());

            Console.ReadLine();

 

        }

    }

}

 

 
Projeyi derleyip çalıştırdığımda ekran görüntüsünü aşağıdaki gibi aldım.


Ekran çıktısındanda gözüktüğü gibi ExecuteScalar metodu ExecuteReader metodundan yaklaşık 2.5 kat daha hızlı çalışmaktadır. Yalnız bu değerler benim kendi PC kaynaklarıma göre çıkan sonuçlar. Performans değeri daha düşük ya da daha yüksek bir PC üzerinde bu sonuçların değerleri değişebilir. Ama hangi PC olursa olsun çıkan kıyaslama sonucu değişmeyecektir.

Evet Arkadaşlar bu örnekde mssql veritabanından tek bir değeri okurken kullanılan metodların veri okuma hızlarını test etmeye çalıştık.
Faydalı olması umuduyla hepinize kolay gelsin.
 
İyi çalışmalar.

Değer Türleri ve Referans Türleri - Value Types and Reference Types

by Gökhan Eser 13. Nisan 2010 11:38

.NET ortamında yazmış olduğumuz programlarda kullandığımız değişken türleri ikiye ayrılmaktadır. Bunlar değer türleri (value types) ve referans türleri (reference types) dir.

Değer Türleri (Value Types) :
Doğrudan veriyi taşıyan ve taşıdığı veriye göre bellek üzerinde yer dolduran değişken türüdür. Değer türleri bellekte az yer kaplar ve kendilerine hızlı bir şekilde erişilir. Değer türleri belleğin stack dediğimiz kısmında saklanır.

Referans Türleri (Reference Types):
Referans türlerinde aynen değer türlerinde olduğu gibi veri ram üzerinde stack alanında saklanır. Ayrıca ram üzerindeki heap denilen bölgede de verinin (nesnenin) adresini tutar. Burada daha fazla bellek kullanılır ve erişim daha zordur.

Aşağıda değer ve referans türlerine ait temel veri tipleri görülmektedir.


Değer türleri ile Referans türleri arasındaki en önemli fark belleğin farklı alanlarında depolanıyor olmalarıdır. Değer türleri stack, referans türleri ise heap alanında tutulur.

Bu iki tür arasındaki diğer bir fark ise; Değer türündeki bir değişkenin değeri başka bir değişkene atanırsa veri değeri kopyalanmış olunur. Referans türünde ise veri değerleri kopyalanmaz sadece bellekte bulunan adresi kopyalanır.

Bu anlattığımız kopyalanma olayını bir örnek üzerinde inceleyelim. Ben formun tasarımını aşağıdaki gibi yaptım.

Amacımız değer ve referans türünden oluşturulmuş değişkenlerin değerlerinin bir başka değişkene atandığında meydana gelen değişikliğin neler olduğunu anlamaya çalışmak. Kod tarafına geçiyoruz.

Form1.cs

        private void buttonValue_Click(object sender, EventArgs e)

        {

            int x = 50;
            int y = x;
            y = Convert.ToInt32(textBox1.Text);
            label2.Text = x.ToString();

// y değişkeninin değerine x'i atadıkdan sonra. y değişkeninin alacağı değeri textboxdan girilen değere eşitledik. fakat labela y değerini yazdırmak istediğimiz zaman textboxdan girilen değer yerine 50 değerini yazdı. 

        }

        public class Kopyalama

        {

            int x;
            public int X

            {

                get { return x; }
                set { x = value; }

            }

        }  // ufak bir class tanımlaması yaptık

 

        private void buttonReference_Click(object sender, EventArgs e)

        {

            Kopyalama ref1 = new Kopyalama();           
            ref1.X = 50;
            Kopyalama ref2 = ref1; 
            ref2.X = Convert.ToInt32(textBox2.Text);
            label4.Text = ref1.X.ToString();

            // burada ref1 isminde Kopyalama sınıfından yeni bir nesne türettik ve değerini 50 olarak belirledik. Daha sonra Kopyalama sınıfından ref2 isimli yeni bir nesne türettik ve bunu ref1 nesnesine eşitledik. Sonrasında ref2 nesnesinin değerini textboxdan girilecek olan değere eşitledik. Bu sefer ilk verilen değer yerine textboxdan girilen değer gösterildi.

        }

Şimdi nerede ne oldu onu anlamaya çalışalım. Biz burada x isimli değişkeni y isimli değişkene kopyaladıktan sonra stack üzerinde y için ayrı bir alan ayrıldı. Böylece her iki değişken birbirini etkilemeyerek farklı bellek adreslerinde tutuldu.
ref1 değişkeni ref2 değişkenine kopyalandığı zaman başvurulan nesnenin kendisi değil adresi ref2'ye kopyalanmış oldu. Böylece stack üzerinde farklı adreslerde bulunan ref1 ve ref2 değişkenleri aynı yeri ve heap üzerinde bulunan aynı adresi (Kopyalama nesnesinin yeri) göstermiş oldu.

Evet arkadaşlar bu yazımda değer ve referans türlerinin ne anlama geldiğini ve ram üzerinde hangi alanlarda saklandıklarını anlatmaya çalıştım.
Hepinize kolay gelsin. İyi çalışmalar.

Uninstall Visual Studio 2008 - Remove Visual Studio 2008

by Gökhan Eser 5. Nisan 2010 22:50

Sistemizde yüklü olan Visual Studio 2008'i ve beraberinde gelen yüklemeleri tek tek elle kaldırmak can sıkıcı olabilir. Eğer PC'den Visual Studio 2008'i sorunsuz bir şekilde kaldırmak istiyorsanız. Microsoft'un bunun için çıkardığı ufak bir programcık var bunu kullanabilirsiniz.

Kaldırmak için gerekli olan yazılım: http://go.microsoft.com/fwlink/?LinkId=105801

Uninstall hakkında gerekli bilgi: Microsoft Visual Studio 2008 RC/RTM uninstall tool


Gelecekteki Microsoft Ürünleri

by Gökhan Eser 27. Mart 2010 17:35

Video gelecekteki muhtemel teknolojiler hakkında fikir veriyor. Ne kadar doğrudur bilemiyorum ama Microsoft bu ürünlerin patentlerini almış ve çıkış tarihini 2019 olarak belirlemiş.

Asp.net ile Session İşlemleri ve Session Nesnesinin Kullanımı

by Gökhan Eser 8. Mart 2010 13:18

Durum Yönetimi (state management) amacıyla kullanılan Session nesnesi server taraflı olandır. Client taraflı olan durum yönetim nesnesi Cookie'lerdir. Öncelikle Session nedir? Ne işe yarar? kısaca bundan bahsedelim ve cookie ile arasındaki farklara değindikden sonra kullanımını bir uygulama üzerinde görelim.
Session: Bir oturum nesnesidir. Ziyaretçiler bir web sunucusundan herhangi bir sayfayı talep ettiğinde, sunucu bilgisayarlar gelen ziyaretçilerin herbirine ayrı ayrı oturumlar başlatır. Peki bu farklı oturumları nasıl birbirinden ayırt etmektedir? Şöyle ki Asp.net sunucularında oturum sahiplerini tanıyabilmek için özel bir algoritma ile oluşturulan tanımlayıcı bir değer kullanılır. Bu tanımlayıcı değerlere SessionID denilmektedir. İşte ziyaretçiler bu SessionID değerlerine göre bir birbirinden ayırt edilmektedir.
Session nesneleri yardımıyla kullanıcılara ait oturum bilgileri sayfalar arasında taşınabilmektedir. Tabiki bu bilgi taşıma olayı sonsuza kadar değildir. Bu süre Session'a atanan oturum süresi boyunca devam etmektedir. Session'ın son bulması için sadece belirlenen bu oturum süresinin dolmasıda gerekmez. Kullanıcı eğer geçerli olan tarayıcıyı kapatırsa oturumu otomatik olarak son bulacaktır. Ya da sunucu bilgisayarda oluşabilecek sorunlardan dolayıda oturumlar son bulabilir. Sessionda kullanıcıya ait pek çok bilgi tutulabilir (Örn. Kullanıcının adı, soyadı, şifresi, ip adresi vs.) Genel olarak Session nesnesinin kullanımına verilebilecek en güzel örnek alışveriş siteleridir. Burada kullanıcının sepetine ait olan bilgiler session'da tutulup site içerisinde sayfalar arasında taşınabilmektedir.

Cookie:
Cookie'lerde ise bu şekilde bir oturum sonlanması söz konusu değildir. Çünkü Cookie'ler istek yapılan sunucu bilgisayar tarafından bizim HDD mize bırakılan küçük .txt dosyalarıdır. Bu .txt dosyalarının içerisinde aynen sessionda olduğu gibi sunucunun bizi tanıması için gerekli olan bilgiler saklanmaktadır. Ve sadece bu kodu tanımlayan web sunucusu tarafından okunabilir. Fakat bu Cookie'deki bilgiler yönetici konumuna sahip kişilere ait kullanıcı adı ve parola bilgileride olabilir. Session'da bu bilgiler server bilgisayarda saklandığı için herhangi bir problem oluşturmuyordu. Fakat cookie'de ise bu bilgiler kullanıcıların bilgisayarlarında saklandığı için güvenlik noktasında sıkıntı oluşturmaktadır. Eğer kötü niyetli bir kişi yönetici konumundaki birinin cookie'sini çalıp kendi cookie'si ile değiştirirse çok da hoş bir sonuç çıkmaz ortaya. Bundan dolayı oturum yönetimlerinden session nesnesinin kullanımı daha sağlıklı ve güvenlidir.

Şimdi bu session olayını bir resim üzerinde görelim.


Evet resimde ifade etmeye çalıştığım gibi. Client (istemci bilgisayar) Server'dan (sunucu bilgisayar) bir talepde bulunur ve sunucu bilgisayardan kendisine bu talep doğrultusunda bir oturum açılır ve bir SessionID atanır. Oturum süresi boyunca da bu SessionID değerine göre tanınır.

Şimdi bu anllatığımız session olayını bir örnek üzerinde uygulayalım.

Default.aspx
Sayfamızın tasarımı aşağıdaki gibi olacak.



Amacımız textboxlara girilen kullanıcı adı ve şifre değerlerini session nesnesi aracılığı ile tutmak.
Burada ne gerçekleşicek?
Session Yaz
Biz textboxlara gerekli değerleri girdiğimiz zaman bu değerleri session'a yazdıracağız.
Session Oku
Az önce yazmış olduğumuz değerleri okutup listbox üzerinde göstereceğiz. Bu okuma işlemi sırasında otomatik olarak atanan sessionID değerinide listbox'da göstereceğiz.
Session Aktar
Burada ise kullanıcının session bilgilerini aynı oturum içerisinde iken bir başka sayfaya taşıyacağız. Bunun içinde projemize bir tane daha Web Form ekliyoruz ve üzerine üç tane label atıyoruz. Bu labellarda atanmış olan SessionID, Kullanıcı Adı ve Şifre bilgilerini göstereceğiz.

Evet şimdi gerekli işlemleri yapmamızı sağlayacak olan kodlarımızı her bir butonun click eventine yazıyoruz. Ve sayfamızın kod kısmının görüntüsü aşağıdaki gibi olacaktır.

Default.aspx.cs

protected void ButtonSessionYaz_Click(object sender, EventArgs e)

    {

        // TextBox lardan gelen değerleri Session'a atıyoruz.

        Session["KullaniciAdi"] = TextBox1.Text;
        Session["Sifre"] = TextBox2.Text;

        // Burada oturumun geçerlilik süresini belirliyoruz. Ben 1 dk olarak belirledim.

        Session.Timeout = 1;

         // Listbox'ı temizleyip. Session'ın yazıldığını belirtiyoruz.

        ListBox1.Items.Clear();
        ListBox1.Items.Add("Session yazıldı.");

   }

     protected void ButtonSessionOku_Click(object sender, EventArgs e)

     {

         // listbox'ı temizliyoruz.

         ListBox1.Items.Clear();

         // Burada ziyaretçiye SessionID atamış oluyoruz ve SessionID değerini listbox üzerinde gösteriyoruz. Bunu Session nesnesinin SessionID özelliği ile yaptık. Bu SessionID atama işlemini sayfanın Page_Laod'ında da yapabilirdik ve ilgili bir nesne üzerinde gösterebilirdik.

         ListBox1.Items.Add("SessionID değeri: " + Session.SessionID.ToString());

        // Burada Sessionlar'a değer ataması yapılmadan okuma yapılmaya çalışıldığında uyarı verdiriyoruz. Eğer Session Yazma işlemi yapıldıktan sonra session okuması yapılıyorsa atanmış olan değerleri listboxda gösteriyoruz.

        if (Session["KullaniciAdi"] == null)
              ListBox1.Items.Add("Session'lar boş. Değer giriniz.");

        else

        {  
            ListBox1.Items.Add("Kullanıcı Adınız: " + Session["KullaniciAdi"].ToString());
            ListBox1.Items.Add("Şifreniz: " + Session["Sifre"].ToString());

        } 

     }

     protected void ButtonSessionAktar_Click(object sender, EventArgs e)

     {

         // Burada ise kulanıcının oturum bilgileri olan SessionID, Kullanıcı Adı ve Şifre bilgilerini başka bir sayfaya taşıyoruz.

        Session["KullaniciAdi"] = TextBox1.Text;
        Session["Sifre"] = TextBox2.Text;
        Response.Redirect("Default2.aspx");

     }


Default2.aspx.cs

protected void Page_Load(object sender, EventArgs e)

    {

        // Burada SessionID, Kullanıcı Adı ve Sifre degerlerinin Default.aspx sayfasında da barındırıldığını görebiliyoruz. Mevcut olan oturum bilgilerini labellara yazdırdık.

        Label1.Text = "SessionID değeri: "+Session.SessionID.ToString();       
        Label2.Text = "Kullanıcı Adınız: "+Session["KullaniciAdi"].ToString();
        Label3.Text = "Şifreniz: "+Session["Sifre"].ToString();

    }

Şimdi projemizi çalıştırıp örneğimizi test edebiliriz. Projemizi çalıştırıp gerekli bilgileri textbox'a girdikten sonra Session Yaz butonuna tıkladığımızda listboxda Session yazıldı mesajının eklendiğini görebiliriz.



Şimdi de Session Oku butonuna basarak yazılmış olan Session değerlerinin ve SessionID numarasının listbox'a aktarıldığını görebiliriz. Aşağıda olduğu gibi.



Evet SessionID, girilen Kullanıcı Adı ve Şifre bilgilerinin session'dan okunarak listbox'a aktarıldığını görmüş olduk.
Şimdi de bu bilgilerin sayfalar arasında taşınmasına bakalım. Bunun içinde Session Aktar butonuna tıklıyoruz ve ekran görüntümüz aşağıdaki gibi olacaktır.



Evet aynı oturum içerisinde iken Session bilgilerinin bir başka sayfa olan Default2.aspx sayfasına aktarıldığını görmüş olduk.
Asp.net ortamında Session işlemleri temel olarak bu şekilde yapılıyor. Birde Session nesnesine ait bazı mode'lar bulunmakta. Bu mode'lar ile Sessionun tam olarak nerede saklanacağını belirtiyoruz. Fazla detayına girmeden kısaca bahsetmek istiyorum.
Öncelikle bu Session'a ait mode ayarlarını web.config dosyamız altında gerçekleştiriyoruz. Ve <sessionState mode=" "></sessionState> elemanını kullanarak yapıyoruz. mode=" " yazan kısma kullanmak istediğimiz mode ifadesini giriyoruz. Bu eleman <system.web></system.web> boğumunun içine yazılarak kullanılır. Aşağıdaki şemada session nesnesine ait mode'lar gösteriliyor.

Kısaca bunları açıklayalım.

InProc:
Varsıylan mode InProc dur. Bu mode'da session, Asp.net uygulamalarını çalıştran worker Process'de tutulur. Yani oturum değişkenleri site ile aynı bellek alanlarında bulunur. En hızlı saklama yöntemi bu olmasına karşın bir şekilde Worker Process ya da IIS uygulama havuzu sonlanırsa oturum değişkenleri de kaybolur. Örneğin uygulama havuzu için ayırdığınız bellek miktarı dolar ve uygulama havuzu tekrar başlarsa o anda sayfada bulunan tüm kullanıcıların oturum değişkenleri kaybolur.

StateServer
:
Bu mode'da oturum değişkenleri, iis ve wp den farklı bir uygulamada depolanır. Yani InProc dan farklı olarak, iis veya wp sonlansa dahi oturum değişkenleri kaybolmaz. Ancak sessiona attığınız objelerin serialise edilebilmesi kuralı InProc mode'una göre daha katıdır.
SQLServer:
Bu mode'da oturum değişkenleri bir Sql sunucusunda bulunur.
Bu mode InProc kipine göre yavaş ama güvenirliği açısından etkili bir yöntemdir.
Custom: Yukarıda belirtilen kipler dışında oturum değişkenleri özel bir sağlayıcıda barındırılacaksa bu yöntem kullanılmalıdır.

Evet arkadaşlar bu yazımda Asp.net ile Session işlemlerinin nasıl yapıldığına ve Session nesnesine ait olan mode'lara değindik. Faydalı olacağını umuyorum..
Hepinize Kolay Gelsin. İyi Çalışmalar.


SessionUygulama.rar (3,44 kb)

 

Asp.net ile Raporlama Sistemi (Report Wizard)

by Gökhan Eser 18. Ocak 2010 23:32

Bu yazımda Visual Studio 2008 ile Report Wizard nesnesini kullanarak web ortamında raporlama yapımını anlatacağım. Anlatım genel olarak resimler üzerinden olacak. Bu örneğimiz için MS Sql veri tabanını daha önceden hazırlamış olmanız gerekiyor. Çünkü raporlamanın mantığı veri tabanında sakladığımız bilgileri raporlar haline getirerek okunaklı ve düzenli bir şekilde sunmaktır. Visual Studio ortamında MS Sql veritabanı oluşturulmasına buradan bakabilirsiniz.

Neler gerekli;

Visual Studio 2008
Önceden hazırlanmış .mdf dosyası
Report Wizard Nesnesi

İlk Önce;

Yeni bir web Projesi oluşturuyoruz.
Sonrasında daha önceden hazırlamış olduğumuz veri tabanını App_Data klasörümüze ekliyoruz.

Başlıyoruz:

Asp.net ortamında raporlama işlemini gerçekleştirebilmemiz için Report Wizard nesnesini projemize dahil etmemiz gerekiyor. Projemizde sağ tuş tıklayıp Add New Item dan Report Wizard nesnesini ekliyoruz.



İlk defa ekleme yaptığımızda aşağıdaki pencere gelecektir. Next diyoruz. Bu pencerenin tekrar gelmesini istemiyorsanız Don't show this page again kısmını seçili yapın.



Next dedikten sonra wizard bize raporlamasını yapacağımız veritabanını seçmemizi söylüyor. Biz Database.mdf dosyamızı projemize daha önceden eklemiştik bundan dolayı veri tabanımız seçili olarak geldi ve next dedik.



Bundan sonra karşımıza gelen pencere bu uygulama dosyası için gerekli bağlantı stringini kaydetmek isteyip istemediğimizi soruyor. Bu şekilde next diyoruz.



Gelen pencerede görüntülemek istediğimiz veritabanı nesnelerini seçiyoruz.



Gelen pencerede personel tablomuza ait kolonları görüyoruz. Bundan sonraki aşamalar raporlama tasarım ayarlarımız ile ilgili düzenlemeleri içeriyor.



Bu pencere ise raporlama tasarımının tablo şeklindemi yoksa matris yapısındamı olacağını soruyor. Biz tablo görünümünü seçip next diyoruz.



Burada tüm detayları görüntülemek istediğimiz için bu şekilde aktarıyoruz.

Gelen pencereden blok halinde değilde basamaklı gösterimi seçiyoruz. Yanlardaki önizleme görünümü, seçimlerimizin nasıl bir düzende olacağı hakkında fikir sahibi olmamızı sağlıyor.



Buradaki pencerede farklı seçeneklerde stiller var. Ben Slate yi seçtim ve next dedik.



Next dedikten sonra rapor için seçtiğimiz bilgiler doğrultusunda bir özet sayfası geliyor. Finish diyoruz.



Finish dedikten sonra Report.rdlc sayfamız aşağıdaki gibi olacaktır.



Oluşturduğumuz raporu web sayfasında görüntüeyebilmek için Toolbox penceresinden Reporting altında bulunan MicrosoftReportViewer nesnesini Default.aspx sayfamıza sürükleyip bırakıyoruz.



Default.aspx sayfası aşağıdaki gibi gözükecek. Burada ReportViiewer Tasks altında Choose Report seçeneğinden Report.rdlc nesnesini seçiyoruz. seçme işleminden sonra ObjectDataSource'un geldiğini görüyoruz.



Projemizi çalıştırdığımızda ekran görüntüsü aşağıdaki gibi olmaktadır. Burada printer ikonuna tıkladığımızda bilgilerin çıktısını yazıcıdan alabiliriz. Bunun haricinde Export butonu bölümünden bilgilerimizi exel veya pdf formatında kayıt edebiliriz.



Görüldüğü gibi basit bir şekilde daha önceden oluşturduğumuz veri tabanındaki bilgileri rapor halinde düzgün bir şekilde gösterebildik. Tabiki raporlama bu kadar basit işlemlerle sınırlı değil. Konunun bütünlüğünü bozmamak adına detaylara girmedim sadece raporlamanın nasıl yapıldığını anlatmaya çalıştım. Belki bu konunun devamı niteliğinde ikinci bir dökümanda detaylarını ele alabilirim.
Hepinize kolay gelsin görüşmek üzere.

Yeni Konular

by Gökhan Eser 15. Aralık 2009 22:34

Merhaba;

Sayfama sınavlarım nedeniyle uzun bir zamandır içerik giremiyordum. Bu yazımıda İstanbuldan biraz uzaklarda karalıyorum.
Sayfama olan ziyaretleri ara ara kontrol ederim ve domainden gelen sadık ziyaretçi sayısında sürekli bir artış var.  Hayırlısıyla bu dönemi atlattıkdan sonra kafamda olan konularla ilgili yazılarımı tekrar yayınlamaya başlayacağım. İşe yarar konular olacağını söyleyebilirim. Bundan sonraki konularımda sadece yazı şeklinde değilde görsel anlatımlarada yer vermeyi düşünüyorum. Düşündüğüm konulardan bir kaçı şöyle olacak.

* Asp.net ile raporlama sistemi
* Asp.net ile session işlemleri
* Üye Login işlemleri
* jQuery

 

Tags:

Genel

Google'dan Yeni Bir Programlama Dili: Go

by Gökhan Eser 24. Kasım 2009 12:13

Microsoft ile Google arasındaki rekabet; Arama motoru, tarayıcı, işletim sistemi derken. En sonunda programlama dilleri kısmında da kendisini gösterdi. Google yeni bir programlama dili çıkardı ve adı Go olarak duyuruldu. Google’ın yazılım mühendislerinden Rob Pike, uygulama geliştirmenin giderek zorlaştığını gördüklerini ve bunu basitleştirmek adına böyle bir projeye imza attıklarını belirtti. 2 yıl önce geliştirme çalışmaları başlayan Go’nun üzerinde çalışmak için ise geçtiğimiz yıl bir ekip oluşturuldu. Web sunucuları, depolama sistemleri ve veritabanı alanlarında uygulama geliştirmeyi sağlayacak olan Go'nun, yapılan katkılarla diğer alanlarda da kullanılabilir hale getirileceği belirtiliyor. Açık kaynak kodlu olan Go Programlama Dili, geliştiricilerinde katkılarına sunuluyor. Microsoft ile Google'ın rekabetleri bitecek gibi değil. Bakalım süreçler nasıl gelişecek.

Go programlama dili hakkında ayrıntılı bilgi almak için http://golang.org/ sitesini inceleyebilirsiniz.

İsterseniz Go Programlama Dili seminerinede göz atabilirsiniz.

İşletim Sistemini Öğrenmek {C# - Asp.net}

by Gökhan Eser 4. Kasım 2009 23:14

Bu küçük uygulamada C# ile işletim sisteminin türünü bulmayı öğreneceğiz. Uygulamamızı çalıştırdığımızda kullanılan sistemin Windows mu yoksa Unix tabanlımı olduğunu kontrol edeceğiz. Örneğimizi hem windows form application olarak hemde asp.net projesi şeklinde yapıp farklı kullanım alanlarına değineceğiz.

Windows Form Application
Ben formun tasarımını bir adet label ve groupBox kullanarak aşağıdaki gibi hazırladım.

Gerekli Kodlar

Program çalıştığında ekran görüntüsü aşağıdaki gibi olacaktır.




Asp.net Projesi
olarak
Öncelikle basit olarak işletim sistemi bilgilerini yazdıracağımız sayfanın tasarımını yapalım. Sayfanın kod ve dizayn kısmı bu şekilde olacak.



Şimdi asıl işlemi gerçekleştirecek olan kodlarımızı yazalım. Bunun için Default.aspx.cs kısmına geçiyoruz. Burda Page_Load yani sayfa yüklendiğinde çalışmasını istediğimiz kodu yazıyoruz. Bu da aşağıdaki gibi olacaktır.



Projemizi çalıştırdığımızda sayfa görüntüsü aşağıdaki gibidir.



Evet basit bir şekilde C# kullanarak işletim sisteminin nasıl bulunacağını öğrendik. Fakat şu sesi duyar gibiyim. Yahu biz bunu zaten windows ortamında .exe olarak yaptık çalıştırdığımız platform belli unix yazacak hali yok ya diyebilirsiniz. Sırf bunun için uygulamayı asp.net üzerinden gösterdim. Bu şekilde olunca sayfamıza giren kişilerin işletim sistemi bilgilerini öğrenmiş olacağız. Yani giren kişilerin platformundan bağımsız bir şekilde işletim sistemi bilgisini almış olacağız. Eğer form uygulamasını linux üzerinde de çalıştırmak isterseniz bu sefer örneğimizi Mono ile yazmalısınız.
Herkese kolay gelsin. İyi çalışmalar..

 

OperatingSystemVersion.rar (390,60 kb)

OSVersionAsp.net.rar (113,82 kb)

29 Ekim Cumhuriyet Bayramı

by Gökhan Eser 29. Ekim 2009 10:45

Tüm dünyadaki önemli günlerde jest yapan Google, 29 Ekim Cumhuriyet Bayramı'nı da unutmamış. Bugün saat 00:30 gibi Google'a girdiğimde Cumhuriyet Bayramı için yapmış olduğu sürpriz logosunu gördüm. Gerçi Google'ın bu tarz olaylarına alıştık ama hatırlanmak her zaman için güzeldir.

İşte Google'nın Cumhuriyet Bayramı için kullandığı logo...

 

Tags:

Genel

Powered by BlogEngine.NET 1.5.0.7

Gökhan Eser 2009


Madenci
11 Temmuz 1985

Son Yorumlar

Comment RSS

Calendar

<<  Eylül 2010  >>
PaSaÇaPeCuCuPa
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

View posts in large calendar
Web Statistics