• Anasayfa
  • Hakkımızda
  • Etkinlikler
  • Destek Verin
  • Site Haritası
  • Giriş Yap
  • Üye Ol
  • Facebook
  • Twitter
  • RSS
Yazılım Dilleri
  • Soru - Cevap
  • EĞİTİM SETİ
  • KATEGORİ
  • DUYURU
  • TEKNOLOJİ HABERLERİ

Son Sorular

  • 8/2/2020 11:38:31 PM'Basit' Yazılım Dili
  • 6/25/2020 3:18:13 PMderleme hatası
  • 12/11/2017 4:49:15 PMWindows Hizmeti Hk.
  • 4/23/2016 12:55:33 AMC programlama 2 oyun

Popüler Sorular

  • 5/27/2012 5:49:50 AMAsp.Net ile Date time alana veri ekleyemiiyorum ?
  • 4/2/2012 12:45:18 AM.exe uzantılı dosya için dijital imza nerde nasıl alınır.
  • 5/12/2012 8:44:49 AMAcil Yardım
  • 5/27/2012 1:46:51 PMveri tabanı bağlantısı
  • .Net Framework
  • 8085 Assembly
  • Active Directory
  • ADO.NET
  • Android
  • Apple IOS
  • Arduino
  • ASP.NET
  • ASP.NET MVC
  • Blackberry
  • C#.Net
  • C++
  • CCG Framework
  • CISCO
  • CSS
  • Diğer
  • Dreamweaver
  • Entity Framework
  • Exchange Server
  • Gömülü Sistemler
  • GSM Programlama
  • Güncel
  • Güvenlik
  • HTML5
  • Java
  • Javascript / JQuery
  • Jira
  • Kariyer ve İş Yaşamı
  • LibreOffice
  • LINQ
  • Linux
  • Matlab
  • Microsoft Dynamics CRM
  • Mobil Uygulama Geliştirme
  • MySQL
  • NoSQL
  • Oracle
  • OWIN
  • PFSense
  • PHP
  • Powershell
  • Python
  • Sanallastirma
  • SAP-ABAP
  • SCOM 2012
  • SEO
  • Sharepoint 2010
  • Sharepoint 2013
  • Silverlight
  • Sistem Analiz ve Tasarımı
  • SQL Server
  • Symantec
  • TFS
  • T-SQL
  • Ubuntu
  • VB.NET
  • Veritabanı Yönetim Sistemleri
  • Visual Studio
  • VMware
  • WCF
  • Web Hosting
  • Windows 8
  • Windows Azure
  • Windows Phone 7.1
  • Windows Phone 8
  • Windows Server
  • Wordpress
  • WPF
  • Xamarin
  • XNA
  • Yazılım Mühendisliği
  • Yöneylem Araştırması
  • ASP.NET MVC
  • Entity Framework
  • Javascript / JQuery
  • LINQ
  • PHP

Son Duyurular

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

IPhone 6 ve IPhone 6 Plus Teknik Özellikleri ve Fiyatı

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

DELL'in Yeni Projesi: USB Bilgisayar (Project Ophelia)

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Windows Phone Youtube Uygulaması Google ve Microsoft ile Yeniden Yapılıyor

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Android ve Apple IOS Telefonlar için Blackberry Messenger (BBM)

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

Nokia Lumia 925 Teknik Özellikleri, Lumia 928 ve 920 ile Karşılaştırması

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

LG Optimus G Pro Özellikleri ve Gözle Video Oynatma Teknolojisi

CCG Framework ile Veritabanı Erişim Katmanı Oluşturma

CCG Crud Class Generator Framework ile veritabanı erişim katmanı data access layer DAL oluşturma, insert update delete select join sorgu ve işlemleri nasıl yapılır, öğrenelim.

09.07.2014

Yazar: Hakan Keskin (Google+)

Kategori: CCG Framework

7038

Veri Erişim Katmanı Olarak CCG Kullanımı

Bildiğiniz gibi, geliştirilen uygulamaların çok büyük bir kısmı veritabanı etkileşimli. Yani, veritabanına veri yazmak, güncellemek, silmek ve okumak üzerine kurulu.

Durum böyle olunca, uygulamalar içindeki veri erişim katmanları önem kazanıyor. İdeal bir veri erişim katmanı; hızlı, esnek, güvenli ve kolay kullanıma sahip olmalıdır. Bu doğrultuda pek çok katman geliştirilmiştir.

Olaya .Net penceresinden bakıldığında, tüm bu katmanlar temelde, ADO.Net üzerine kuruludur. Yani, veri erişim işlemlerinizi, bu katmanların hiçbirisini kullanmada, sadece sql sorguları yazarak ve ADO.Net özelliklerinden (property) ve yöntemlerinden (method) faydalanarak yapabilirsiniz. Ama bu durumda, kod geliştirmek oldukça zahmetli ve zaman alıcı olacaktır. Ayrıca, güvenliği ve performansı sağlamak da tamamen size kalacaktır.

pek çok işlemi kendisi halleden ve kolay kod geliştirmenizi sağlayan bir veri erişim katmanını seçip, uygulamalarınızı o katman üzerinde geliştirmenizde fayda vardır. Bunun için Microsoft tarafından çıkartılan, iki önemli katmandan bahsedebiliriz. Bunlardan birisi TypedDataset ve diğeri, Sql To Linq. Her iki yapıda da temel, OMR (Obejcet Mapping Relation) kavramının üzerine kuruludur. Her ikisi de, veritabanında oluşturulmuş olan bir tabloyu, kod tarafında bir nesne (object) olarak temsil eden sınıflar oluşturur ve siz kod geliştirirken, veri erişiminizi bu sınıflar üzerinden yaparsınız.

Bu iki yapı da, görece kolay kod geliştirme olanağı sağlar. En azından, ilgili tablonun kolonlarına doğrudan intellisence ile erişim yapmanıza olanak verirler. Ancak, bu iki yöntemin de kendisine göre bazı dezavantajları vardır. Örneğin; her ikisinin oluşturduğu nesneler de oldukça büyüktür ve özellikle büyük projelerde ciddi performans kayıplarına neden olurlar. Öte yandan, TypedDataset kullanırken, her bir tablo için select cümlesini kendiniz yazmalısınız. Linq ise, görece daha karışık ve kullanımı zor bir araçtır.

Yukarıda bahsedilen nedenlerden ötürü, pek çok firma ve kişi, farklı özellikler sunan veri erişim katmanları hazırlamıştır. Bunlardan bazıları ücretliyken, bazıları da ücretsiz, hatta açık kaynak kodludur. Bu katmanları inceleyip, kendinize en uygun olanı seçerek, uygulamalarınızı onunla geliştirmenizde fayda vardır. Ama, önemli bir uyarı; hangi veri erişim katmanını kullanırsanız kullanın, veri erişiminin temeli olan SQL sorgu dilini ve ADO.Net’i iyi öğrenin ve unutmayın.

Buraya kadar bahsedilen nedenlerden dolayı, alternatif olarak geliştirilen veri erişim katmanlarından birisi de CCG. CCG aslında, Crud Class Generator kısaltmasıdır. Crud ise, bildiğiniz gibi; Create-Read-Update-Delete kelimelernin baş harflerinden oluşmuştur.

CCG; yazılım geliştiriciye kolay bir kullanım, hızlı kod geliştirebilme özelliği, güvenlik ve performans sunmak amacı ile oluşturulmuş; temelde, veritabanı üzerinde oluşturulan tabloların özelliklerini ve tablolar arasındaki ilişkileri kullanarak, tabloları class şeklinde birer nesne olarak oluşturan ve veri işlemleri yaparken, bu sınıfları kullanan bir yapdır. Bu yapı; tablolara ait sııfları oluşturan bir generator, oluşan sınıfların ortak olarak kullandığı temel yöntemleri içeren bir DataService dll nesnesi ve pek çok yardımcı yöntem (method) içeren bir Helper dll nesnesinden oluşmaktadır. CCG açık kaynak kodlu olarak lisanslanmıştır ve ücretsizdir.

Bu makalemde, öncelikle, CCG ile ilgili kurulum dosyalarını nereden indirebileceğinizden bahsedeceğim. Daha sonra, temel kullanım özelliklerini, basit bazı örnekler ile anlatacağım.

CCG Başlangıç:

Bu kısmda, CCG ile ilgili dosyaların indirilmesi ve .Net projesine eklenmesi anlatılacaktır:

Gerekl i Dosyaların İndirilmesi

İlgili tüm dosyalar, codeplex alanından, alttaki link aracılığı ile indirilebilir.

https://ccg.codeplex.com/releases

Alttaki dosyaları indirin:

  1. SQL Server 2005 ve üzeri için:
    1. CCG 3.2.5 S
    2. CCGDataService 3.0.0 S
    3. Helper 3.0.0
  2. SQL Server 2005+ ve Oracle için:
    1. CCG 3.2.5 SO
    2. CCGDataService 3.0.0 SO
    3. Helper 3.0.0

Kurulum

İndirdiğiniz “CCG 3.2.5 S” veya “CCG 3.2.5 SO” msi dosyasını çalıştırın. Daha sonra “Next” butonuna tıklayarak devam edin ve kurulumu yapın.

Kurulum sonrasında uygulama çalıştığında, “ConnectionString bulunamadı ! Bu nedenle veritabanı bağlantısı gerçekleştirilemedi” şeklinde bir hata verebilir. Henüz veritabanı bağlantı ayarları yapılmamış olduğundan bu hatayı verecektir. “OK” butonuna bastığınızda program açılacaktır.

İndirilen Dosyaların Projeye Eklenmesi

İndirdiğiniz “CCGDataService 3.0.0 S” veya “CCGDataService 3.0.0 SO” rar dosyasını açtığınızda, “dll, pdb ve Xml” uzantılı üç adet dosya göreceksiniz. Bu dosyaları, projenizdeki uygun bir klasöre kopyalayın ve veri erişim katmanınıza buradan referans gösterin. Bu dosya, veri erişimi için gereken genel yöntem (method) ve özellikleri (property) içerir.

Not: “CCGDataService 3.0.0 SO” dosyasını kullanabilmeniz için, sisteminizde OracleDataAccess kurulu olmalıdır.

İndirdiğiniz “Helper 3.0.0” rar dosyasını açtığınızda, “dll, pdb ve Xml” uzantılı üç adet dosya göreceksiniz. Bu dosyaları, projenizdeki uygun bir klasöre kopyalayın ve veri erişim katmanınıza buradan referans gösterin. Bu dosya, projenizde ihtiyaç duyabileceğiniz pek çok yardımcı yöntem (method) ve özellik (property) içerir. Bu nedenle, ihtiyaç durumunda, projeniz içindeki diğer katmanlara da referans gösterebilirsiniz. Örneğin, web projenize ve varsa, iş katmanına ekleyebilirsiniz.

 

Şekil 1

CCG anlatımı için kullanılmak üzere örnek bir çözüm (solution) oluşturulmuş ve katmanları yukarıdaki şekilde gösterildiği gibi ayarlanmıştır.

CCG uygulaması tarafından oluşturulacak olan ve her birisi, veritabanındaki bir tablonun nesnel gösterim karşılığı olan sınıflar (class), MusteriTakip.DAL projesi altında bulunan CCGObjects isimli klasör altına, şema (schema)’larına göre ayrıştırılarak otomatik olarak kaydedilecektir.

CCG Kullanımı :

Gerekli Ayarların Yapılması

  1. Bilgisayarınıza kurulmuş olan CCG uygulamasını açın.
  2. ConnectionString alanına veritabanı bağlantı cümlesini yazın ve kaydedin.

Şekil 2

Conection String Örnekleri:

- Data Source=10.0.36.192;Initial Catalog=MUSTERI_TAKIP;Integrated Security=True

- Data Source=10.0.36.192;Integrated Security=false;User id=UserID;Password=password;Initial Catalog=MUSTERI_TAKIP;

  1. “Project Path”, “Crud Class SubPath” ve “Types Subpath” alanlarını doldurun.

Şekil 3

                Project Path: Solution dosyanızın olduğu path’dir.

Şekil 4

                Crud Class SubPath: Oluşturulan crud class’larının kaydedileceği path.

Types Subpath: Oluşturulan enum class’larının kaydedileceği path.

  1. Yukarıdaki ayarları yaptıktan sonra, formun sol alt köşesinde bulunan “Save Settings” butonuna tıklayarak ayarları kaydedin.

Şekil 5

Örnek Proje İçin Veritabanı ve Tabloların Oluşturulması

Tabloları alttaki şekilde oluşturun.

Şekil 6

Tablo isimlerinin yanında parantez içinde verilenler şema (schema) isimleridir. Buna göre ana tablo olan MUSTERI ve detay tablosu olan MUSTERI_ILETISIM tabloları MT şeması altına, tanım tablosu olarak kullanılacak olan ILETISIM_TIPI tablosu TT_MT şeması altına kaydedilmiştir.

Ayrıca; MUSTERI ile MUSTERI_ILETISIM ve ILETISIM_TIPI ile MUSTERI_ILETISIM arasındaki “Delete Rule” Cascade olarak tanımlanmıştır. Yani; MUSTERI tablosundan bir kayıt silindiğinde, bu kayda ait iletişim bilgileri de MUSTERI_ILETISIM tablosundan otomatik olarak silinir. Aynı şekilde; bir iletişim tipi silindiğinde, MUSTERI_ILETISIM tablosundaki, silinen iletişim tipine ait tüm kayıtlar otomatik olarak silinir.

Sınıfların Oluşturulması (Crud Class Generation)

CCG uygulamasını açarak;

1. Veritabanına bağlanın.

Şekil 7

2. Schema alanına MT yazın. Sadece M yazdığınızda MT otomatik olarak gelecektir.

3. Table alanına class’ı oluşturulacak tablonun adını yazın. İlk üç karakter gidiğinizde, tablo adı otomatik olarak gelecektir.

4. Ya da, birden fazla tablo için class oluşturmakisterseniz, “Multy Selection” işaretleyin ve açılan listeden, class’ını oluşturmak istediğiniz tabloları seçin.

Şekil 8

5. Diğer ayarlara dokunmadan “Generate Selected Classes” butonuna tıklayarak class’ları oluşturun.

 

Şekil 9-10

Önceden belirlendiği şekilde, MusteriTakip.DAL/CCGObjectsaltına şema ismi ile bir klasör açılacak ve Class’lar bu klasörün altına oluşturulacaktır.

Ancak; ilk anda, oluşturulan klasör ve class’lar, projeye dahil olmadığından, proje altında görünmezler. Bunun için, proje seçilir ve “Solution Explorer” ekranının üst kısmında bulunan “” butonuna tıklanır (Şekil 9). Bu durumda dosyalar exclude olarak görüntülenir. CCGObjects altına oluşturulmuş olan “MT” klasörüne sağ click yapıp “Include In Project” tıklandığında, klasör ve altındaki class’lar, projeye eklenir (Şekil 10).

6. Yukarıda anlatıldığı şekilde, TT_MT şeması altındaki ILETISIM_TIPI tablosuna ait class da oluşturulur (Şekil 11).

Şekil 11

 

7. Oluşturulan (generated) class’lar partial olarak oluşturulmuştur. Yani, aynı isimde bir başka class oluşturarak, aynı tablo için, kendinize ait ek kodları yazabilirsiniz. Örneğin, MUSTERI tablosu için, kendinize ait diğer kodları yazmak üzere, MusteriCC.cs isimli bir class oluşturabilirsiniz. Böylece, tabloda yapılan bir değişiklik sonrası, class’ın yeniden generate edilmesinden dolayı, sizin tarafınızdan yazılan kodlar silinmez.

Şekil 12

8. MusteriTakip.DAL projesini, MusteriTakip.WebUI web projesine alttaki şekilde referans edin.

Şekil 13

CCG İle Örnek İşlemler

Projemiz, veritabanımız ve her bir tablonun nesnel gösterimi olan sınıflarımız hazır. Artık, generate edilmiş sınıflarımızı kullanarak, tablolara veri ekleyip, güncelleyebilir, veri silebilir veya okuyabiliriz. Üstelik bunları hiç sql sorgusu yazmadan, kolay bir şekilde yapabiliriz.

Default.cs dosyasını açarak kodumuzu yazmaya başlıyoruz. Buraya, CRUD işlemleri için bir dizi method ekledik. İlk method’umuzun içine “Musteri” yazdıktan sonra, hemen “MusteriTakip.DAL” projesindeki ilgili referansı using olarak ekliyoruz.

Şekil 14

Kayıt Ekleme

private void KayitEkle()
        {
            Musteri prm = new Musteri();
            prm.Adi = "Ahmet";
            prm.Soyadi = "Aydemir";
            prm.Unvani = "Genel Müdür";
 
            int musteriID = MusteriCC.Instance.Insert(prm);
        }
  • “Musteri” ismi ile oluşturulan parametre sınıfından bir örnek (instance) oluşturuyoruz.
  • Parametreleri veriyoruz.
  • Kayıt (Insert) işlemini yapıyoruz. Identity AutoNumber olarak tanımlanan MusteriID değeri, Insert işlemi sonrası otomatik değer alır. Insert işlemi bu değeri geri döndürür.

Kayıt Silme

private void KayitSil()
        {
            Musteri prm = new Musteri();
            prm.MusteriID = 1;
 
            MusteriCC.Instance.Delete(prm);
        }
  • MusteriID değeri “1” olan kayıt silinir.
private void KayitSil2()
        {
            Musteri prm = new Musteri();
            prm.Adi = "Ahmet";
 
            MusteriCC.Instance.Delete(prm);
        }
  • Musteri adı “Ahmet” olan kayıtlar silinir.

Güncelleme

private void KayitGuncelle()
        {
            Musteri prm = new Musteri();
            prm.Unvani = "Genel Müdür Yardımcısı";
 
            Musteri prmW = new Musteri();
            prmW.MusteriID = 1;
 
            MusteriCC.Instance.Update(prm, prmW);
        }
  • Önce, “Unvan” parametresini değiştirmek istediğimizi belirttik.
  • Sonra, “Where” cümlesi için “MusteriID” kolonunu kullandık. Yani, hangi kaydı güncellemek istediğimizi belirttik.
  • “Update” methoduna, oluşturulan prm ve prmW parametre nesneleri veriliyor.
private void KayitGuncelle2()
        {
            Musteri prm = new Musteri();
            prm.Unvani = "Genel Müdür Yardımcısı";
 
            Musteri prmW = new Musteri();
            prmW.Unvani = "Genel Müdür";
 
            MusteriCC.Instance.Update(prm, prmW);
        }
  • Unvanı “Genel Müdür” olan tüm kayıtları “Genel Müdür Yardımcısı” olarak günceller.

Sorgulama

private void KayitSorgula()
        {
            Musteri prm = new Musteri();
            prm.MusteriID = 1;

 
            DataTable oDt = MusteriCC.Instance.Select(prm);
        }
  • “MusteriID” değeri “1” olan kayıtlar sorgulanıyor ve DataTable olarak döndürülüyor.
DataTable oDt = MusteriCC.Instance.Select(prm,CCGDataService.JoinTypes.JoinAll);

  • “MUSTERI” tablosunun PK (PrimaryKey) ile bağlı olduğu tüm detay tablolar ve FK (ForeignKey) ile bağlı olduğu tüm tanım tanım tabloları “select” cümlesine “join” edilir ve kayıt o şekilde döndürülür.
private void KayitSorgula()
{
	Musteri prm = new Musteri();
	prm.MusteriID = 1;
 
	CCGDataService.JoinTypes joinType = CCGDataService.JoinTypes.JoinAll;
	string sortExpression = MusteriInfo.FieldName.Adi;
	bool sortDescending = false;
	int topN = 50;
	DataTable oDt = MusteriCC.Instance.Select(prm, joinType, sortExpression, sortDescending, topN);
}
  • “Select” methodunun farklı bir overload’ı kullanılmış durumda. Burada “sortExpression” değerine dikkat edin. “Adi” kolonuna göre sıralama yapılması istenmiş ama kolon adı elle yazılarak verilmemiştir. Onun yerine, CCG tarafından oluşturulan, “...Info” sınıfı kullanılmıştır. Böylece, tablodaki kolon ismi değiştirilip tabloya ait sınıf yeniden oluşturulduğunda, derleme sırasında hata alınacağından dolayı, düzeltme yapması son derece kolay olacaktır. Diğer türlü, derleme sırasında hata alınamayacağı için, hata ancak çalışma zamanında fark edilecek ve kodun düzeltilerek yeniden deploy edilmesi gerekecektir.
private void KayitSorgula3()
        {
            Musteri prm = new Musteri();
            prm.MusteriID = 1;
 
            Musteri musteri = MusteriCC.Instance.SelectAsMusteri(prm);
        }
  • Sorgu sonucu “Musteri” sınıfı tipinde döndürülmüştür.
private void KayitSorgula4()
        {
            Musteri prm = new Musteri();
            prm.Soyadi = "Aydemir";
 
            List<Musteri> musteriListesi = MusteriCC.Instance.SelectAsMusteriList(prm);
        }
  • Soyadı “Aydemir” olan müşterilerin listesi, “Musteri” sınıfı tipindeki bir “List” nesnesi olarak döndürülmüştür.

Aggregate Function Kullanımı

private void KayitSayisiniAl()
        {
            Musteri prm = new Musteri();
            prm.Soyadi = "Aydemir";
 
            object sayi = MusteriCC.Instance.SelectAggregateFunction(prm, CCGDataService.SqlAggregateFunctions.COUNT, "*");
        }
  • Soyadı “Aydemir” olan müşterilerin sayısı alınmıştır. Sonuç “int”e cast edilmelidir.

Ekleme-Güncelleme

private void Kaydet()
        {
            Musteri prm = new Musteri();
            prm.Adi = "Ahmet";
            prm.Soyadi = "Koç";
 
            Musteri prmW = new Musteri();
            prm.Unvani = "Genel Müdür Yardımcısı";
 
            int musteriID = MusteriCC.Instance.Save(prm, prmW);
        }
  • Adı “Ahmet, soyadı “Koç” olan bir kayıt varsa, unvanını güncelleyecek; yoksa, yeni kayıt ekleyecektir. İşlem, ekleme olursa, geriye “MusteriID” değeri dönecek; güncelleme olursa, “0” dönecektir.
int musteriID = MusteriCC.Instance.Save(prm, prmW, false);
  • Kayıt yoksa, ekleme yapsın; varsa, herhangi bir işlem yapmasın isteniyor ise, üçüncü parametreye “false” değeri verilir.

Toplu Kayıt

private void TopluEkleme()
        {
            List<Musteri> list = new List<Musteri>();
 
            Musteri prmMusteri = new Musteri();
            prmMusteri.Adi = "Kenan";
            prmMusteri.Soyadi = "Hızal";
            prmMusteri.Unvani = "Pazarlama Personeli";
            list.Add(prmMusteri);
 
            prmMusteri = new Musteri();
            prmMusteri.Adi = "Nazmi";
            prmMusteri.Soyadi = "İnal";
            prmMusteri.Unvani = "Pazarlama Sorumlusu";
            list.Add(prmMusteri);
 
            prmMusteri = new Musteri();
            prmMusteri.Adi = "Cihan";
            prmMusteri.Soyadi = "Karataş";
            prmMusteri.Unvani = "Satış Temsilcisi";
            list.Add(prmMusteri);
 
            MusteriCC.Instance.Insert(list, true);
        }
  • Üç farklı müşteri, aynı anda ve transaction içinde veritabanına gönderiliyor.

Master-Detay Ekleme

Şekil 15

  • Yukarıdaki örnekte;
    • MUSTERI tablosuna bir müşteri kaydı yapılıyor.
    • Bu kayıttan oluşan MusteriID değeri alınıyor.
    • Müşteriye ait, cep telefonu, iş telefonu ve e-posta adresi MUSTERI_ILETISIM tablosuna yazılıyor.
    • MUSTERI_ILETISIM tablosundaki MusteriID alanına, müşteri kaydı sırasında elde edilen Identity değer atanıyor.

 

Yukarıda anlatılan tüm işlemler, veritabanına bir defa gidilerek ve transaction içinde yapılıyor. Bu işlemlere; kayıt sonrasında, MUSTERI ve MUSTERI_ILETISIM tablosunu join ederek, veri çeken bir “select” komutu da eklenebilirdi.

Bunun için; “Proceed” komutundan önce, alttaki komutu ekleyin.

Şekil 16

Sonra da, “Proceed” komutunu alttaki gibi değiştirin.

Şekil 17

DataTable tipindeki oDt nesnesi, referans tip olduğundan, “Proceed” methodu içinde doldurulur ve geri döner. Bu nesneyi doğrudan bir grid’e verdiğinizde, alttaki şekilde bir sonuç elde edersiniz.

Şekil 18

NOT: Bu örnekte; aslında Identity alan olan MusteriID değeri “0” olarak veriliyor. Bu, MusteriID alanının sorgu içinde bulunacağını belirtir. Bu ve Bind işlemi sayesinde, ana tabloda insert sonrası oluşan PK durumundaki MusteriID değeri, diğer tablolara insert işlemi yapılırken FK olarak kullanılır.

Stored Procedure Kullanımı

private void StoredProcedureKullanimi()
        {
	    //prm.Add("ColumnName", Value);
            Dictionary<string, object> prm = new Dictionary<string, object>();
            prm.Add("Adi", "Hamza");
            prm.Add("Soyadi", "Kılıçtaş");
            prm.Add("Unvani", "Muhasebe Müdürü");
            prm.Add("IletisimTipNo", 2);
            prm.Add("IletisimBilgisi", "03121234567");
				   //Veritabani_Adı.Schema_Adı.Procedure_Adı
            string procedureName = "MUSTERI_TAKIP.MT.prdMusteriKaydet";
 
            CCGDataObject.Instance().ExecuteNonQueryStatement(procedureName, prm);
         }

Bir müşteri, iletişim bilgisi ile birlikte, stored procedure kullanılarak veritabanına yazılıyor.

private void StoredProcedureKullanimi2()
        {
            Dictionary<string, object> prm = new Dictionary<string, object>();
            prm.Add("Soyadi", "Kılıçtaş");
 
            string procedureName = "MUSTERI_TAKIP.MT.prdMusteriGetir";
 
            DataTable oDt = new DataTable();
            CCGDataObject.Instance().GetRecords(oDt, procedureName, prm);
        }

Soyadı “Kılıçtaş” olan kayıtlar stored procedure kullanılarak alınıyor ve bir DataTable nesnesine atılıyor.

Yazar Hakkında

Hakan Keskin

Hakan Keskin

www.yazilimdilleri.net

1997 yılında Elektrik-Elektronik Mühendisliği bölümünden mezun oldu. 2002 yılından beri profesyonel olarak yazılım geliştiriyor. Çeşitli firmalarda; araç takip, personel devam kontrol, otopark otomasyonu, çevre güvenlik, telemetrik kontrol, hemşire çağrı, Gsm-Gprs haberleşme, alarm kontrol sistemleri ve e-devlet projeleri geliştirdi. 2009 yılından buyana, e-devlet projelerinde, yazılım altyapısı (framework) çalışmalarında bulunmaktadır.

Sosyal Medya

ORANLAR

  • 7038izleme

Arkadaşlarınla Paylaş

  • Tweet

0 Yorum

Yorum Yaz / Soru Sor

Lütfen yorum yazmak veya soru sormak için üye girişi yapınız.

Son Yorumlar

  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Böyle bir sayfalama ağ trafiğini hafifleti...
  • Merhaba, ellerinize sağlık çok yardımcı ol...
  • Merhaba Bu uygulama örneğinden ASP.net ...
  • Hocam Link başka sayfaya yönlendiriyor.

En Güncel Sorular

  • Bilgilendirme maili (C#.Net)
  • Power Pivot (Sharepoint 2010)
  • BigInteger, BigDecimal (Asp.Net ve Asp.Net MVC)
  • visual C# ile asp nette veritabanı islemleri (Asp.Net ve Asp.Net MVC)
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ? (Sharepoint 2010)

En Son Cevap Verilen Sorular

  • Bilgilendirme maili
  • BigInteger, BigDecimal
  • visual C# ile asp nette veritabanı islemleri
  • Share Point ile Dosya Arşiv Yönetim Sistemi yapılabilir mi ?
  • txt dosyasına veri yazma

Twitter

Takip et: @yazilim_dilleri

En Çok Okunanlar

Elif BAYRAKDAR

C# ile SQL Server Bağlantısı, Insert, Update ve Delete Sorguları

23.05.2013

  • 123776
  • 0
Hakan Keskin

C# ile Windows Service Projesi Oluşturma, Debug Etme ve Setup Hazırlama

17.12.2013

  • 70839
  • 0
batuhan avlayan

Php - Mail Gönderme (İletişim Formu)

02.09.2013

  • 51496
  • 0

Sponsorlar

KODLAB
Pluralsight
Exchange server is
Office 365
YAZILIM DİLLERİ
Yukarı Çık
  • Hakkımızda
  • Facebook
  • Twitter
  • RSS

© Yazılım Dillerinin Buluşma Noktası | Kaynak belirtildiği sürece makaleler kopyalanabilir.
YazilimDilleri.Net sitesinde yer alan kullanıcıların oluşturduğu tüm içeriklerin yayınlanması ile ilgili yasal yükümlülükler içeriği oluşturan kullanıcıya aittir, YazilimDilleri.Net hiçbir şekilde sorumlu değildir.

Kapat

Giriş Yap

Kullanıcı Adı

Şifre

Şifremi Unuttum

KULLANICI GİRİŞİ