Uzmanına Sor

Archive for the ‘C#’ tag

Deflate Stream – Compress & Decompress

without comments

Merhaba, üzerinde çalışmakta olduğum projede bugun yapmış olduğum bir işlemin kodlarını sizinle paylaşmak istiyorum. Senaryo aslında çok derin, ama ben kısaca bahsedeyim. Kullanıcı bir Windows App yardımıyla SQL’e dosya yükler, veya bu dosyayı download eder. Tabi bu aşamada önemli olan şey içeriye yüklenen verinin boyutunun yüksek olabileceğinden dolayı bu dosyanın içeriğini sıkıştırarark yüklemektir. Veriyi database’de tutacagımız alan BINARY tipindedir. Buyrun kodlar.

Dosyayı OpenFileDialog ile kullanıcıdan seçtiriyorum, ve seçilen dosyanın path’ini aşağıdaki function’a gönderiyorum.

   1:  public byte[] FileToByteArray(string filePath)
   2:          {
   3:              FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
   4:              BinaryReader br = new BinaryReader(fs);
   5:   
   6:              long totalBytes = new FileInfo(filePath).Length;
   7:   
   8:              byte[] buffer = br.ReadBytes(Convert.ToInt32(totalBytes));
   9:              bufferSize = totalBytes;
  10:   
  11:              fs.Close();
  12:              fs.Dispose();
  13:              br.Close();
  14:   
  15:              return Compress(buffer);
  16:          }

Bu function oluşturduğu byte[] değerlerini Compress isimli aşağıdaki fonksiyon gönderiyor.

   1:  public static byte[] Compress(byte[] data)
   2:          {
   3:              MemoryStream ms = new MemoryStream();
   4:              DeflateStream ds = new DeflateStream(ms, CompressionMode.Compress);
   5:              ds.Write(data, 0, data.Length);
   6:              ds.Flush();
   7:              ds.Close();
   8:              return ms.ToArray();
   9:          }

 

Bir dosyayı alarak, sıkıştırdık ve DB’ye kayıt etmeye hazır hale getirdik.

Şimdide DB’deki dosyayı kullanıcının download etmesini sağlayacak kod bloğunu yazıyorum.

   1:  FolderBrowserDialog dialog = new FolderBrowserDialog();
   2:                  dialog.ShowDialog(this);
   3:   
   4:                  if (!string.IsNullOrEmpty(dialog.SelectedPath))
   5:                  {
   6:                      string file = String.Format("{0}\\{1}", dialog.SelectedPath, ocd.FILE_NAME);
   7:   
   8:                      FileStream fs = new FileStream(file, FileMode.OpenOrCreate, FileAccess.Write);
   9:                      BinaryWriter bw = new BinaryWriter(fs);
  10:   
  11:                      bw.Write(Decompress(ocd.FILE_DATA.ToArray()).ToArray());
  12:                      bw.Flush();
  13:   
  14:                      bw.Close();
  15:                  }

Burada 11. satırda çağırılan function’ın almış oldugu ocd.FILE_DATA, bizim SQL’de depolamış olduğumuz binary verisidir.

Gönderildiği Decompress fonksiyonunun içeriği aşağıdaki gibidir.

   1:  public byte[] Decompress(byte[] data)
   2:          {
   3:              const int BUFFER_SIZE = 256;
   4:              byte[] tempArray = new byte[BUFFER_SIZE];
   5:              List<byte[]> tempList = new List<byte[]>();
   6:              int count = 0, length = 0;
   7:   
   8:              MemoryStream ms = new MemoryStream(data);
   9:              DeflateStream ds = new DeflateStream(ms, CompressionMode.Decompress);
  10:   
  11:              while ((count = ds.Read(tempArray, 0, BUFFER_SIZE)) > 0)
  12:              {
  13:                  if (count == BUFFER_SIZE)
  14:                  {
  15:                      tempList.Add(tempArray);
  16:                      tempArray = new byte[BUFFER_SIZE];
  17:                  }
  18:                  else
  19:                  {
  20:                      byte[] temp = new byte[count];
  21:                      Array.Copy(tempArray, 0, temp, 0, count);
  22:                      tempList.Add(temp);
  23:                  }
  24:                  length += count;
  25:              }
  26:   
  27:              byte[] retVal = new byte[length];
  28:   
  29:              count = 0;
  30:              foreach (byte[] temp in tempList)
  31:              {
  32:                  Array.Copy(temp, 0, retVal, count, temp.Length);
  33:                  count += temp.Length;
  34:              }
  35:   
  36:              return retVal;
  37:          }

 

İşte bu kadar basit. Bu sistem sayesinde her türlü verinin içeriğini Compress ederek DB’de saklayabilirsiniz. Hatırladığım kadarıyla SQL’de binary field’ı max 2 GB’a kadar verı tutabiliyor. 4 GB’da olabilir tabi :)

Written by Serkan Hekimoğlu

August 5th, 2010 at 2:31 pm

Posted in C#

Tagged with , ,

C# Settings(Ayarlar) Dosyasının Kullanımı

without comments

Giris

.Net FrameWork 2.0 oturum ve uygulama arasında kalan degerlere erismemize ve yeni degerler  olusturmamıza izin verir. Bu degerler "Settings" olarak adlandırılır. Settings dosyası kullanımına ihtiyaç duyulan uygulama bilgilerini yada kullanıcı ayarlarını temsil eder. Örnegin; uygulamanın renk seması için kullanıcı ayarlarını saklayan ayarları olusturabiliriz. Yada uygulamada kullanılan bir database’e belirlenen bir ConnectionString”i saklayabilirsin. Settings(Ayarlar) kullanıcıların ayarlarını saklayan profilleri olusturmamıza ve kodun uygulama dısında olan bilgilerine erismemize izin verir.

Uygulama Ve Kullanıcı Ayarları

  Settings’lerin 4 adet özelligi vardır; 

1.      Name: Çalısma Zamanında ayarın degerine erismek için kullanılan addır.
2.      Type: Ayarları temsil eden .Net Framework tipidir. Kullanıcı ayarlarını saklar.
3.      Scope: Çalısma zamanında ayarlara nasıl erisilecegini temsil eden özelliktir.
4.      Value: Ayarlara erisildiginde geriye döndürülecek olan degerdir.

Yeni Bir Settings Dosyası Olusturmak için;

1.      Projemiz üzerinde sag tıklayıp, Add New Item

2.      Settings Dosyasını seçeriz ve projemize ekleriz.

 

image

Settings dosyasını projemize ekledik, görünüm olarak biraz inceleyelim;

image

Yukarıda da belirttigimiz gibi Settings dosyalarının 4 adet özelligi var. Name, Type, Scope, Value.

Artık örnegimize geçelim ve olusturdugumuz Settings dosyasını kullanalım.

Örnek

Örnegimizde northwind database’ne baglanıp connection string’i Settings dosyası içerisinden çagıracagız. Formumuzun baslıgını, arka plan rengini ve font adını settings doyası içerisinden alacagız.

Formumuzun üzerine bir adet grid ekleyelim. Bu grid içerisinde Categories Tablosundaki kayıtları listeleyecegiz.

image

 

Simdi Kayıtlarımızı listeleyecek kodları yazalım.

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Data.SqlClient;

namespace SettingsFile

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

        SqlConnection Cnn;

        SqlDataAdapter Dadp;

        DataSet Dset;

        private void Form1_Load(object sender, EventArgs e)

        {

Cnn = new SqlConnection(sem.Default.ConnectionString.ToString());

// ConnectionString Degerini Settings dosyası içerisinden çagırdık. 

        Dadp = new SqlDataAdapter("Select * from Categories",Cnn);

        Dset = new DataSet();

        Dadp.Fill(Dset, "table");

        dataGridView1.DataSource=Dset.Tables[0];

        }

    }

}

image

ConnectionString’i settings dosyası içerisinden kullandık. Simdi Form baslıgımızı, form backgroundunu ve gridimizin font ayarını settings dosyasından yapalım

this.Text = sem.Default.FormBaslıgı.ToString();

        this.BackColor = sem.Default.ArkaPlanRengi;

        this.Font = sem.Default.FormFondu;

image

Evet tüm ayarlarımızı settings dosyası içerisinden ayarladık. Görüldügü gibi form baslıgı, background rengi ve font family settings dosyası içerisinde belirledigimiz degerelere göre geldi.
Bu makalenin de sonuna geldik, baska bir makalede görüsmek üzere basarı ve iyi günler dilerim.

Sem GÖKSU

MCP | MCAD.NET | MCTS

Örnek Kodlar için mail adresimi kullanabilirsiniz

askisem@hotmail.com

Kaynaklar
http://msdn.com

Written by Sem Goksu

August 2nd, 2010 at 8:31 am

Posted in C#

Tagged with ,

Namespace Nedir, Value ve Reference Type’ları Nedir?

without comments

Namespaces

Diger .Net dilleri gibi C#’ta .NET base class library’sinde tanımlanmıs datatype’ları kullanır. Bu classlar namespace adı altında gruplanmıstır. Namespace’e diger bir tanımlama ile classları kullanırken fonksiyonel bir sekilde ulasmamızı saglayan logic containerlar  diyebiliriz. Örnek olarak System.Windows.Forms namespace’i ni verebilirim

   1:  namespace Desta.Deneme.DenemeClasses
   2:  {
   3:  public class a()
   4:  {
   5:  Public a(){}
   6:  private string dbname;
   7:           public string dbName
   8:           {
   9:                              Get{return dbname;}
  10:                               Set{dbname=value;}
  11:            }
  12:   }
  13:  }

using kelimesi ile de namespaceler içerisinde bulunan classları projemize dajil etmis oluruz.. namespace using ile projeye dahil edildikten sonra herhangi bir period belirtmeden namespace içerisinde bulunan tanımlamalara ulasabiliriz.

using Desta.Deneme.DenemeClasses;

böylece deneme namespace içindeki tüm classlara ve içinde bulunan property ve fonksiyonlara erisebiliriz.

using ile compile islemi sırasında modüller arasında herhangi bir link tanımlamıs olmayız.

using ile ilgili ilginç bir sey ise onu alias type tanımlamak için kullanabilmemiz. Asagıdaki örnek System.Int32 type’ını intecir adıyla kullanmamızı saglar.

   1:  using intecir=System.Int32;
   2:           public class AliasOrnek
   3:  {
   4:  public static intecir Main()
   5:  {
   6:           intecir i=1;
   7:           intecir j=i+1;
   8:           System.Console.WriteLine(j);
   9:           return 0;
  10:                          }
  11:  }

System Namespace

Common Laguage Specification (CLS) bir programlama dili tarafından desteklenmesi kaçınılmaz olan bir çok datatype’ı tanımlayan zengin bir library’e sahiptir. Bu libraryde bulunan Boolean, string, integer, kronolojik ve finansal valueların hepsi System namespace’inin içerisinde yer alır.

Bütün typelar object type’ından inherit edilir. Böylece bir object’in referansı herhangi bir tipdeki degiskeni tutmak için kullanılabilir.

Long type’ın bit olarak büyüklügü 64′e çıkarılmıstır. Bu sayede Whistler ve XP platformlarında 64 bitlik programlar için bir hazırlık saglanmıstır. (64 bitlik olan bu isletim sistemleri Intel’in yeni nesil 64 bitlik islemcisi Itanium uyumludur)

System NameSpace i birçok alt kullanıcı barındırır.

System.Web

HTML ve Web kontrollerini ,güvenlik, sessionstate, konfigurasyon, bölgesel ayarlar gibi metodları barındırır.

System.Data

Genel olarak veritabanı islemlerimiz için kullandıgımız NameSpace’dir.

System.Windows.Forms

Windows Forms uygulamaları için özel ayarları barındırır.

System.Drawing

Yazdırma ve resim isleme ile ilgili islemlerde kullandıgımız NameSpace’dir.

System.XML

XML islemleri için kullanılmktadır.

süphesiz .Net Framework ün bize sundugu bu zengin kütüphane System NameSpace’i ile sınırlı degil.

Value ve Reference Tipleri

C# programlama dilinde bildiginiz gibi veri türlerini Reference Types Value Types olmak üzere iki kısma ayırıyoruz.

.NET dilleri tarafından kullanılan yada yaratılan her class value ve referans tipleri olarak kategorilendirilebilir. Value ve referans tipleri iki belirgin farklılık gösterir : hafızada tutuldukları yerler ve atama islemi içeriklerdeki davranıslarına göre.

Value tipler stackte tutulur, her iki value degeri için yapılmıs atama islemi ile hafızada birbirinin kopyası iki bölüm olusturulur. Referans tipler ise heap’de tutulur. Her iki referans degeri için yapılmıs atama islemi ile memory’deki tek bir yere iki ayrı referans olusturulur.

Asagıdaki kod parçasında bir referans türüne ve bir de deger türüne null degerler atanmaya çalısılmaktadır.

   1:  using System;
   2:  namespace c1
   3:  {
   4:      class c1
   5:      {
   6:          static void Main(string[] args)
   7:          {
   8:              string refTuru=null;
   9:              int dTuru=null;
  10:          }
  11:      }
  12:  }
  13:  Bu uygulamayı derlemeye çalıstıgımızda Cannot convert null to 'int' because it is a value type hatasını alırız. Aynı durumu kendi tanımladıgımız referans ve deger türleri içinde gerçeklestirebiliriz. Asagıdaki kod parçasında bu durum örneklenmistir.
  14:  using System;
  15:  namespace c2
  16:  {
  17:      class c2
  18:      {
  19:      }
  20:      struct Dvd
  21:       {
  22:       }
  23:      class C1
  24:      {
  25:          static void Main(string[] args)
  26:          {
  27:              Kitap kitap=null;
  28:              Dvd dvd=null;
  29:          }
  30:      }
  31:  }

Bu kod parçasındada aynı hatayı alırız. Çünkü struct’ lar deger türüdür ve bu sebeple null degerler alamazlar. Oysaki aynı istisnai durum class gibi kendi tanımlamıs oldugumuz referans türleri için geçerli degildir. Peki deger türlerinin null deger içerme ihtiyacı ne zaman dogabilir? Bir veritabanı uygulamasını göz önüne alalım. Bu tabloda int, double gibi deger türlerine karsılık gelecek alanların var oldugunu düsünelim. Veri girisi sırasında bu int ve double degiskenleri null olarak tabloya aktarmak isteyebiliriz. Ya da tablodan veri çekerken, deger türü karsılıgı alanların null deger içerip içermedigini anlamak isteyebiliriz. Iste bu gibi durumlarda deger türlerinin null veriler içerebilecek yapıda olması, kodumuzun ölçeklenebilirligini arttıracak bir yetkinlik olarak düsünülebilir. Veritabanları için geçerli olan bu senaryoyu göz önüne almadan önce C# 2.0 için deger türlerinin nasıl null veriler tasıyabilecegini incelemeye çalısalım. Deger türlerinin C# 2.0 için iki versiyonu vardır. Nullable deger türleri ve Non-Nullable deger türleri. Bir deger türünün null degerler içerecek tipte olacagını belirtmek için ? tip belirleyicisi kullanılır.

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Text;
   4:  namespace TestOfNullableValues
   5:  {
   6:      class P
   7:      {
   8:          static void Main(string[] args)
   9:          {
  10:              int? maas;
  11:              double? pi;
  12:              maas = null;
  13:              pi = null;
  14:          }
  15:      }
  16:  }
  17:  Yukarıdaki kod parçası sorunsuz olarak derlenecek ve çalısacaktır
  18:           Asagıdaki kod ile iki value degerine atama yapılmakta ve hafızada iki deger kopyası olusturulmaktadır. (kodu derleyip çalıstırmak için /unsafe switch'ini kullanın)
  19:  using System;
  20:  public class Simpleclass
  21:  {
  22:     public static int Main()
  23:  {
  24:  int i;
  25:  int j;
  26:  i=5;
  27:  j=i;
  28:  Console.WriteLine("i="+i);
  29:  Console.WriteLine("j="+j);
  30:  unsafe
  31:  {
  32:           if (&i==&j)
  33:           {
  34:           Console.WriteLine("i ve j'nin adresleri aynı");                
  35:           }
  36:           else
  37:           {
  38:           Console.WriteLine("i ve j'nin adresleri farklı");               
  39:           }
  40:  }
  41:  Console.ReadLine();
  42:  return 0;
  43:  }
  44:  }
  45:           Bu kod ise iki referans degerine atama yapmakta ve hafızadaki tek kopyaya ulasmaktadır.
  46:  using System;
  47:  public class ReferenceType
  48:  {
  49:  public int MyValue;
  50:  }
  51:  public class SimpleClass
  52:  {
  53:  public static int Main()
  54:  {
  55:  ReferenceType i;
  56:  ReferenceType j;
  57:  i=new ReferenceType();
  58:  i.MyValue=5;
  59:  j=i;
  60:  Console.WriteLine("i.MyValue="+i.MyValue);       
  61:  Console.WriteLine("j.MyValue="+j.MyValue);       
  62:  unsafe
  63:  {
  64:           if (i==j)
  65:           {
  66:           Console.WriteLine("i ve j aynı adreste");                               
  67:           }
  68:           else
  69:           {
  70:           Console.WriteLine("i ve j farklı adreste");
  71:           }
  72:  }
  73:  Console.ReadLine();
  74:  return 0;
  75:  }
  76:  }

Primitives olarak adlandırılan pek çok degisken tipi C#’da value tipi olarak kabul edilir : integer value tipi gibi. Aynı zamanda struct ile tanımlamanan user tipler’de value tipinde tanımlamalardır.

Bir sonraki makalemde görüsmek üzere

Written by Sem Goksu

August 2nd, 2010 at 8:25 am

Posted in .NET, C#

Tagged with , , , ,

Create Your Own RSS (Real Simple Syndication) Reader With .NET

without comments

Merhaba, bu makalemde sizlerle .Net platformu uzerinden kendi RSS Reader’imizi olusturmaya dair ornek yapacagim. Oncelikle RSS nedir? RSS çeşitli internet siteleri tarafından yayınlanan haber vb. içeriğin tek bir ortamdan topluca izlenebilmesine olanak sağlayan yeni bir içerik besleme yöntemidir. RSS yöntemini destekleyen sistelerin hazırladıkları XML biçimli dosyalara bir çok programla erişmek mümkündür. XML okuyucusu olan bu programlar, web gezgini veya e-posta istemcisi olabileceği gibi sadece RSS içereriği izlemek için hazırlanan masaüstü programları da olabilir. RSS Urllerini ister DB de muhafaza eder her seferinde elle yazmaya gerek kalmadan DB’den okuruz, veya benim ornekte yapacagim gibi tek bir URL kullanarakta yapilabilir.

Oncelikle Rss Reader icin bir windows app project olusturalim.

image

 

Hemen ardindan sekilde UI tasarimini yapalim.

 

image

Globalde tanimlanan degiskenler:

XmlTextReader rssReader;
XmlDocument rssDoc;
XmlNode nodeRss;
XmlNode nodeChannel;
XmlNode nodeItem;
ListViewItem rowNews;

 

Read Button Click Eventinde yazilacak kod :

   1:  rssReader = new XmlTextReader(txtUrl.Text);
   2:              rssDoc = new XmlDocument();
   3:   
   4:              rssDoc.Load(rssReader);
   5:   
   6:   
   7:              for (int i = 0; i < rssDoc.ChildNodes.Count; i++)
   8:              {
   9:   
  10:                  if (rssDoc.ChildNodes[i].Name == "rss")
  11:                  {
  12:   
  13:                      nodeRss = rssDoc.ChildNodes[i];
  14:                  }
  15:              }
  16:   
  17:              for (int i = 0; i < nodeRss.ChildNodes.Count; i++)
  18:              {
  19:   
  20:                  if (nodeRss.ChildNodes[i].Name == "channel")
  21:                  {
  22:   
  23:                      nodeChannel = nodeRss.ChildNodes[i];
  24:                  }
  25:              }
  26:   
  27:              lblTitle.Text = "Title: " + nodeChannel["title"].InnerText;
  28:              lblLanguage.Text = "Language: " + nodeChannel["language"].InnerText;
  29:              lblLink.Text = "Link: " + nodeChannel["link"].InnerText;
  30:              lblDescription.Text = "Description: " + nodeChannel["description"].InnerText;
  31:   
  32:              for (int i = 0; i < nodeChannel.ChildNodes.Count; i++)
  33:              {
  34:   
  35:                  if (nodeChannel.ChildNodes[i].Name == "item")
  36:                  {
  37:                      nodeItem = nodeChannel.ChildNodes[i];
  38:   
  39:   
  40:                      rowNews = new ListViewItem();
  41:                      rowNews.Text = nodeItem["title"].InnerText;
  42:                      rowNews.SubItems.Add(nodeItem["link"].InnerText);
  43:                      listBox1.Items.Add(rowNews.Text);
  44:                  }
  45:              }

Ve son olarak eklemis oldugumuz listBox’in Selected Index Changed Eventine eklenecek kod:

 

URL Text Box’ina yazilan Rss URL’i Read Buttonunda kullanilacak olan URL’dir, ve List Box’a URL icerisindeki veriler gelir.

 

if (listBox1.SelectedItems.Count == 1)
            {

                for (int i = 0; i < nodeChannel.ChildNodes.Count; i++)
                {

                    if (nodeChannel.ChildNodes[i].Name == "item")
                    {
                        nodeItem = nodeChannel.ChildNodes[i];

                        if (nodeItem["title"].InnerText == listBox1.SelectedItems[0].ToString())
                        {
                            txtContent.Text = nodeItem["description"].InnerText;

                            break;
                        }
                    }
                }
            }

Written by Serkan Hekimoğlu

June 7th, 2010 at 10:46 am

Posted in .NET

Tagged with , , ,

ASP.Net Samples – Part I : Application Cache, and Cookies

without comments

Merhaba arkadaslar, bu makalemde sizlere ASP.NET icinde bulunan bir cok temel konudan bahsedecegim, ve bunlarla ilgili ornekler gostericem. Kisaca uzerinde duracagimiz konulari ve ornekleri listeleyecek olursak;

  1. Application Cache Sample
  2. Cookie Sample
  3. File Upload Sample
  4. Forms Authentication Sample
  5. Mail Send Sample
  6. Membership Sample
  7. Query String Sample
  8. Session State Sample
  9. Session LogIn Sample
  10. Trace Sample
  11. Web Part Sample
  12. ve Global.asax yapisi.

 

1- Application Cache Sample:

Girmis oldugunuz herhangi bir web sitesinde calisan applicationlarin, sizin localinizde calismasini saglayan yapi Cache yapisidir. Yani verilerin bellekte tutulmasidir. Buna ornek olarak; veritabanimizda bulunan bir tablodaki bilgileri alip .aspx sayfasinda bir gride basacagiz.

public DataTable GetCustomerData()
    {
        DataTable retVAL = new DataTable("Customers");
        SqlDataAdapter SqlAdp = new SqlDataAdapter("SELECT * FROM Customers", 
        ConfigurationManager.ConnectionStrings["Northwind"].ConnectionString);
        try
        {
            SqlAdp.Fill(retVAL);
        }
        catch (Exception ex)
        {
            retVAL = null;
        }
        finally
        {
            SqlAdp.SelectCommand.Connection.Dispose();
        }
        return retVAL;
    }

Bu fonksiyonumuz, efsanevi DB olan Northwind’in :) Customers tablosundan veri aliyor, ve bunu adi Customers olan bir DataTable icerisinde tutuyor. Peki gelelim bu yapiyi Cache kullanarak cagirmaya.

protected void Page_Load(object sender, EventArgs e)
    {
        if (Cache["CustomerData"] == null)
        {
            Cache.Add("CustomerData", GetCustomerData(), null,
DateTime.Now.AddMinutes(3),
 System.Web.Caching.Cache.NoSlidingExpiration,
System.Web.Caching.CacheItemPriority.Default, null);
        }

        GridView1.DataSource = Cache["CustomerData"];
        GridView1.DataBind();
    }

Ustte gormus oldugunuz Kod blogunda ise CustomerData isimli bir Cache olusturuyoruz, ve GetCustomerData() fonksiyonunu kullanarak, datayi Cache’e gomuyoruz. Cache’i silmek isterseniz kullanacaganiz kod adi uzerinde

Cache.Remove("CustomerData");

 

2- Cookie Sample

Cookies kelimesi aslinda hemen hemen her bilgisayar kullanicisinin anlamina ve islevine hakim oldugu bi kavramdir. Gunumuzde girdigimiz web sitelerinde, sitenin bizi tanimasi icin bazi bilgiler gireriz (e-mail, password, kullanici adi gibi). Bu islemi siteye her girisimizde tekrarlamamak adina, site Local diskinizde sizi taniyabilmek adina text dosyasi olusturur. Peki bu islem ne kadar guvenlidir diye soracak olursaniz, bana kalirsa cookie kullanmak pekte guvenli bi olay degildir. Girdiginiz sitelerde “Beni Hatirla” checkboxlari genelde cookie olusturma amaciyla kullanilir. Localinizde olusturulan bu text dosyalari bir komut dosyasi veya virus degildir, sadece size ozel bir tanimlamadir, ve tanimlamayi olusturan web sunucusu tarafindan okunabilir. Cookie ornegimize baslamadan once sekildeki gibi bir .aspx sayfasi olusturalim.

 

image

Button’umuzun Click eventinde su kodlari kullaniyoruz.

 

protected void Button1_Click(object sender, EventArgs e)
    {
        HttpCookie ck = new HttpCookie("SerkanCookie");
        ck.Values.Add("Saat", DateTime.Now.ToLongTimeString());
        ck.Values.Add("Deneme", TextBox1.Text);
        ck.Expires = DateTime.Now.AddDays(1);
        Response.Cookies.Add(ck);
    }

 

Bu islem ile, icerisinde textBox’imizi degerini barindiran bir Cookie yaratiyoruz, ve bu cookie icin bir expire suresi belirtiyoruz.

ck.Expires(DateTime.Now.AddDays(1)); komutu ile Cookie’mizin 1 gun sonra expire olacagi bilgisini belirtiyoruz.

Ve Form Load kisminda, su kodlari uyguluyoruz,

protected void Page_Load(object sender, EventArgs e)
    {
        if (Request.Cookies["SerkanCookie"] != null)
        {
            HttpCookie serkan = Request.Cookies["SerkanCookie"];
            TextBox1.Text = serkan["Saat"] + " " + serkan["Deneme"];
        }
    }

 

Boylece Form’u tekrar Run ettigimiz zaman, sistem kayitli olan Cookie dosyasini bulmaya calisip icindeki bilgileri textBox’a yazar.

2. makalemde File Upload ve Forms Authantication konularina deginecegim.

Written by Serkan Hekimoğlu

January 19th, 2010 at 6:14 pm

How to use LinQ (Language Integrated Query) – Part 1 – How to create Object Model

without comments

Merhaba arkadaşlar,

Bu makalemde size basit bir sekilde SQL de olusturdugumuz DataBase’imizi Visual Studio’da nasil Object Model’a ceviririz bundan bahsedecegim. Ilerleyen bolumlerde, basit sorgular gonderecegiz, ve basit insert islemleri yapacagiz.

 

Ilk olarak SQL’de bir DB acip bir adet tablo olusturuyoruz, ve 3 adet kolon ekliyoruz. ID alanimiz int tipindedir ve primary keydir. Identity Specification’i true’dur. DB adi SerkanHekimoglu, tablo adi KISILER’dir.

 

image

 

 

Ikinci olarak Visual Studio’yu aciyoruz, ve bir adet Windows Application Projesi ekliyoruz.

 

image

 

Projemizi olusturduktan sonra sira Server Explorer’dan localimizdeki veya network ortamindaki SQL Server’a ulasiyoruz. Server Explorer ekranindaki seceneklerden Add New Connection secenegini seciyoruz.

image

 

Ardindan acilan pencereden SQL Server Name bilgilerini giriyoruz. (Benim sql im su an localde calistigindan dolayi, local server name adresini veriyorum. Ornegin network uzerindeki bi serverda bulunan SQL e baglanacaiginiz zaman server IP yazmaniz yeterli olacaktir : 10.0.0.1 gibi..)

 

image

 

Test Connection seceneginie tiklayip Success mesajini aldiktan sonra OK buttonuna basiyoruz ve Visual Studio uzerinden SQL’e connection acmis bulunuyoruz.

 

image

 

 

image

 

Simdi geldin en son kisima. Sirada, Windows Application projemize Data Object Model’i ekleme sirasi.

Projemize sag click yapiyoruz ve Add New Item kismindan Object Modelimizi ekliyoruz.

image

 

Object Modelimiz projemize sorunsuz bir sekilde eklendikten sonra, object modelimize cift click yaptigimizda karsimiza bos bir ekran gelicektir. Server Explorer’a ekledigimiz DB connectionumuzu acip, Database’den ekledigimiz DB’yi. tablolardandan KISILER tablosunu buluyoruz ve bos ekrana surukle – birak islemini yapiyoruz.

 

image

 

Son olarakta Form Load kismina gelip Object Modelimiz ile bu sekilde iletisime geciyoruz.

image

 

Gordugunuz gibi bu kadar basit :)

 

Ikinci kisimlarda LinQ (Language Integrated Query) kodlari kullanarak artik tablomuza INSERT, UPDATE, DELETE, SELECT komutlari yollamaya baslayacagiz.

Written by Serkan Hekimoğlu

December 28th, 2009 at 8:28 pm

Posted in C#

Tagged with , , ,