XML(EXTENSİBLE MARKUP LANGUAGE-genişletilebilir etiketleme dili)

19 Ağustos 2010 – 11:29 Yazar: Derya GUNDUZ

 

Bağımsız bir kuruluş olan W3C (World Wide Web Consortium) organizasyonu tarafından tasarlanan ve bağımsız bir yapıya sahip olan XML (extensible Markup Language),kişilerin kendi etiketlerini tanımlayarak bu etiketler ile hiyerarşik yapı kurabildikleri ,bunları istedikleri zaman değiştirebildikleri ; esnek, teknolojiden -platformdan bağımsız text tabanlı bir meta dilidir. Xml açılımının içerdiği “markup” onun tagler ile kullanıldığını,”exensible” de onun genişletilebildiği yani standart taglerin değil de kendimizin oluşturduğu farklı tagleri de kullanabileceğini ifade eder. Html de bir markup dilidir fakat Xmli Htmlden ayıran en önemli özellik standart taglerin değil de kişilerin tanımladıkları taglerin kullanabiliyor olmasıdır.

Şimdi teknolojiden-platformdan bağımsız derken ne kastettiğimi biraz daha açmak istiyorum:

Günümüz teknolojisi o kadar zenginleşti ve çeşitlendi ki…..Farklı farklı işletim sistemleri,programlar… Bunlar bir yana bir programın bile birden çok farklı versiyonu var. Bu kadar çeşitliliğin olması şüphesiz yanında uyum problemlerini getirecektir.Bir dosyayı aynı programın farklı versiyonlarında çalıştırmak istediğimizde bile zaman zaman problem yaşamaktayız,kaldı ki farklı program ve işletim sistemlerinde yaşanmasın.Bütün teknolojilerde ortak olarak açılan ve çalışan tek dosya türü text dosyalarıdır(notepad).Ama notepad ile en basitinden bir tablo oluşturup bunun üzerinde çalışmak istediğimizde bile bu tabloyu organize etmek baya bir zor olacaktır:kolonların sırası kayabilir,karışabilir….Bunun yerine tablolarımızı hiyerarşik yapı ile xmle atmak işimizi bayağı bir kolaylaştıracaktır.Xml verinin hızlı bir şekilde sogulanmasını,değiştirilmesini,transfer edilmesini,verinin içerik bilgisi ile saklanmasını(bu noktada htmlden ayrılır) sağlar.Xmlin güzel yanlarından birtanesi de uluslararası bir standarttır ve evrensel bir formattır ve firewallara takılmaz(text tabanlı olmasından kaynaklı).

Bir dosyanın xml dosyası olduğu dosyanın başında yazan <?xml version=”1.0″ encoding=”utf-16”?> ifadesinden anlaşılır.Htmldeki gibi açılan tag kapanmalıdır.Genel anlamda xml dosya akışı şu şekilde olur.

dosya akışı şu şekilde olur.

<?xml version=1.0 encoding=utf-8 ?>

<kategoriler>

  <kategori>

    <kategoriID>1</kategoriID>

    <kategoriAdi>meyveler</kategoriAdi>

  </kategori>

  <kategori>

    <kategoriID>2</kategoriID>

    <kategoriAdi>sebzeler</kategoriAdi>

  </kategori>

</kategoriler>

Veri tabanından veri çekerek xmle yazdırılabilir ve gerektikçe xmlden okunabilir.Bu şekil bir kullanım daha mantıklı olacaktır,çünkü veri tabanından bilgi almak istediğimizde program her defasında veri tabanına bağlanmak zorunda kalacaktır,oysa ki bir defa bağlanıp veri tabanındakileri xmle yazdırıp gerektikçe xmlden okumak performans,veri tabanını çok meşgul etme ve daha birçok açıdan daha olumlu sonuçlar yaratacaktır.Bu okuma ve yazdırmaları yapmak üzere tanımlanmış “ReadXml ve WriteXml” nesneleri vardır.

WriteXml şu şekilde kullanılır:

SqlConnection conn = new SqlConnection(“server=derya-pv\\sqlexpress;database=Northwind;integrated security=true”);

            SqlDataAdapter adp = new SqlDataAdapter(“select CategoryID,CategoryName from Categories”, conn);

            DataSet dt = new DataSet();

           adp.Fill(dt);

            dt.WriteXml(dosya);

Böylece veri tabanındaki bilgiler xmle yazılmış oldu.Her veri çekmek istediğimizde “ReadXml” ile verileri xmlden alıp işleyebiliriz.Yada satır satır okuma ve yazma yapmak için XmlTextReader ve XmlTextWriter da kullanılabilir.

Oluşturulan Xml üzerinde update,delete işlemleri için de “XmlDocument” ve “XmlNode” nesneleri oluşturulup kullanılır.

Kimi zaman belirli bir kısmı üzerinde değişiklik yapmak isteriz,bu durumda hepsini belleğe almak yerine sadece değiştirmek istediğimiz kısmı almalıyız.Bunun içinde şu nesneler kullanılmalı:

XPathDocument()-xml şemayı okuyacak nesne

XPathNavigator()-doküman üzerinde gezinecek nesne

XPathNodeNaveigator()-nodelar üzerinde tek tek gezinecek nesne

DERYA GÜNDÜZ

Bookmark and Share

Internet Information Services(IIS) Nedir?

08 Ağustos 2010 – 13:28 Yazar: Derya GUNDUZ

 

 

IIS kavramını ilk olarak ASP.NET de çalışmaya başladığım bugünlerde duydum.Staj yaptığım Bilgeadam kurumunda girdiğim derslerde hocalarımdan birkaç defa IIS duymam üzerine böyle bir araştırma yapma gereği duydum.ASP.NET deki projelerimizi çalıştırırken kullandığımız serverin IIS olduğunu söylemişlerdi.Şimdi de yaptığım araştırmaların toplamını sizlerle paylaşayım.

IIS nedir?

IIS Microsoft Windows tabanalı işletim sistemleri için kullanılan web sunucudur(server).IIS Windows sistemlerinde web tabanlı projelerin geliştirilip yayınlanabilmesi için gerekli bir altyapııdr.Client-server ilişkisinde client http protokolü üzerinden servera talepte bulunduğunda bu talebi bilgisayarınızda karşılayan yapı IIS olacaktır.

IIS Sürümleri:

Windows XP Home Edition işletim sisteminde IIS bulunmamaktadır.IIS kullanmak için Windows XP Pro işletim sistemi veya Windows’un daha üst işletim sistemlerinden birini kullanmak gerekir

İşletim sisteminizde IIS varsa ve siz Visual Studio .NET 2003’ü daha sonra kurduysanız, Visual Studio .NET 2003 sizin için IIS’i ayarlayacaktır ve .NET Framework’ü IIS’e yükleyecektir.

IIS yüklü olmayan sitemde visual Studio .NET 2003 kurarken sistem size IIS kurmanız gerektiği  ile ilgili hata verir,IIS kurduktan sonra Visual Studio .NET 2003 kurmak daha sağlıklı olacaktırr,VS’yi kurduktan sonra IIS kurarsanız hatalarla karşılaşabilirsiniz.

IIS Sürümleri:

 • Windows XP üzerinde IIS 5.1

• Windows 2000 Server üzerinde IIS 5.0

 • Windows 2003 Server üzerinde IIS 6.0

 • Windows 2008 Server üzerinde IIS 7.0

Visual Studio.NET 2005 ve daha üst sürümlerinde ASP.NET ve diğer web uygulamalarını IIS olmadan da geliştirebilirsiniz.Bu yeni gelen özellikle kullanılan server sanal IISdir,yani bizim extradan kurmamıza gerek kalmadı.Projemizi çalıştırken araç çubuğuna gelen icon sanal IISin çalıştığını gösterir,projeyi kapatana kadar orada görünür.Güvenlik amacı ile her derlemede farklı bir port üzerinden sanal IIS çalıştırılır.İconun görünümü şu şekildedir:

 

IIS Kurulumu:

Başlat/Ayarlar/Denetim Masası/Program-Kaldır/Windows Bileşenleri Yükleden Internet Information Services seçilir,işletim sistemi cdsini de taktıktan sonra IIS yüklenmiş olur.Artık yaptığınız projeler belirlenmiş dizinde(ya da siz de seçebilirsiniz) yeralır.IIS ayarlarına erişmek:

 IIS ile ilgili ayarları yapabilmek için,run(çalıştır)dan “inetmgr” yazarak IIS ayarlarına erişebiliriz,ya da denetim masasından “yönetim bileşenleri”den de erişip gerekli ayarlamaları yapabilirz.Ayar olarak örneğim session timeout   süresinin default değeri 20 dir.Biz bu değeri IIS ayarlarından değiştirebiliriz.

 

 

 

DERYA GÜNDÜZ

deryagunduz.blogspot.com

Bookmark and Share

SQL Sub Query ve Join işlemi arasında performans testi

05 Ağustos 2010 – 10:35 Yazar: Tahir MUTLU

Elimizde iki tablolu bir yapı olduğunu düşünelim, İşçiler ve Yöneticiler. Üç adet yöneticimiz ve bu yöneticilere bağlı 60000 çalışanımız olsun. Yöneticilere ait olan işçi sayılarına baktığımızda :

Select COUNT(*),yoneticiID
From tblIsci
Group By yoneticiID
Order By yoneticiID

Yonetici ID

İşçi Sayısı

1

40000

2

19999

3

1

İlk olarak 1 adet işçinin bağlı olduğu ID si 3 olan yöneti ve işçi bilgilerini sorgulayalım.

Sıra

SQL Sorgusu

Sonuç

1

SELECT isciID,
	   isciAdi,
           (SELECT yoneticiAdi 
	    FROM tblYonetici 
	    WHERE tblYonetici.yoneticiID = 
     tblIsci.yoneticiID)
     FROM tblIsci
     WHERE tblIsci.yoneticiID = 3

Etkilenen Satır Sayısı : 1

Sorgu Maaliyeti : 0.0006

2

SELECT isciID,
	   isciAdi,
	   yoneticiAdi 
  FROM tblIsci
	   INNER JOIN tblYonetici ON (tblYonetici.yoneticiID =
	   tblIsci.yoneticiID)
WHERE tblIsci.yoneticiID = 3

Etkilenen Satır Sayısı : 1

Sorgu Maaliyeti : 0.0006

Yukarıdaki 1 ve 2 numaralı testleri incelediğimizde etkilenen satır sayısı ve sorgu maaliyetleri aynı oldu. Şimdi birde etkilenen satır sayısı arttığında sorgu maaliyetinde bir değişme olacak mı ? bunu gözlemleyelim.

Sıra

SQL Sorgusu

Sonuç

3

SELECT isciID,
	   isciAdi,
           (SELECT yoneticiAdi 
	    FROM tblYonetici 
	    WHERE tblYonetici.yoneticiID = 
     tblIsci.yoneticiID)
     FROM tblIsci
     WHERE tblIsci.yoneticiID = 1

Etkilenen Satır Sayısı : 40000

Sorgu Maaliyeti : 4.326

4

SELECT isciID,
	   isciAdi,
	   yoneticiAdi 
  FROM tblIsci
	   INNER JOIN tblYonetici ON (tblYonetici.yoneticiID =
	   tblIsci.yoneticiID)
WHERE tblIsci.yoneticiID = 1

Etkilenen Satır Sayısı : 40000

Sorgu Maaliyeti : 0.305

3 ve 4 numaralı testlerimize baktığımızda etkilenen satır sayıları eşit ve 40000, ama bu sefer sorgu maaliyetleri Join işleminde düşük çıktı.

Sonuç olarak kullanacağımız sorgularda eğer farklı tablolardan veriler ile çalışıyor ve etiklenecek olan satır sayısının büyük olacağını kestirebiliyorsak Join işlemlerini Sub Query işlemlerine tercih etmeliyiz.

Bookmark and Share

C#DA RUN-TİME NESNE-KONTROL OLUŞTURMA

30 Temmuz 2010 – 21:37 Yazar: Derya GUNDUZ

Diyelim ki c#da  bir sinema otomasyonu yapmanız gerekiyor.Formu dizayn ederken yapmanız gereken koltukları temsilen herhangi bir kontrol eklemektir.Bir sinema salonu 50 kişilik ve 4 tane de salon varsa toplamda formlarınız için 200 tane kontrol eklemeniz gerekmektedir.Oldukça uğraştırıcı ve zaman kaybettiren bir dizayn işlemi olacaktır sizin için.Programlama bilgisi çok iyi olmayan birinin yapacağı kontrolleri tek tek eklemek olacaktır,oysa ki object oriented programming(nesne yönelimli programlama)  dan ve nimetlerinden haberdar olan programlamacı ise kontrolleri tek tek eklemez onları kodu çalıştırırken yapabileceğini bilir.Benim bahsedeceğim de 2. seçenek,yani kontrolleri elle, tek tek değil de kod içerisinde oluşturup çalıştırmaktır, yani Run-Time(çalışma anında) nesne oluşturmak olacaktır.

Run-Time kontrol oluşturabilmek için o kontrolden bir nesne yaratmanız gerekecektir.

    Button btn = new Button();  diye tek bir nesne oluşturup döngüler yardımıyla istediğiniz kadar buton görüntüleyebilirsiniz.

Bu konuyla ilgili BilgeAdamda staj yaparken derste yazdığımız  şu  kodu beraber inceleyelim:

 

int x = 40; //başlangıç x koordinatı

 

int y = 40;//başlangıç y koordinatı

int b = 1; //yerleştirilen buton numarasının tutar

private void Form3_Load(object sender, EventArgs e) //işlemleri form yüklenirken yapsın

{

for (int i = 0; i < 10; i++)                          //matrix mantığı ile 100 tane buton oluşturacaz

{

        for (int j = 0; j < 10; j++)

{

Button btn = new Button();

                                  //butondan bir nesne oluşturmamız gerekecek

btn.Name = “btnNo” + b;

                           //her birinin adı oluşum sıralarının adını alacaktır

btn.Text = b.ToString();

btn.Size = new Size(40, 40);              //size her defasında 40-40 olacaktır

btn.Left = x;

x += 40;                                //x koordinatı tek bir satır için her defasında 40 yana kaymalı

btn.Top = y;                         //y koordinatı aynı satır aynı kalır alt satıra geçildiğinde 40 artar

b++;                             //butonun numarası her defasında bir artacaktır

btn.Click += new EventHandler(btn_Click);    //hatta isterrsek o butona event bile yazarız

                //butona basılma eventini tutar

                    //event olduğunu += gösterir

                               //bu formun kontrollerine oluşturduğun btn nesnesini eklemen gerek

this.Controls.Add(btn);                  //btn kontrolünün nereye ait olduğunu belirtmeiz gerekir,formun kontrolü

}

x = 40;                     //ilk 10 taneyi oluşturduktan sonra alt satıra geç ama lefti değişmeyecek

y += 40;                    //top üstten bir satır uzaklaştığı için +40 olmalı

}    }

void btn_Click(object sender, EventArgs e)

{

Button btn = sender as Button;

//sender içinde thisin verilerini tutar

MessageBox.Show(”Merhaba ” + btn.Text + ” im..”);

 

işte çıkan sonuç:

 

 

Butona tıkladığımızda da şöyle bir görüntü oluşur:

 

 

 

DERYA GÜNDÜZ

deryagunduz.blogspot.com

Bookmark and Share

ADO.NET’TE CONNECTED DİSCONNECTED MİMARİLER

26 Temmuz 2010 – 14:58 Yazar: Derya GUNDUZ

ADO.NET  teknolojisi ile veritabanından veri çekmenin 2 yolu vardır.

  • Connected Mimari
  • Disconnected Mimari

Connected Mimari:

Bu mimaride veri tabanından veri çekme süresi boyunca uygulama veritabanına bağlı kalır ve bilgiler bağlı kalma süresi boyunca çekilebilir.Veri çekmek için veritabanına sürekli bağlı olması zorunluluğundan dolayı sql server sürekli meşgul olur,bu bir dezavantajdır.Connected ile veri çekebilmek için SqlCommand ile ConnectionString yazılır ve veriler SqlDataReader ile okunur.SqlDataReader ile veriler tek tek okunur,bu da bir dezavantaj sayılabilir.Connected mimarinin güzel yönlerinden bir tanesi sqlden alınan verilerin daima en güncel veriler olmasıdır,yapılan  bütün değişikler direk veritabanına yansıdığı için veri alınacağı zaman da en güncel veriler gelir.Connected yapıda disconnected yapıya göre veriler daha  hızlı çekilir(datareaderden dolayı)

 

Disconnected Mimari:

Bu mimaride uygulama sqle bağlı olmaz,bağlı olmadan veriler çekilir.Peki nasıl oluyor da bağlı olmadığı halde veritabanından veri çekebiliyor?Uygulamanın veritabanına bağlı olmadan veri çekmesini sağlayan yapı SqlDataAdapterdır.Disconnected mimaride  SqlDataAdapter nesnesi oluşturulur ve bu aracı nesne sayesinde veri tabanından veri çekilir,bütün bağlantılar bunun üzerinden yapılır.Uygulama veritabanına hiç bağlanmadığı için de buna  disconnected yapı denilmiş.Disconnected mimaride bağlantı açılıp kapanmaz,SqlDataAdapter bağlantıyı kendisi açar kapatır.DataAdaptör üzerindeki sql verileri datatable ve datasetlere doldurulur(fill).Böylece sqldeki veriler kullanıma hazırdır.

DataTable—->bellek üzerindeki tablodur

DataSet——>bellek üzerindeki datatablelardır(oluşturulan datatablelar datasete atılır)

Disconnected yapıda uygulama veritabanına bağlı olmadığı için veritabanını meşgul etmek anlamında connected yapıdan daha iyidir.Ama disconnected yapı connected yapıya göre daha eski bilgiyi getirir,veritabanı üzerindeki değişiklikler direk veritabanına yansımadığı için en güncel veriye ulaşamıyor.Databasede yapılan değişikler biz istediğimiz zaman veritababnına yansır.

DERYA GÜNDÜZ

deryagunduz.blogspot.com

deryagunduz47@gmail.com

Bookmark and Share

C#’DA SQLDEN VERİ ÇEKME-LİSTVİEW’E YAZDIRMA

21 Temmuz 2010 – 16:28 Yazar: Derya GUNDUZ

Ado.net teknolojisi sayesinde .net applicationdan database ulaşıp orada veri çekebiliyoruz.Bu vereceğim örnekte de C# veri tabanından sql veri tabanına bağlanıp ordaki Northwind veri tabanında bilgi alıp listviewe yazdıracaz.Bu yayınlayacağım örnek kod BilgeAdam’da staj yaparken girdiğim derslerde gördüğümüz örneklerden.

Önce form disaynını yapmalıyız,

-listview eklemeliyiz

-listviewın view propetysini “details” yapmalıyız,

-”edit colonms” seçeneğinden iki kolon ekleyip bu kolanlara “ürün adi” “fiyat”  adlarını vermeliyiz,

-kodlama kısmına geçebiliriz

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

using System.Data.SqlClient;            //sql ile bağlantı kurmak için gerekli kütüphane

namespace AdoConnected1

{

public partial class Form2 : Form

{

public Form2()

{

InitializeComponent();

}

private void Form2_Load(object sender, EventArgs e)

{

//server=server name   database=database name

//integrated security=true     windows authenticationda çalışıldığını gösterir

SqlConnection conn = new SqlConnection(”server=DERYA-PC\\SQLEXPRESS;database=Northwind;integrated security=true”);

//komut nesnesi

SqlCommand cmd = new SqlCommand(”select ProductName,UnitPrice from Products”,conn);

SqlDataReader dr;

conn.Open();

dr = cmd.ExecuteReader();//komudu çalıştır execute okusun

string urunAdi;

decimal fiyat;

while (dr.Read())

{

urunAdi = dr.GetString(0);//0. kolon

fiyat = dr.GetDecimal(1);//2. kolon

ListViewItem Ivi = new ListViewItem();

//ListView e ekleme yapmak için itemından nesne oluşturup ona ekliyoruz

Ivi.Text = urunAdi;     //text ilk kolon

Ivi.SubItems.Add(fiyat.ToString());  //ondan sonraki bütün kolonlar subitem oluyor

listView1.Items.Add(Ivi);

}

}

}

}

DERYA GÜNDÜZ

Bookmark and Share

Visual Studio 2008 Design Mode Problem

17 Temmuz 2010 – 12:23 Yazar: Uğur ERDEM

Merhaba,

Visual studio 2008 html editore gecince problem almaya başladıysanız. Bu yeni yüklediğiniz office 2010 dan kaynaklanıyor olabilir. Nedendir bilinmez ama office 2007 den 2010 ‘a gectikten sonra vs 2008 in html source ve design kısımlarında problem oluştu şöyleki, vs 2008 de bir web projesi açıyorum ve sonrasında codebehind ile işlem yapmamda bir problem çıkarmıyor fakat source kısma yani html editor veya design kısmına geçtiğimde vs 2008 dokunup kalıyor.

Kullandığım bir eklentinin buna neden olabileceğini düşündüm ve eklentiyi kaldırdım. fakat vs 2008 düzelmedi sonrasında vs 2008 tamamen kaldırdım ve yeniden kurdum, ama sonuç sadece kaybettiğim zaman oldu. Bugün bir blogta bunun office 2010 ile alakalı olduğunu gördüm ve çözüm için  gösterdiği yolları yaptım. Vs 2008 im düzeldi.ilginçtirki bu olayla sadece office 2007 den 2010 gecince karşılaşılıyormuş. Belki sizde aynı hatayı alıyorsunuzdur diye çözüm yollarını sizinle paylaşıyorum.

Windows 64bit

C:\Program Files (x86)\Common Files\microsoft shared\OFFICE12\Office Setup Controller\Setup.exe

Windows 32bit

C:\Program Files\Common Files\microsoft shared\OFFICE12\Office Setup Controller\Setup.exe

bulunan dosyaları çalıştırıyoruz ve sonrasında repair / tamir et deyip işlemimizi tamamlıyoruz. Eğer bunu program ekle kaldırdan yapmak istersenizde , Microsoft Visual Studio Web Authoring Component e change / değiştir seçip repair / tamir et de diyebilirsiniz.

Benim yaralandığım kaynağa buradan ulaşabilirsiniz.

Bookmark and Share

SQL’DE TRIGGERLAR(TETİKLEYİCİLER)

06 Temmuz 2010 – 01:45 Yazar: Derya GUNDUZ

Trigger nedir?

Trigger’ın kelime anlamı tetikleyicidir,

Sqldeki anlamı da  database tabloları üzerinde bir değişiklik olduğu zaman çalışan sql sorgularıdır.

Triggerlar ile insert,update,delete yapılabilir.

Trigger oluşturmak

create trigger TriggerAdi
 
on TabloAdi
 
tetikleyici seçeneği(hangi olay olduğunda çalışsın)
 
as
 
select ....
 
creat trigger tg_KategoriSilindi
 
on Categories
 
for delete             --category silinmesini takip ediyor
 
as
 
select 'biri bir tane kategori sildi' as silme                  ---verilecek mesaj
adsiz9

Yeni eklenecek olan çalışanın adını veoyadını ve aldığı ID değerini ekrana

yazdıralım:

create trigger tg_CalisanEklendi
 
on Employees
 
for insert
 
as
 
declare @ad varchar(10)
 
declare @soyad varchar(10)
 
declare @id int
 
select @ad=FirstName,
 
@soyad=LastName,
 
@id=EmployeeID from inserted
 
declare @veri varchar(36)
 
set @veri=cast(@id as varchar(3))+' '+@ad+' '+@soyad
 
select @veri as veriyo
 
insert into  Employees(FirstName,LastName)
 
values('fulya','ayluf')

–ekleme işlemini yapılacağı zaman trigger da çalışır ve ekleme işlemi

r

İnstead of Triggerlar

Triggerlar ile asıl yapılması gereken yerine başka bir iş yaptırmak istediğimizde instead of trigger kullanılır.

Bu örnekte silme işlemi yerine mesaj verdirtecez:

create trigger tg_KtegorileriKoruyalim

on Categories

instead of delete

as

select ‘Kategorileri silemezsin!!!’  as mesaj

delete from Categories where CategoryID=1

d

İnsead of triggerların önemli kullanım alanlarından bir tanesi de viewler ile birlikte kullanmaktır,birden fazla kaynak tablo ile oluşturulmuş viewlerde insert,update,delete  işlemleri yapılmak istendiğinde instead of trigger kullanmak zorunda kalınıyor,aksi halde hata verir.

DERYA GÜNDÜZ

deryagunduz.blogspot.com

Bookmark and Share

SQL’DE VİEW(SANAL TABLO) OLUŞTURMAK

03 Temmuz 2010 – 13:23 Yazar: Derya GUNDUZ

View ler hangi durumlarda kullanılır,faydaları nelerdir?


Yapacağınız sql işleminde birden fazla tabloyu ve onların farklı farklı colonlarını kullanacaksınız,hepsini birleştirmek ,gerekli tablodan sorgu yapmak biraz zahmetli bir iş olabilir,bunun yerine view denen sanal tablolardan oluşturup,gerekli colonları farklı tablolardan alıp sorguları tek bir tablo üzerinden yapmak işinizi kolaylaştırailir.Karmaşık sorgular kolay bir hale gelmiş  olur.Ayrıca view kullanmanın çok önemli nedenlerinden bir tanesi sağladığı güvelikler.Tablolarınızın tamanının görünmesini istemediğiniz zamanlarda  sanal tablo kullanıp tablolarınızın tamamının görünmesini engelleyebilirsiniz.

View ler üzerinde yapılan değişikler kendilerini oluşturan kaynak tabloları da etkiler,aynı değişiklikler kaynak tablolara da yansır.

Oluşturulan Viewler  resimde görüldüğü gibi  Object Explorer kısmında ana başlık altında toplanır:

adsiz41

Viewler nasıl  oluşturulur?

create view vw_viewAdi

–tavsiye olunur ki oluşturulan view adları vw_ ile başlasın,böylece veri tabanınıza yeni bakan biri onun view olduğunu kolayca alsın

as

select kolonAdi from tabloAdi

where şart

with check option

view oluştururken with check point ifadesi yazılırsa,tanımlamadaki where şartı muhafaza edilmiş olur where şartı dışındaki insert,update,delete işlemleri yapılmaz hata verir

create view vw_DogruHazirlanmisView

as

select firstname,lastname

from Employees

where FirstName like ‘a%’

with check option

insert into vw_DogruHazirlanmisView values(’derya’,'dd’)

–eklenme yapılmak istendiğinde hata verir

hata:The attempted insert or update failed because the target view either specifies WITH CHECK OPTION or spans a view that specifies WITH CHECK OPTION and one or more rows resulting from the operation did not qualify under the CHECK OPTION constraint.(with check pointten dolayı ‘a’ ile başlamayan bir ekleme yapılamaz)

with Schemabinding

Viewin oluşturulduğu kaynak tablo üzerinde değişiklik yapılmasına izin vermeyecek.

create  view vw_CokUgrastim

with schemabinding          –sütunla ilgili bir değişiklik yapılamıyor

as

select firstname,lastname,city

from dbo.employees  –dbo. olmalı

drop table Employees          –yazıldığında hata verir

hata:Could not drop object ‘Employees’ because it is referenced by a FOREIGN KEY constraint.

with encription(gizli view)

Kaynekların  gizliliğini sağlayan koddur,kullanıcı sadece oluşturulan view ile ilgili verilere erişebiliyor,kaynak tablolarla ilgili hiç bir bilgiye ulaşamıyor.

create view vw_Benim

with encryption   –kaynak görmeme,design aktif değil

as

select * from products

adsiz8

Resimde de görüldüğü gibi gizli view kullanıldıktan sonra viewin üstünde kilit işareti olur ve ‘modify’ seçeneği aktiif değildir.

DERYA GÜNDÜZ
deryagunduz.blogspot.com
deryagunduz47@gmail.com
Bookmark and Share

DataGrid ile ziyaretçi defteri yapma

28 Haziran 2010 – 08:55 Yazar: Latif TURK

Evet arkadaşlar bir çok sitede gördüğümüz ziyaretçi defterini oluşturacağız.İlk önce veri tabanımızı aşağıdaki gibi bir table oluşturuyoruz.Table’ın adını defter koyuyoruz.

Birde veri tabanımızda Stored Procedures’ü dışarıdan girdiğimiz verileri kaydetmek için aşağıdaki gibi oluşturuyoruz.

Şimdi aspx kısmında dizaynımızı yapıyoruz.

<table class=”style1″>

<tr>

<td class=”style2″ colspan=”2″>

Ziyaret Defteri</td>

</tr>

<tr>

<td class=”style3″>

İsim</td>

<td>

<asp:TextBox ID=”txtad” runat=”server” BorderStyle=”Solid”></asp:TextBox>

</td>

</tr>

<tr>

<td class=”style3″>

E-posta</td>

<td>

<asp:TextBox ID=”txtposta” runat=”server” BorderStyle=”Solid”></asp:TextBox>

</td>

</tr>

<tr>

<td class=”style3″>

Yorum</td>

<td>

<asp:TextBox ID=”txtyorum” runat=”server” BorderStyle=”Solid” Height=”130px”

TextMode=”MultiLine” Width=”359px”></asp:TextBox>

</td>

</tr>

<tr>

<td class=”style3″>

<asp:Button ID=”Button1″ runat=”server” Text=”Kaydet” onclick=”Button1_Click” />

</td>

<td>

&nbsp;</td>

</tr>

</table>

Burda Kullanıcı adı için txtad’ı eposta için txtposta’yı yorumlar içinde txtyorum’u oluşturuyoruz fakat burda Properties den TextModunu MultiLine yapıyoruz.(Yorumlarımız uzun olabileceğinden dolayı yaptık.)

Code behind kısmına geciyoruz.

protected void Button1_Click(object sender, EventArgs e)

{

SqlConnection baglantı = new SqlConnection(ConfigurationManager.ConnectionStrings["Database"].ConnectionString);

SqlCommand komut = new SqlCommand(“ziyaretdefteri”, baglantı);

komut.CommandType = CommandType.StoredProcedure;

komut.Parameters.Add(“@isim”, SqlDbType.VarChar).Value = txtad.Text;

komut.Parameters.Add(“@eposta”, SqlDbType.VarChar).Value = txtposta.Text;

komut.Parameters.Add(“@yorum”, SqlDbType.Text).Value = txtyorum.Text;

baglantı.Open();

komut.ExecuteNonQuery();

baglantı.Close();

}

Burada textboxlara girdiğimiz verileri stored procedures veri tabanına kaydediyoruz.

Şimdi veritabanımıza kaydettiğimiz verileri DataGrid ile sayfamızda gösterecez.Toolbox dan DataGridi sayfamıza sürükleyip bırakıyoruz. Şimdi aşağıdaki resimlerdeki adımları takip edip bağlantımızı oluşturuyoruz.

Eğer Data connetion bölümünde veri tabanımız gözükmüyorsa web.config’ den Connetion String’in içine

<add name=Database connectionString=Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True providerName=System.Data.SqlClient/>

Kodunu ekleyip veri tabanımızı uygulamaya tanıtıyoruz.

Bu ayarları yaptıktan sonra projemizi çalıştırınca aşağıdaki gibi bir sonuç elde ediyoruz.

Bu makalede ziyaretçi defteri yapmaya çalıştık. Umarım katkısı olmuştur. Yeni makalelerde görüşmek üzere.

Saygılarımla

Bookmark and Share