StreamWriter ve StreamReader ile Dosya Yazma okuma işlemleri

Hiç yorum yok
Merhaba Arkadaşlar

Bu bölümde StreamReader ve StreamWriter Sınıflarının kullanımına bakıyor olacağız.Asıl itibari ile daha evvelden yazmış olduğum richtextbox kullanıma yönelik basit manada bir uygulama yazıyor olacağız.Amacımız uygulamamızın çalıştığı bin-> debug klasörü içinde bir .txt uzantılı metin belgesi açıp içine textboxdan girilen degerleri yazıp okuyor olacağız.Zaman kaybetmeden uygulamamıza geçelim.

Bir adet windows forms application açıp uygulamamıza burdaki görüntüyü elde edelim

 Daha Sonra buttonlarımız ve textboxlarımızı isimlendirip kodlarımıza gecelim ekranda büyük gözüken richtextbox yukardaki ufak olanda (fakir) textbox neyse kodlarımıza bakalım.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Forms;

namespace wfStream
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            //StreamWriter sw = new StreamWriter("SinanArslan.txt"); //Dosya yoksa yeni oluşturur, varsa her seferinde baştan yazmaya başlar.
            //sw.Write("İlk satır");
            //sw.Close();

            //StreamReader sr = new StreamReader("SinanArslan.txt");
            //MessageBox.Show(sr.ReadLine());
            //sr.Close();

        }

        private void btnYaz_Click(object sender, EventArgs e)
        {
            StreamWriter swrd = new StreamWriter("SinanArslan.txt");//bin debug klasorü içine SinanArslan adında metin Belgesi oluşturdu ve yazdı
            swrd.WriteLine(txtYazi.Text);
            swrd.Close();
        }

        private void btnOku_Click(object sender, EventArgs e)
        {
            StreamReader rdr = new StreamReader("SinanArslan.txt");
            rtxtYazi.Text = rdr.ReadLine();
            rdr.Close();
        }

        private void btnEkle_Click(object sender, EventArgs e)
        {
            StreamWriter swrd = new StreamWriter("SinanArslan.txt", true);
            swrd.WriteLine(txtYazi.Text);
            swrd.Close();
        }

        private void btnHepsi_Click(object sender, EventArgs e)
        {
            rtxtYazi.Clear();
            StreamReader rdr = new StreamReader("SinanArslan.txt");
            string okunan = rdr.ReadLine();
            while(okunan != null)
            {
                rtxtYazi.Text += okunan + "\n";
                okunan = rdr.ReadLine();
            }
            //rtxtYazi.Text = rdr.ReadToEnd();
            rdr.Close();
        }
    }
}

Uygulama Indir



                   Arada bir basit düşünmekte lazım umarım sorunuzun cevabını verebilmişimdir

Hiç yorum yok :

Yorum Gönder

Soru Görüş önerileriniz için gmail plus üzerinden + layın müsait olduğumda mutlaka yanıt dönüyor olacağım.

Mssql Indexes Kullanımı Uygulama 2

Hiç yorum yok
Merhaba Arkadaşlar

Bu bölümde mssql tarafındaki indexes yapısına örnek olması açısından ikinci uygulamamı paylaşıyor olacağım.Eğer belli bir süredir blogumu takip ediyorsanız hatırlayacağınız gibi bir video market uygulaması yazmıştık.Şimdi bu video market uygulamamız için indexes kullanımına bakıyor olacağız.

Video Market Uygulaması Veri Tabanı İndirmek için Tıklaynız

--************** İndeksler (Indexes) **********************
use VideoMarket
go
select * from sysindexes

--******************************************
-- create index indextipi indexismi
-- on TabloAdı(KolonAdı)
--******************************************

-- index tipi blirtilmezse SQL non clustered kabul eder.

use VideoMarket
go
sp_helpindex 'Filmler' --index dosyalarını görürüz
create index IX_FilmAd
on Filmler(FilmAd)

select * from Filmler where FilmAd like 'T%'

DBCC SHOWCONTIG (Filmler) -- tüm tablonun performansına bakıyor
DBCC SHOWCONTIG (Filmler,IX_FilmAd) -- leaf(en son aşamadaki elemanların) performansına bakıyor

-- drop index indexismi --> index dosyasını siler

create index IX_Birlesik
on Filmler(FilmAd,Yonetmen)
with(Pad_Index=on, FillFactor =80)


--************ İndexlerin Değiştirilmesi (Bakımı) ***************

-- Rebuild : İndex dosyasını yeniden derler, silip yenisini oluşturur.

-- Reorganize : Yeniden düzenlemek. Fill Factor değerine göre sadece uç(Leaf) seviyedeki index sayfalarını yeniden yapılandırır.

-- Disable : İndex dosyasını kullanıma kapatmak.

-- Filmler tablosundaki tüm indexleri gözden geçiriyor, yeniden derliyor.

alter index all on Filmler
rebuild -- reorganize de kullanılabilir
go

create index IX_FilmAd
on Filmler(FilmAd)
with(drop_existing=on)
go

Uygulama İndir

Hiç yorum yok :

Yorum Gönder

Soru Görüş önerileriniz için gmail plus üzerinden + layın müsait olduğumda mutlaka yanıt dönüyor olacağım.

Mssql T-sql Kodları ile Database İşlemleri

Hiç yorum yok
Merhaba Arkadaşlar

Mssql uygulamalarımızın ikinci bölümünde t-sql kodları ile database oluşturma işlemlerine bakıyor olacağız.Zaman kaybetmeden kodlara geçelim ve yorum satırlarına aldığım notlara bakalım

use master
go
create database Kurslar
go
if exists(select * from sysobjects where name='ogrenciler')
    begin
        DROP Table ogrenciler
    end
create table ogrenciler
(
    ogrencino int not null identity(1,1),
    ogrenciAd varchar(20) not null,
    ogrencisoyad varchar(20) not null,
    telefon varchar(20),
    toplamtutar money,
    sinifno int not null
)
go
alter table ogrenciler
add constraint PK_ogrencino primary key
clustered(ogrencino)
go
if exists(select * from sysobjects where name='ogretmenler')
    begin
        DROP Table ogretmenler
    end
create table ogretmenler
(
    ogretmenno int not null identity(1,1),
    ogretmenAd varchar(20) not null,
    ogretmensoyad varchar(20) not null,
    telefon varchar(20),
    bransno int not null
)
go
alter table ogretmenler
add constraint PK_ogretmenno primary key
clustered(ogretmenno)
go
if exists(select * from sysobjects where name='siniflar')
    begin
        DROP Table siniflar
    end
create table siniflar
(
    sinifno int not null identity(1,1),
    sinifAd varchar(20) not null,
    ogretmenno1 int not null,
    ogretmenno2 int not null,
    mevcut int,
    baslangictarihi date default getdate(),
    bitistarihi date default getdate()
)
go
alter table siniflar
add constraint PK_sinifno primary key
clustered(sinifno)
go
if exists(select * from sysobjects where name='odemeler')
    begin
        DROP Table odemeler
    end
create table odemeler
(
    odemeno int not null identity(1,1),
    tarih date default getdate(),
    ogrencino int not null,
    tutar money,
    taksitsayisi tinyint,
    odendi bit default 0
)
go
alter table odemeler
add constraint PK_odemeno primary key
clustered(odemeno)
go
if exists(select * from sysobjects where name='branslar')
    begin
        DROP Table branslar
    end
create table branslar
(
    bransno int not null identity(1,1),
    bransadi varchar(20)
)
go
alter table branslar
add constraint PK_bransno primary key
clustered(bransno)
go

alter table ogrenciler
add constraint FK_Ogrenci_Sinif
    foreign key (sinifno)
    references siniflar(sinifno) -- ilişkilendirme yapıldı
    go
   
use Kurslar
alter table odemeler  -- odemeler tablosunda;
add constraint ck_taksitkontrol  --ck_taksitkontrol adında constraint oluşturuldu
check(taksitsayisi<=10) -- 10 taksitten fazla yapılmasın!!!

sp_helpconstraint 'odemeler'  -- ödemelerde tanımlanan constraintleri gösterir

-- rule oluşturma
create rule rl_mevcut -- ayrı bir nesne olduğundan create ile oluşturulur.
as @sayisi<=20        -- değişken kullanılır.

-- drop rule rl_mevcut ile rule yi silebiliriz

sp_bindrule rl_mevcut,'siniflar.mevcut' -- tablonun kullanılacak kolonuna rule bağlandı
sp_helpconstraint 'siniflar'

-- ödemelerin kısıtlarını geçici olarak kaldır
alter table odemeler  
NOCHECK constraint all

-- odemelerin kısıtlarını geri al
alter table odemeler
check constraint all

Örnek uygulama Indir

Hiç yorum yok :

Yorum Gönder

Soru Görüş önerileriniz için gmail plus üzerinden + layın müsait olduğumda mutlaka yanıt dönüyor olacağım.

Mssql Alt Sorgu Kullanımı Group By ve Order By Kullanımı

Hiç yorum yok
Merhaba Arkadaşlar

Bu bölümde örnek t-sql sorgularına bakıyor olacağız.Yazacağımız uygulamada norhwind veri tabanından ve ekte paylaşılan veri tabanları üzerinden işlemler yapıp t-sql kodları ile veri tabanı üzerinde database oluşturma ,var olan bir veri tabanına index atama işlemlerine bakıyor olacağız.

İlk bölümüzde de  Alt sorgular ve Group by ve order by kullanımına değiniyor olacağız

Şimdi uygulamamızda kullandığımız t-sql sorgularına bakalım

--* Alt Sorgular*--

-- Örnek 1) Müşterilerin ilk gerçekleştirği sipariş tarihi

Select CompanyName,(Select Min(OrderDate) from Orders siparis Where siparis.CustomerID=musteri.CustomerID ) as İlkSiparis from Customers musteri

-- Örnek 2) 1997 yılında yapılan Siparisler

Select * from Orders where YEAR(OrderDate)=1997

--Örnek 3) Siparişler tablosunda en küçük sipariş tarihi gelsin

Select Min(Year(OrderDate)) as İlkSiparisYili from Orders

--Örnek 4) Alt sorgu halinde Siparişler tablosunda yapılan ilk siparis tarihi

Select * from Orders where Year(OrderDate)=(Select Min(Year(OrderDate)) as İlkSiparisYili from Orders)

--Örnek 5) Siparis adeti 4 den fazla olan Şirketler gelsin

Select CompanyName,CustomerID from Customers as musteri
where 4 < (Select Count(*) from Orders as siparis where musteri.CustomerID=siparis.CustomerID)

--Örnek 6) Ürünler tablosunda ne kadar ürün var

Select Sum(UnitsInStock) as toplamÜrünSayısı from Products

--Örnek 7) Hangi üründen Kaç birim Stock var

Select ProductName, Sum(UnitsInStock) from Products group by ProductName

--Örnek 8) Hangi Kategoriden kaç birim ürün var

Select CategoryName as KategoriAdi,Sum(urun.UnitsInStock) as UrunSayisi from Products as urun inner join Categories as kategori on urun.CategoryID=kategori.CategoryID
group by CategoryName

--Örnek 9) Hangi kategoriden ve hangi tedarikciden tedarik ettiği kaç birim ürün var

Select kategori.CategoryName As KategoriAdi,tedarikci.CompanyName as Tedarikci,SUM(UnitsInStock) as ToplamSayı from Products as urun inner join Categories as kategori
on urun.CategoryID=kategori.CategoryID inner join Suppliers as tedarikci on urun.SupplierID=tedarikci.SupplierID
group by kategori.CategoryName,tedarikci.CompanyName
order by ToplamSayı desc

--Örnek 10) Kac farklı ülkeye satış yapılmış

Select distinct ShipCountry  from Orders

--yada

Select ShipCountry from Orders group by ShipCountry

--Örnek 11) Hangi Ülkeye Kaç tane sipariş yapıldı

Select ShipCountry ,count(OrderID) as Satıssayısı  from Orders group by ShipCountry

--Örnek 12) 1996 yılında hangi ülkeye kaçtane sipariş gitmiş

Select ShipCountry,YEAR(OrderDate) as Yil,Count(OrderID) as GidenSiparis from Orders Where YEAR(OrderDate)=1996 group by ShipCountry,
YEAR(OrderDate)

--Örnek 13) 1996 yılında hangi ülkeye kaçtane sipariş gitmiş ve siparis sayısı 15 den büyük olan kayıtlar gelsin

Select ShipCountry,YEAR(OrderDate) as Yil,Count(OrderID) as GidenSiparis from Orders Where YEAR(OrderDate)=1996 group by ShipCountry,
YEAR(OrderDate) having 15<Count(OrderID)

--Örnek 14) Ülkelere giden kargoların ülke bazında ortalama taşıma ücretini  çokdan aza sıralayınız

Select ShipCountry, AVG(Freight) as [Ortalama Taşıma Ücreti] from Orders
group by ShipCountry
order by 2 desc --ikinci sıradaki kolana göre sıraldık yani [Ortalama Taşıma Ücreti]

--Örnek 15) Çalışanların ünvanlarının sayısı

Select TitleOfCourtesy,Count(TitleOfCourtesy) as Unvan from Employees
group by TitleOfCourtesy
order by 2 desc-- ünvanlarının

--Örnek 16) En yüksek ortalama uçuş fiyatı hangi ülkeye gitmiştir

Select top 1 ShipCountry,Avg(Freight) as [Yapılan Masraf] from Orders
group by ShipCountry
order by Avg(Freight)

--Örnek 17) Şimdiye kadar satılan ürünlerden nekadar hasılat elde ettik

select urun.ProductName,Sum(siparisdetay.UnitPrice*siparisdetay.Quantity*(1-siparisdetay.Discount)) as [Ara Toplam]  from [Order Details] as siparisdetay
inner join Products as urun on siparisdetay.ProductID=urun.ProductID
 group by urun.ProductName

Video Anlatım :




Uygulama Indir 

Linq Expressions Örnekleri

Hiç yorum yok :

Yorum Gönder

Soru Görüş önerileriniz için gmail plus üzerinden + layın müsait olduğumda mutlaka yanıt dönüyor olacağım.

Linq Expression Join İşlemleri Group By ve Order By Kullanımı

Hiç yorum yok
Merhaba Arkadaşlar

Bu bölümde linq expression larda join işlemi kullanımına bakıyor olacağız.Yazağımız uygulama genel anlamda çoklu tablolar arasındaki ilişkilerden yararlanıp bunları linq ile tek sorgu haline getirip  datagridviewımızda listelemek olacak.

Yazmış olduğum proje üzerinden devam ederek kodları ve uygulamayı paylaşıyor olacağım. Veri Tabanı olarak KuzeyYelini kullanarak ilerledim.Uygulama içine Model adında bir klasör açıp add new item ile linq to sql classes ekleyip devam edelim ve global olarak eklemiş olduğumuz context nesnemizden instance alıp devam edelim

KuzeyYeliDataContext db = new KuzeyYeliDataContext();
    private void btnCoklu_Click(object sender, EventArgs e)
        {
            // Önemli Not join işlemlerinde ilk olarak ilk çağırılan tablonun kolonu ile eşleştirme yapılır
            lblSorgu.Text = "";
            lblSorgu.Text = "Satışı yapılan ürünü hangi personel satmış ad ve soyadı,hangi Musteri ye satmış,satış fiyatı,urun adi,kategori adı,indirim oranı gelsin";
            dgvSonuc.DataSource = from urun in db.Products
                                  join kat in db.Categories on urun.CategoryID equals kat.CategoryID
                                  join satisdetay in db.Order_Details on urun.ProductID equals satisdetay.ProductID
                                  join satis in db.Orders on satisdetay.OrderID equals satis.OrderID
                                  join musteri in db.Customers on satis.CustomerID equals musteri.CustomerID
                                  join personel in db.Employees on satis.EmployeeID equals personel.EmployeeID
                                  join teadrikci in db.Suppliers on urun.SupplierID equals teadrikci.SupplierID
                                  select new
                                  {
                                      UrunAdi = urun.ProductName,
                                      Fiyat = urun.UnitPrice,
                                      SatisFiyat = satisdetay.UnitPrice,
                                      Adet = satisdetay.Quantity,
                                      Indirim = satisdetay.Discount,
                                      Tedarikci = teadrikci.CompanyName,
                                      KategoriAd = kat.CategoryName,
                                      Musteri = musteri.CompanyName,
                                      Personel = personel.FirstName + "- " + personel.LastName,



                                  };
        }

 private void btniki_Click(object sender, EventArgs e)
        {
            /*Urunler tabloasundaki kategorileri aynı olan ürünler gelsin*/
            lblSorgu.Text = "";
            lblSorgu.Text = "Urunler tabloasundaki kategorileri aynı olan ürünler gelsin";
            dgvSonuc.DataSource = from urun in db.Products
                                  join kat in db.Categories on urun.CategoryID equals kat.CategoryID
                                  select new
                                  {
                                      urun.ProductName,
                                      kat.CategoryName,
                                      urun.UnitsInStock,
                                      urun.UnitPrice
                                  };
        }


lblSorgu.Text = "";
            /*hangi üründen Nekadar toplam Satış geliri elde edilmiş*/
            lblSorgu.Text = "hangi üründen Nekadar toplam Satış geliri elde edilmiş";
            var sorgu = from urun in db.Products
                        join satisdetay in db.Order_Details on urun.ProductID equals satisdetay.ProductID
                        group satisdetay by urun.ProductName into grup //ürünler tablosundaki urunadina  göre grupla
                        select new
                        {
                            UrunAdi = grup.Key, //grupladığımız alan adını key ifade eder
                            ToplamSatis = grup.Sum(x => x.UnitPrice * x.Quantity)
                        };
            dgvSonuc.DataSource = sorgu;

            /*yapılan işlemin t-sql sorgusu
             Select ProductName,Sum(satisdetay.Quantity*satisdetay.UnitPrice) as ToplamSatis from Products urun
join [Order Details] satisdetay on urun.ProductID=satisdetay.ProductID
group by urun.ProductName
            
             ======!!!!!!!!Önemli!!!=======
             Yukarda dikkat edilmesi gereken group by urun.ProductName ifadesi t-sql sorgusunda Select deyiminden hemen sonra ProductName gelmektedir.Yani bizim yazdığımız linq expressionlarda group by ifadesindeki Key 'i ifade etmektedir
             */

 private void btnOrderBy_Click(object sender, EventArgs e)
        {
            lblSorgu.Text = "";
            lblSorgu.Text = "Fiayata Az' dan Çoğa Göre Ürunleri Sırala";
            var sorgu = from urun in db.Products
                        orderby urun.UnitPrice
                        select urun;
            dgvSonuc.DataSource = sorgu;
        }


 private void button2_Click(object sender, EventArgs e)
        {
            lblSorgu.Text = "";
            lblSorgu.Text = "Fiayata Çoktan Az'a Göre Ürunleri Sırala";
            var sorgu = from urun in db.Products
                        join kategori in db.Categories on urun.CategoryID equals kategori.CategoryID
                        join tedarikci in db.Suppliers on urun.SupplierID equals tedarikci.SupplierID
                        orderby urun.UnitPrice descending
                        select new
                        {
                            urun.ProductName,
                            KategoriAdi = kategori.CategoryName,
                            Tedarikci = tedarikci.CompanyName,
                            UrunFiyat = urun.UnitPrice,
                            Adet = urun.UnitsInStock,
                        };
            dgvSonuc.DataSource = sorgu;
        }


 private void button3_Click(object sender, EventArgs e)
        {
            //burda istenilen alanları çekmek için tablolar arası join işlemlerinden sonra select keyword unden scopelarında ilgili alanları çekebilirsiniz.
            //Ben yukarda benzer örneği yaptığım için bu kısmı yazmadım
            lblSorgu.Text = "";
            lblSorgu.Text = "Satış Tarihine Göre Satışları Tersten Sırala ";
            var sorgu = from satis in db.Orders
                        orderby satis.OrderDate descending
                        select satis;
            dgvSonuc.DataSource = sorgu;
        }

        private void button4_Click(object sender, EventArgs e)
        {
            lblSorgu.Text = "";
            lblSorgu.Text = "Verilen Tarihe Göre Dataları Sırala  ";

            DateTime tarih = Convert.ToDateTime(maskedTextBox1.Text);

            var sorgu = from satis in db.Orders
                        where satis.OrderDate == tarih
                        select satis;
            dgvSonuc.DataSource = sorgu;
        }


Umarım faydalı olur.Örnek Proje İndir

Hiç yorum yok :

Yorum Gönder

Soru Görüş önerileriniz için gmail plus üzerinden + layın müsait olduğumda mutlaka yanıt dönüyor olacağım.

Asp.Net Mvc Sayfalama Filitreleme Arama İşlemleri

6 yorum
Merhaba Arkadaşlar ,

            Bu uygulamamızda asp.net mvc üzerinde sayfalama ve arama işlemlerine bakıyor olacağız.Yazacağımız uygulamamızda Northwind veri tabanını kullanıyor olacağız.Vermiş olduğum linden indirebilirsiniz.

Projemizde PagedList ve PagedList.Mvc 'yi kullanıp Ajax.Beginform' la sayfalama ve arama işlemlerimizi gerçekleştiriyor olacağız.Bunun için bir MVC4 projesi açalım ve proje ismini sayfalama verdikden  sonra template olarak Basic ve ViewEngine olarak razor secelim.Projemiz açıldığında controller klasörü ne sağ tık add controller diyip Home controllerimizi ekleyelim.Daha sonra gene controller klasörümüze sağ tıklayıp Customer controllerimızı ekleyelim.Birde listeleme modelleme işlemlerimiz için proje üzerine sağ tıklayıp ViewModel isminde bir klasör ekleyelim .ViewModel klasörümüze sağ tıklayıp iki adet class ekleyip birincisinin adı CustomerListModel diğeri ise CustomerModel olarak açalım.Birde model klasörümüze sağ tıklayıp add diyip new item ile sol tarafta bulunan data sekmesini secip içindeki Ado.Net Entity Framework ü secelim ve baglantı işlemlerini tamamlayıp veri tabanındaki var olan tabloların modellenmesini sağlayalım.

ViewModel Klasörü içindeki Yapı Aşağıdaki Resim 1 ve Resim 2 deki gibidir.
Resim1
 Proje içinde sayfalama işlemlerinin ve arama işlemlerine göre view model klasorü içindeki classlardan faydalanıyor olacağız.Bu noktada namespace uzağına eklenen using PagedList;
using PagedList.Mvc; inin çalışması için http://www.nuget.org/ adresine gidip search bölümünden PagedList yazıp aşağıda verilen bölümü kopyalıyoruz.Daha sonra acalım Tools --> Nuget Package Manager-->Package Manager Console
Resim 3 Nuget.org
Resim 2











Resim 4 Package manager Console açma
Daha Sonra package manager console nugget org adresinden almış olduğumuz kodu yapıştırıp entere basalım.Böylelikle references bölümünde
PagedList ve PagedList.Mvc refere edilsin.

Daha sonra Customer controllemuzun index methodunda tüm işlemlerimizi gerçekleştirebilmek adına ki bunlar sayafanın ilk açılması yada sayfasının bir ajax sayfa isteği olup olmadığının kontrol aşamalarıdır.Bunuda Request.IsAjaxRequest() ile yapacağız index actionresultımız aşağıdaki gibidir.

public ActionResult Index(CustomerModel model)
        {
            int pageindex = model.Page ?? 1;//sayfa ilk açıldığında boşsa 1den başlasın
            NorthwindEntities db = new NorthwindEntities();
            model.Customer = (from mus in db.Customers.Where(m => (String.IsNullOrEmpty(model.City) || m.City.Contains(model.City)) &&                            (String.IsNullOrEmpty(model.CompanyName) || m.CompanyName.Contains(model.CompanyName))
                                  ).OrderByDescending(m => m.CustomerID)
                              select new CustomerListModel
                              {
                                  City = mus.City,
                                  CompanyName = mus.CompanyName,
                                  Country = mus.Country
                              }).ToPagedList(pageindex, 10);

            if (Request.IsAjaxRequest())//Sayfa ajax isteğimi
            {
                return PartialView("_Customers", model);
            }
            else
            {
                return View(model);
            }
        }

index.cshtml imiz yapısı ağıdaki  gibidir
 @model  MvcSayfalamaListeleme.ViewModel.CustomerModel  sayfaya yönlendirdiğim modeldir                   











Sayfa içersinde ilkkez mi açıldı yada bir ajax talebimi oldu noktasında ise yukarda yazmış olduğum index ActionResult içindeki partial viewımızı döneceğiz._Customers partial viewmizin yapısı aşağıdaki gibidir.












Uygulamanın daha iyi anlaşılması örnek proje 

Umarım faydalı olur.Zamanım olursa video anlatım olarak uygulamayı yazıyor olacağım .






6 yorum :

Yorum Gönder

Soru Görüş önerileriniz için gmail plus üzerinden + layın müsait olduğumda mutlaka yanıt dönüyor olacağım.

JavaScript Zincirleme Method Kullanımı

Hiç yorum yok
Merhaba Arkadaşlar,

Bu bölümde javascript 'te zincirleme method kullanımına bakıyor olacağız.Aynı zamanda ajax web servis işlemlerine de değiniyor olacağız.Uygulamamı visual studio 2013 idesi içinde gerçekleştiriyor olacağım.Uygulamamız içinde ajax işlemlerimizde olacağı için jquery adresinden download bölümünden güncel olanını indirebilirsiniz.

                                                                                           Resim 1
ilk olarak bir web form uygulaması başlatarak devam edelim.Projemizi isimlendirdikten sonra
açılan proje üzerinde sağ tıklayıp add folder diyip ismini js olarak verip indirdirmiş olduğunuz jquery dosyasını içine atıyoruz(Resim2)

Resim 2
   
 Gene projemiz üzerine sağ tıklayıp bir adet web form ekleyip adını Default.aspx olarak verelim.Ve Default.aspx üzerinde iken sağ tıklayıp Set As Start Page seçelim.Evet şimdi işlemlerimizi yapmaya başlayabiliriz.İlk olarak head tagları arasına indirdiğimiz jquery dosyasını sürükleyip bırakalım.Daha sonra  <script type="text/javascript">Yazılacak kodlar buraya</script>. Tagları arasında kodlama işlemlerimiz yapıyor olacağızUygulamamızın genel amacı javascripte iç içe function kullanmak


=============================Örnek 1=====================================

       function Kisi(){
        this.Adi;
        this.Soyadi;
        this.Ulke;
        }

        var instance = new Kisi(); //Kişi adlı sınıfdan örnek türetildi yani instance alındı
        instance.Adi = "Sinan"; //Propertieslere deger atamaları gerçekleştirildi
        instance.Soyadi = "Arslan";
        instance.Ulke = "Türkiye";

     alert(instance.Adi + "-" + instance.Soyadi + "-" + instance.Ulke);//Tamamen mantığımız c# üzerine ilerliyor olacağız.Şimdi ise farklı nasıl yapabiliriz

Ca# daki gibi class mantığı aşagıdaki Kişi functionını kişi sınıfı gibi ele aldığımızda this.Adi,this.Soyadi,this.Ulke gibi bölümler propertiesleri olmakta


=============================Örnek 2=====================================

Parametre alarak propertieslerimize değer atama işlemlerini gerçekleştiriyoruz

        function Kisi(adi,soyadi,ulke){
        this.Adi=adi;
        this.Soyadi=soyadi;
        this.Ulke=ulke;
        }

        var instance = new Kisi("Sinan", "Arslan", "Turkiye");//Yazmış olduğumuz Kişi functionımız artık örneğini aldığımızda bizden aldığı parametrelere göre deger istemekte
        alert("Sayın "+instance.Adi+"-"+"ülke Bilgisi  "+instance.Ulke);

=============================Örnek 3=====================================

        function Kisi(){
        this.Adi;
        this.Soyadi;
        this.Ulke;
        }
       // Kisi.prototype var olan bir classın propertieslerine yeni propertiler eklemeye olanak sağlar .Amacda zaten bu sepette ürün Adeti* fiyat=Tutar demek için

        Kisi.prototype.SetAdi = function (adi) {
            this.Adi = adi;
            return this;
        };
        //Burda yapılan işlemlerden birini açıklamak yeterli olacaktır sanırım.Hepsi aynı işlemi gerçekleştiriyor.Öncelikle  Kisi.prototype.SetAdi = function (adi) {} bölümünde gecici alianz isimli properti degerimizi yarattık prototype ile ve adına SetAdi dedik daha sonra functionımız içindeki parametreyi tanımlamış olduğumuz classımız(function Kisi() (!--42 satır ) içersinde gelen adi propertieine parametremizden gelen degeri atadık ve bize return this diğerek objenin kendisini dönmesini sağladık amacımız ise alınan instance üzerinden tek bir seferde tüm degerleri atamak (!65 satır)  

        Kisi.prototype.SetSoyadi = function (soyadi) {
            this.Soyadi = soyadi;
            return this;
        };
        Kisi.prototype.SetUlke = function (ulke) {
            this.Ulke = ulke;
            return this;
        };

        var instance = new Kisi();
        instance.SetAdi("Sinan").SetSoyadi("Arslan").SetUlke("Turkiye");

=============================Örnek 4=====================================


        function Kisi() {
            this.Adi;
            this.Soyadi;
            this.Ulke;

            this.SetAdi =  function (name) {
                this.Adi = name;
                return this;
            };
            this.SetSoyadi = function (soyadi) {
                this.Soyadi = soyadi;
                return this;
            };
            this.SetUlke = function (ulke) {
                this.Ulke = ulke;
                return this;
            };
            this.GetDataRead = function () {
                return this.Adi + "--" + this.Soyadi + "--" + this.Ulke;//Veri Okuma işlemi için yazdım
            };
        }

        var instance = new Kisi();
        instance.SetAdi("Sinan").SetSoyadi("Arslan").SetUlke("Türkiye");
        alert(instance.GetDataRead());

        instance.SetAdi("Sinan");
        alert("Sayın : " + instance.Adi + "" + instance.Soyadi + " ülkesi " + instance.Ulke);
       Bu Bölüm Projeyi İndirenler içindir Class içinde Kullanılan return this; mantığını analamak için satır 90 yorum satırı haline getirip satır 91 aktif hale getirilip alert() ilemi gerçekleştirildiğinde deger almayan propertiler undefined olarak gelmektedir. Yani aynı c# daki gibi ram üzerine alınan ilk data içindeki degerleri boş olan kısımlar null (undefined) olarak deger ataması yapılır

        Yukarda verilen ilk 5 örnek zincirleme method kullanına örnek olması amaçlı yazılmıştır


=============================Örnek 5=====================================
Şimdi ise ajax jquery kullanarak bir web servisden dönen değerleri yakalıp kullanacak belirli bir hesabı gerçekleştiren uygulamamızı javascript sınıflarımızda gerçekleştirelim.Uygulamanın basit anlaşılır olması amacıyla Urun fiyatı indirim oranı hesabı yapan bir web servis oluşturmak için proje üzerine sağtıklayıp add diyip webservice ekliyoruz ve ismini SepetHesapla.asmx olarak verelim.Gene servisimiz içindeki methodu aşağıdaki gibi değiştirelim

/// <summary>
    /// Summary description for SepetHesapla
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
    [System.Web.Script.Services.ScriptService]
    public class SepetHesapla : System.Web.Services.WebService
    {

        [WebMethod]
        public double Hesapla(Siparis sip)
        {
            int adet = sip.Adet;
            List<Urun> urun = new List<Urun>();
            urun.Add(new Urun { Fiyat = 100, UrunID = 1 });
            urun.Add(new Urun { Fiyat = 150, UrunID = 2 });
            urun.Add(new Urun { Fiyat = 200, UrunID = 3 });
            urun.Add(new Urun { Fiyat = 300, UrunID = 4 });
            urun.Add(new Urun { Fiyat = 400, UrunID = 5 });

            Urun urunler = urun.FirstOrDefault(x => x.UrunID == sip.UrunID);
            double fiyat = urunler.Fiyat;
            double indirim;
            if (adet <= 3)
            {
                indirim = 0.9;
            }
            else
            {
                indirim = 0.8;
            }
            double toplam = adet * indirim* fiyat;
            return toplam;
        }
    }


Ajax işlemleri gerçekleştireceğimiz için  [System.Web.Script.Services.ScriptService] üzerindeki yorum satırını  kaldıralım. Daha sonra Default.aspx sayfamızın Source bölümüne geçip kodlarımızı yazmaya başalaylım.

  <script type="text/javascript">

function Urun() {
            this.UrunID;
            this.Adet;
            this.SetUrunID = function (urunID) {
                this.UrunID = urunID;
                return this;
            };
            this.SetAdet = function (adet) {
                this.Adet = adet;
                return this;
            };
            this.ToplamTutar = function () {
                var deger = this;
                var donusdeger;
                $.ajax({
                    type: "Post",
                    data: JSON.stringify({ sip: deger }),
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    async: false,
                    url: "SepetHesapla.asmx/Hesapla",
                    success: function (sonuc) {
                        donusdeger = sonuc.d;
                    }
                });
                return donusdeger;
            };
        }

       //var ur = new Urun();
       // var toplamdeger = ur.SetAdet(3).SetUrunID(1).ToplamTutar();

        //alert(toplamdeger);

        $(document).ready(function () {
            $("#btnHesapla").click(function () {

                var gelenid = $("#Urunlist").val();
                var gelenadet = $("#txtadet").val();

                var ur = new Urun();
                var toplamdeger = ur.SetAdet(gelenadet).SetUrunID(gelenid).ToplamTutar();
                $("#txtHesap").text(toplamdeger);
            });
        });
    </script> 


Şimdi ratgele bir tasarım üzerinden ilerliyor olacağım.

<body>
    <form id="form1" runat="server">
        <div>
            <table>
                <thead>
                    <tr>
                        <th>Ürün
                        </th>
                        <th>Adet
                        </th>
                        <th>Fiyat
                        </th>
                        <th>Tutar
                        </th>
                    </tr>
                </thead>
                <tbody>
                    <tr>
                        <td>
                            <select id="Urunlist">
                                <option value="1">Birinci Ürün</option>
                                <option value="2">İkinci Ürün</option>
                                <option value="3">Üçüncü Ürün</option>
                                <option value="4">Dördüncü Ürün</option>
                                <option value="5">Beşinci Ürün</option>
                            </select></td>
                        <td>
                            <input type="text" id="txtadet" /></td>
                        <td>
                            <button id="btnHesapla" type="button" >Hesapla</button>
                        </td>
                        <td id="txtHesap">
                          
                        </td>
                    </tr>

                </tbody>
            </table>

        </div>
    </form>
</body>
</html>

Bu uygulamada asıl amaç olan javascript zincilerleme method kullanıma değinmek amaçlı yazdım.Projede kullanılan webservis içindeki method yada web service ne gerek var diye düşünülebilinir farklı yöntemler izlenilebilinir.Uygulamayı yazarken ana amaç zincirleme method kullanımına (fluent Interface ajax webservice) basit anlamda değinilmiştir


Projeyi indirmek için tıklayınız 

Hiç yorum yok :

Yorum Gönder

Soru Görüş önerileriniz için gmail plus üzerinden + layın müsait olduğumda mutlaka yanıt dönüyor olacağım.

Mssql Transaction Kullanımı

Hiç yorum yok
Merhaba Arakadaşlar

Mssql tarafında  transaction kullanımına bakıyor olacağız.Lafı fazla uzatmadan bakalım transaction nedir.

Transaction veri tabanında işlenilebilen en ufak veri yığınıdır

Belirli bir grup işlemin arka arkaya gerçekleşmesine rağmen, işlemlerin seri ya da toplu halde değerlendirilip hepsinin düzgün bir şekilde ele alınması gerektiğinde kullanılır. "Transaction", prensip olarak ya bütün işlemleri gerçekleştirir ya da hiçbirini gerçekleştirmez.  İşlemlerden biri dahi başarısız olursa, bu prensip nedeniyle hiçbir işlem olmamış kabul edilir; ancak tüm işlemler başarılı olduğunda" transaction", içinde gerçekleşen tüm veri değişikliklerini onaylamış demektir.

Örnek Uygulama Bankada Hesabı olan İki Müşteriden Birinin diğerine Para transferinin gerçekleşmesi

Explicit Transaction :Kullanıcı Tanımlı(software tarafından)yazılan transactiondır.Amacımız birden fazla işi tekbir veri yığınıymış gibi ele alıp tüm işlemler başarılı ise işlemin veri tabanına yansımasını sağlamak olacak

Örnek veri tabanımız                              Transaction Tipleri

 1)Auto Complete Mode Transaction: işlemlerinden otomatik commitlenmesi

2)Implicit Mode Transaction: İşlemlerinden transaction başlatır ama kapatmaz tehlikelidir.Rollback tran tüm transactionların kapatılması durumunda İmplicit mode da yapılan işlemler tehlikeye girer

3)Explicit Mode Transaction: yazılımcının kendi acıp kapadığı işlemlerdir
 Tablomuz  yandaki gibi olup HesapID kolonu
 identity specification bölümünden identity increment ve identity  seed 1,1 olarak verilimiştir.Tablomuza iki adet hesap kaydı girelim ve birbirlerine havale yapmalarını sağlayacağımız Transaction işlemimizi gerçekleştirilim


Şimdi Transaction işlemlerimize bakalım.Anlatımı olduğunca basit ele almaya çalıştım.Database'ler bölümünden Bank veri tabanını seçip ilerleyelim

create proc HesapHavale
@gonderen int,@alankisi int,@mebla money
as
begin
    begin try
    begin tran havaleislemi--transaction işleminin başladığı kısım işlem commit olana veya rollback olana kadar devam eder
        Update Hesaplar set HesapBakiye= HesapBakiye-@mebla where HesapID=@gonderen
        declare @sayi int
        set @sayi=10/0 --hata verdirmek amaçlı yazdım.Divide by zero hatası için
        Update Hesaplar set HesapBakiye=HesapBakiye+@mebla where HesapID=@alankisi
        commit tran havaleislemi-- işlemlerin Onaylandığı Kısım
    end try
    begin catch
    rollback tran havaleislemi
    print 'Hata Meydana geldi'
    end catch
end


Kullanımı

exec HesapHavale 1,2,300


Son olarak Acık transactionların sayına bakalım

select @@TRANCOUNT --Acık transactionların sayını verir 

Uygulamayı indirmek için Tıklayınız





Hiç yorum yok :

Yorum Gönder

Soru Görüş önerileriniz için gmail plus üzerinden + layın müsait olduğumda mutlaka yanıt dönüyor olacağım.

Nesne Yönelimli Programlama (OOP) Temel Kavramlar Detaylı Anlatım Bölümü

Hiç yorum yok
Merhaba Arkadaşlar ,

Sınavlrın bitmesiyle birlikte yeniden blog üzerinde makale ,video ,proje ,uygulama vs. işlemlerini zaman bulabildikçe anlatmaya devam ediyor olacağım.Daha fazla lafı uzatmadan OOP hakkında daha önceden yapmış olduğumuz uygulamada eksik kalan bölümler ,kavramlar ve bunların bir uygulamaya dökülmesi noktasında bu makale üzerinden devam ediyor olacağım.

Nesne yönelimli programlamada (OOP) içersinde temel kavramlar ,temel kurallar olarak devam edelim.Ve sırası geldikçe bu kavramları ve kuralları ele alıp açıklamaya çalışalım.İlk aşamada bu işlemleri gerçekleştirirken makalenin sonunda ise paylaşılan örnek uygulamayı incelemenizi tavsiye ederim.OOP'u anlatırken basit manada belirli temel kavramları anlamtmak amacıyla başlamış olduğum bu makalede yeni başlayanlar için birçok özellik ve bir çok kural varmış gibi gözüksede kavramların matığını anlayarak ilerlemek ve yapmış olduğum yada internet ortamından  yapılan detaylı örneklerle OOP'u anlamak ilerde yapılacak detaylı projelerde yada kendi projelerinizde hayat kurtarabilir.

 OOP'u Anlamak

OOP için 5 Temel Öğe
        
         1)Class:Sınıf soyut bir veri tipidir.Nesne ise onun somutlaşan bir cismidir.Ram'in heap bölünde tututlur.Referans tiplidir (reference types ).Sınıf kavramı detaylı bir bölüm olduğu için örnek uygulamamızdan anlatmaya devam ediyor olacağım.Son olarak   class içinde tanımlanabilecek temel anlamda kullanılan öğeler
         1)fields(değişkenler)
         2)Methodlar(constructor gibi yada Kullanıcı tanımlı methodlar)
         3)Eventler
          ===Abstract Class==   
         1-a)Abstract Class Nedir?Ve özelliklerine nelerdir.
         * Absctract classlar kendinden türeyen classlara base class olmak amacıyla yazılır
         * Abstract classlar Absctract methodlar içerebilirler
         * Abstract class içindeki abstract methodların gövdeleri yazılmaz.Abstract classdan türeyen sınıflar içinde implemente edilerek(zorunlu override işlemi) kullanılırlar.
         * Abstract methodlar default olarak public access modifersina sahiptirler
         * Abstract classlardan instance alınamaz
       
         ====Sealed Class======
         1)Sealed Class:Mühürlenmiş anlamına gelir ve classın son halidir.Bu classdan miras alınamaz. 
         2)Interface:davranışların sınırlanması için yazılır.Amacı Kullanılacak classa rehberlik etmektir.Son olarak bir class en fazla bir class dan türetilebilirken(base class ve drived class mantığı) birden fazla interface'den türetilebinilir

       ========Basit Anlamda İnterfaceözellikleri=======  
    
         2-a) Interface ler yukarda bahsettiğim gibi Rehber görevi görürler. Yani içerisine herhangi bir kod parçası ekleyemeyiz. Sadece tnaımlama yaparız.
         2-b)Bir Interface in tüm üyeleri Public kabul edilir. Private, Protected, Static gibi tanımlanamazlar.
         2-c)Üyeleri public olarak ta tanımlayamayız, çünkü zaten hepsi public olarak tanımlanmış kabul edilir. Aksi halde hata alırız.
        
         2-d)Bir arayüzü, başka bir arayüzden türetebiliriz, fakat bir Class tan yada Struct dan türetemeyiz.
         2-e)Interface leri miras alan sınıflar, içerisinde tanımlanan tüm metodları Implemente etmek zorundadır.
         2-f)interface tanımlarken interface verilen allianz isme I eklenerek Tanimlanir Örneğin IDepo gibi;
         3)Struct:Aynı classlar gibi kullanılabilirler.Yani Sınıflardan farkı belleğin heap bölgesinde değil stack’te tutulmasıdır.bu yüzden classlara göre daha hızlıdırlar.İçlerinde Constructor,properties,field tanımlanabilinir.Kalıtım alamazlar.16byte yer kaplar
        
         4)Enum:Sabit tanımlamalar için kullanılırlar.Ram'in stack bölgesinde bulunur.yani deger tiplidir.Default olarak int tipindedir.4 byte yer kaplar
        
         5)Delegate:Delegate en basit anlamıyla metod referansıdır. Yani delegate metod referansını tutar.Örneğin mouse move,mouse up vs gibi Delegate tanımlanırken metodun geri dönüş değeri ve parametreleri belirlenir. Geri dönüş değerini void ve parametresiz tanımlamak da mümkündür. Kullanılacak metod, tanımlanmış olan delegate geri dönüş ve parametrelerine uygun olmalıdır.

 OOP Kurallari
         Encapsulation:Basit manada Class içindeki fieldsların dışardan erişimini engellemek için acces modifersleri private olarak işaretlerinip aynı fieldslar için oluşturulan propertieslere public access modifersleri verilerek kullanılır(Blog içersinde detaylı olarak video anlatım bulunmaktadır)
        
         Inheritance:Kalıtım bir sınıfın tüm özellikleri ve methodlarının miras olarak alınmasıdır. (paylaşılan proje içindeki örneği inceleyiniz).
       
         Polymorphizm:Biribirinden türeyen classların içindeki methodların isimleri aynı olması durumunda base classdaki method'un virtual anahtar kelimesi ile imzalanıp base classlardan türeyen drived classlarda basedeki methodun farklı davranması sağlanır.Bu işleme  Polymorphizm(Çok Biçimlilik) denir
          Constructor: C#'te herşey bir nesnedir. Nesne kavramını duyduğumuzda aklımıza gelen ilk şey Constructor(yapıcı) metottur. Çünkü bir nesnenin örneklenip Ram'e çıkabilmesi için constructor metot çağrısı yapılması gerekir.Constructor kullanım amacımız nesneye ilk değerini atayabilmek,Nesne kullanıcısını belirli bir değer vermeye zorlamak (method overload ile),Nesne oluşturulurken yapılacak işlemleri gerçekleştirebilmek
         ===============Constructor Özellikleri================
       1-Geriye değer döndürmez.

       2-İsmi,tiple aynı olmak zorundadır.

       3-istenildiği bir anda çağrısı yapılamaz. Özel bir çağrılma biçimi vardır.

       4-Nesne üretmek için çağırılan metottur. Constructor metot çağırılmadan heap'te nesne üretilemez.
        
        AccessModifers

        private :Sadece sınıf içinde kullanılabilinir.Amaç sınıfın içindeki fieldslara dışardan erişimi engellemektir
        public:Proje içinde genel anlamda heryerden erişebilecek nesneler için Kullanılır
        protected:Miras alınan sınıflarda kullanılabilinir.Amac basede ki classın özelliklerini sağlamak ve korumalı bir biçimde bu işlemi gerçekleştirmektir.
        internal:Projedki nesnelerin kullanılabileceği ve  başka projelerin kullanılmasına izin vermez.Örnek olarak namespace uzağı dır diyebiliriz
        protected internal:Hem Proje içinde heryerde hemde miras alan heryerde kullanılabilinir

============Static Kavramı=====
   Static :Yazmış olduğumuz projelerde tanımlanacak değişkenlere bazen projenin heryerinden erişmek isteyebiliriz.Bunu OOP'da static olarak tanımlanacak değişkenler ile yapabileceğimiz gibi farklı yöntemlerlede bu işlem gerçekleştirilebilinir.Fakat ele aldığımız bölüm static(durağan) olma kavramı olduğu için örneklendirerek devam edelim.Proje içinde classlardan birinde static olarak işaretlenen  değişken o classdan instance almadan direk değer atama yöntemi ile gerçekleşebilinir.Paylaşılan projede detaylı inceleme yapabilirsiniz.

Method Overload :Method overload'ı açıklarken en güzel örnek class içindeki constructor'dır.Örneğin bir class oluşturduğunuzda default olarak varsayılan constructor boş olarak atanır. Ve Method Overload (Aşırı Yükleme) class içinde constructor method overload yapılacaksa (default) boş constructor tanımlanmalı ve classdan instance alınırken bu sefer new lediğinizde iki farklı kullanım gerçekleşicektir.tek şartı methodun imzasının değişmesidir(imza değişmeden kasıt alınan parametredir)
 
public class Urun
    {
              public Urun()
        {

        }

        public Urun(string adi,decimal fiyat)
        {

        }
}

C# Garbage Collector :Aslında başlı başına bir makale konusu olan garbage collector yapısına çok kısa manada değinmek için paylaşıyorum.Bir proje üzerinde alınan instancelerin işleri bittiğinde ramin heap bölümünden silinmesi amaçıyla kullanılırlar.Basit manada bellek yönetimi içindir.  IDisposable  arayüzünü kullanan yıkıcı bir methoda sahip olan nesneden faydalanılır.Daha Detaylı bilgi için tıklayınız. Garbage Collector 

 Aşağıdaki  linkten oop'a yönelik anlatımı gerçekleştirdiğim uygulamaya erişebilirsiniz.İçindeki yorum satırları umarım açıklayıcı olmuştur.yukarda bahsi geçen tüm kavramların nasıl kullanıldığına yönelik hatta farklı kullanımlarıda aynı anda görebilmeniz için yorum satırları ekledim.Umarım faydalı olur .İndirmek için Tıklayınız
 

Hiç yorum yok :

Yorum Gönder

Soru Görüş önerileriniz için gmail plus üzerinden + layın müsait olduğumda mutlaka yanıt dönüyor olacağım.