Bu site emekli olmuştur. Arşiv amaçlı olarak
BT AKADEMİ
sponsorluğunda yayın hayatına devam etmektedir.
Ana Sayfa
.net TV
Makaleler
Kaynak Kod
Haberler
Serbest Köşe
Canlı Köşe
Forum
C#nedir?
Ekibimiz
RSS
ADO.NET/SQL
ASP.NET
C++ / C++.NET
C# / VC#/.NET
XML / Web Serv.
YAZAR HAKKINDA
Ahmet Faruk Nacaroğlu
http://www.csharpnedir.com/
İletişme geçmek için
tıklayın
.
40
Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için
tıklayın
.
Yayınlanan diğer makaleleri için
tıklayın
.
İlgili etiketler:
ADO.NET/SQL
Ahmet Faruk Nacaroğlu
YAZI HAKKINDA
Türü
:
Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır.
Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi
:
Başlangıç
Kategori
:
ADO.NET/SQL
Yayınlanma Tarihi
:
14.1.2004
Okunma Sayısı
:
43402
Yorum Sayısı
:
7
yorum yaz
SİTE İÇİ ARAMA
Üye
GİRİŞİ
Üye girişi için
tıklayın
.
Kullanıcı Adı
Şifre
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
Şifremi / Kullanıcı Adımı unuttum.
C#nedir? hesabınız yok mu?
Üye olabilmek için
tıklayın
.
Serbest KÖŞE
(?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır.
Bu yazılar editör incelemesine girmeden yayınlanır.
Silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
silindi
emre TAŞ
yazının devamı >
Bende Yazmak İstiyorum
Blogroll
Turhal Temizer
Conda install environment.yml Package
24.11.2024
Turhal Temizer
Mac OS/X Removing CUDA
24.11.2024
Burak Selim Şenyurt
Rust ile ECS Yaklaşımını Anlamak
24.11.2024
Burak Selim Şenyurt
Birlikte Rust Öğrenelim Serisi
24.11.2024
Diğer Herşey
»
Makaleler RSS
»
Video Gönder
»
Makale Gönder
»
Serbest Köşeye Yazı Gönder
»
Yazar Başvurusu
»
C#nedir? Ekibinde Olmalıyım!
Sponsorlar
Ana Sayfa
/
Makaleler
/
Ahmet Faruk Nacaroğlu
/
ADO.NET/SQL
/
C# ile MS Access Stored Queries Kullanımı
C# ile MS Access Stored Queries Kullanımı
Favorilerime Ekle
Gönderiliyor lütfen bekleyin...
arkadaşıma gönder
Arkadaşınızın email adresi:
*
Mesajınız:
Hızla gelişen ve değişen dünyaya ayak uydurmak için bilgisayarları hayatın tüm alanlarında kullanmak neredeyse zorunlu hale geldi. Diğer taraftan özellikle iş dünyasının bugünkü hacimde iş yapabilmesinde bilişim sektörünün katkısı yatsınamaz. Kısacası hem bilişim hem de iş dünyası birbirlerinin gelişmelerinde adeta katalizör gibi çalışıyorlar. Bu durumda kurumların iş süreçlerinin bilgisayar ortamında yürütülmesi için çok sayıda ve karmaşık uygulamara ihtiyaç gün geçtikçe artıyor. Bu da biz yazılımcılar için güzel bir gelişmedir.
Fakat yukarıda bahsettiğim olayın diğer bir yüzü de var. Çoğu zaman müşterilere sunduğumuz çözümlerde esneklik onlar için önemli bir kirter haline gelmiştir. Bir yazılımı geliştirirken çok değişik araçlar kullanma ihitmalinin olması bir bakıma bizim ilermizi yaparken daha planlama aşamasında dikkatli olmamızı zorunlu kılar hale gelmiştir. Bu yazıda inceleyeceğimiz konu da üreteceğimiz çözümleri daha fazla nasıl esnek hale getirebiliriz sorusuna cevap vermeye odaklanmıştır.
Düşünün ki siz bir uygulama geliştiriyorsunuz. Uygulamanızın veritabanı olarak hem Access hem de sQL Server ile sorunsuz çalışması gerekiyor. Mesela herhangi bir A şirketi ile bir proje konusunda anlaştınınz. Her şey tamam ama kullanılacak veritabanı konusunda onlar kararsız kaldı. Ya da onlara Access ucuz ama sınırlı bir çözüm olduğunu anlatmanıza karşın SQL Server gibi tam donanımlı bir veritabanı sunucusunun yetenklerinden bahsettikten sonra mlaiyetini de şu kadarcık dediniz. Onlar ne isterler acaba? Büyük ihtimal size önce Ms Access kullanalım eğer zamanla daha fazla veri işlemek zorunda kalırsak SQL Server'a geçeriz mi dediler?
Diğer taraftan sizin profesyonel bir yazılımcı olduğunuz varsayaraktan program kodları içinde SQL sorgularını görmekten hoşlanmadığınızı düşünelim. Hoşlanmamaktan ziyade programı olduğunca modüler geliştirmek ve kodun okunmasını kolaylaştırmak sizi ileride büyük sıkıntılardan kurtaracaktır. O zaman çözümü şu şekilde planlamakta fayda olduğuna inamıyorum. Uygulama 4 katmandan oluşmalı. En arkada veritabanı ve içine gömülmüş
Saklı Yordamlar
(Stored Procedures), veri erişim katmanı (Data Acces Layer), iş kuralları katmanı (Business Logic Layer) ve sunum katmanı (Presentation Layer). Eğer bu katmanları kulalnırsak uygulamamız yeteri kadar modüler olacaktır. Bir de .NET'in getirdiği esnekliklerle birlikte artık sunum katmanını diğer üç katman sabit kalmak koşulu ile sunum katmanını değiştirdiğimizde uygulammız gayet güzel çalışır. Sunum katmanı değiştirmekten kastim ise ister web formları veya windows formlarını kullanmaktır. Yani Uygulamamızı ASP.NET veya Windows uygulaması olarak çalıştırmak için sadece bu katmanı değiştirmek kafi olacaktır.
Buraya kadar herşey tamam gibi görnüyor. Az önce bahsettiğimiz gibi SQL Server ve saklı yordamları kullanmak gayet kolay. Fakat Access ile saklı yordamları kullanmak mümkün mü? Microsoft'un tüm benzer uygulamarında entegrasyona büyük önem vermesinden dolayı mümkün. Bunun için iki değişik yoldan birini seçebiliriz. Birincisi bir Access veritabanı içine saklı yordam gömebiliriz. Fakat bu iş için herhangi bir arayüz yok. Bunu yapmak için koda yazmak zorundayız. Diğer bir çözüm ise Access'te tanımladığımız Sorguları (Queries) saklı yordam çağıtıyor gibi çağırabiliriz. Bu tür sorgulara saklı sorgular (stored queries) ismi veriliyor.
MS Access Saklı sorguları tabiki karmaşık SQL Server saklı yordamlarından daha az yetenekli ama sizin işinizi büyük oranda göreceğine inanıyorum. Hatta bu tür sorguları program kodu içinden çağırmanın Access veritabanı ile çalışan uygulaların perfromanslarını belli ölçüde artırdığına dair değişik inceleme makaleleri de mevcut.
Çünkü Access saklı yordamları da veritabanı içinde bir nevi derleniyorlar!
Yalnız SQL Server saklı yordamlarındaki geri dönüş parametrelerinin Access saklı yordamlarında bulunmadığını hemen belirtelim. İsterseniz hemen nasıl saklı yordamları kullanacağımız öğrenmeye koyuyalım.
Örnek Uygulama
İlk görevimiz bir Access veritabanı oluşturmak olacak. İsmine
db1.mdb
verdiğimiz veritabanımıza
Kullanicilar
adlı bir tabo ekleyelim. Tablonun detayları aşağıda Şekil 1'de verilmiştir:
Şekil 1: Kullanicilar tablomuz ve yapısı
Yeni sorgu oluşturmak için hemen Access içinde veritabanımızın sorgular sekmesine tıklayalım:
Şekil 2: Sorgular sekmesi (Türkçe Ofis için Queries yerine Sorgular olmalı)
Ardından Tasarım görünümde Sorgul oluşuturma (Create query in Design view) seçeneğine tıklayınız. Karşımıza hemen tabloların listeleri çıkacaktır. Aslında listede sadece bir tablo olduğu için
Kullanicilar
'ı sorguya dahil edelim. Ardından sorgu ekranında boş bir yere sağ tıklayalım. Karşımıza çıkan seçeneklerden Sorgu Tipini ordan da Append Query'i seçelim:
Şekil 3: Sorgu tipini seçme
Seçme işleminden sonra karşımıza çıkan menüden tablo ismi olarak tabiki
Kullanicilar
'ı seçelim. Yine boş bir yerde sağ tıklayıp
Parameters
seçeneğiniz tıklammız gerekiyor. Karşımıza çıkacak kutucuğa parametreleri ve veri tiplerini sırası ile girelim. Örneğimiz için parametreler aşağıdaki gibi olmalı:
Şekil 4: Sorguya parametre ekleme
Yukarıda görülen şekilde parametrelerimiz ekldedikten sonra "OK"'yi tıklayıp yolumuza devam edelim. Şimdi sıra yine sorgu ekranında boş bir yere sağ tıklayıp çıkan şeyde (çıkan şeyin ismi aslında context menü'dür.) SQL view'i tıklayalım. Karşımıza sorgumuzun SQL kodu çıkacaktır.
Şekil 5: Sorgumuzun SQL görünümü
Yukarıdaki kodu dikkatlice incelerseniz bu koda bizim tam olarak istediğimiz gibi olmamış. Hemen bunu gerektiği gibi düzenleyelim:
Şekil 6: Sorgumuzun düzenlenmiş hali
Evet Şekil 6'daki haliyle sorgumuz tamamlanmış oldu. Değişikleri bir gözden geçirecek olursak. Öncelikle parametrelerin veri tipleri doğruydu ama büyüklükleri gereğinden fazla idi (herbiri 255 karakterdi). Diğer bir düzeltme ise Insert sorgusnun tamamlanmasıdır. Bu noktada özellikle son satıra dikkat etmeliyiz. Değerler olarak parametreleri veriyoruz!
Sorgumuzu
sp_KullaniciEkle
ismiyle kaydettikten sonra çalıştırmak için üstüne çift tıklayalım. Sorgu önce bizi uyaracak. Uyarı mealen tabloya yeni bri kayıt ekliyorsunuz dikkat edindir. Sonra bizden parametreleri aşağıdaki sıra ile isteyecektir.
Şekil 7: Sorgumuzu Access içinde çalıştırınca istenen parametreler.
İkinci bir saklı yordam daha yazmakta fayda olduğuna inanıyorum. Bu defa yazacağımız saklı yordam birincisiden farklı olacak. Parametre almayan ve SELECT sorgusu yapan bir saklı yordam. İsmini "sp_TumKullanicilariListele" olarak verebiliriz. Saklı yordamın SQL kodu aşağıda yeralıyor:
SELECT * FROM Kullanicilar;
Sıra program kodumuzu yazmaya geldi. program kodumuzu isterseniz Windows uygulaması olacak şeklide yazalım. Bunun için hemen bir Windows Projesi oluşturalım. Projenin ismini ben
Access_SakliYordamlar
olarak verdim. Ardından aşağıda görülen formu tasarladım:
Şekil 8: Saklı Yordamlarla çalışmak için bir form
İsterseniz önce forma bir göz atalım. Form kolayca fark edeceğiniz gibi iki kısmdan oluşmaktadır. Üst kısımda yeni kullanıcı eklemek için gerekli kontroller yeralıyor. Bunlar metin kutuları ve düğmemizdir. Alta ise sisteme kayıtlı tüm kullanıcıları listeleyen bir DataGrid. Bu işlem için aşağıdaki fonksiyonu kullanacağız:
//dataGrid'e tüm kullanıcıları yükleyen fonksiyon:
public void KullanicilariListele()
{
/********************************************************************
*
* BU ÖRNEK STORED QUERYLERİ PARAMETRESİZ ÇAĞIRMAYA YÖNELİKTİR!!!
*
********************************************************************/
// veritabanımıza bağlantı için gerekli string:
string strBaglanti = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\\db1.mdb";
// Bağlantı nesnemiz:
OleDbConnection conBaglanti = new OleDbConnection(strBaglanti); // Komutumuzu tanımlayalım
OleDbCommand cmdKullanicilar = new OleDbCommand( );
// komutumuzun tipini ve ismini verelim:
/* *******************************************************
*
* DİKKAT EDİN KOMUTUMUZUN TİPİ STORED PROCEDURE
* ve COMMAND TEXT'imiz ise STORED PROCEDURE'UN İSMİ
*
********************************************************/
cmdKullanicilar.CommandType = CommandType.StoredProcedure;
cmdKullanicilar.CommandText = "sp_TumKullanicilariListele";
// Komuta ilgili bağlantıyı ekleyelim:
cmdKullanicilar.Connection = conBaglanti;
// DataAdapter nesnemizi oluşturalım:
OleDbDataAdapter daKullanicilar = new OleDbDataAdapter(cmdKullanicilar);
// DataSetimizi tanımlayalım:
DataSet dsKullanicilar = new DataSet();
// Bağlantımızı açalım:
conBaglanti.Open();
// DataAdapterımızı dolduralım:
daKullanicilar.Fill(dsKullanicilar,"Kullanicilar");
// Datagridimize dataseti ekleyelim:
dgKullanicilar.DataSource = dsKullanicilar.Tables["Kullanicilar"];
// Son olarak bağlantımızı kapatalım:
conBaglanti.Close();
}
Kod 1: Tüm kullanıcıları DataGrid'e aktaran metod
Yukarıdaki metod ilk bakışta veritabanından bir takım verileri datagiride aktaran rutin gibi görünüyor. Aslında bu biraz garip bir metod. Hem kullanılan komutun tipi saklı yordam (CommandType.StoredProcedure satırına dikkat ediniz) hem de Access veritabanı ile çalışıyor. İşte bu makalenin amacı da bu değil mi? Fakat biz burda saklı yordam (stored procedure) çağırıyormuş gibi görünmemize rağmen Access'te yeralan bir saklı sorgu (stored query çağırıyoruz)
Takdir ederseiniz ki form göründüğü anda kullanıların listesini görmek için formun load metodundan Kod 'de yeralan metodu çağırmalıyız.
private void Form1_Load(object sender, System.EventArgs e)
{
// Önce dataGrid'e tüm kullanıcıları yükleyen fonksiyonu cağrılarım:
KullanicilariListele();
}
Kod 2: Formun Load metodu
Son olarak kullanıcıyı sisteme ekleyen metodu inceleyelim birlikte. Bu metod ise adım adım oluşturduğumuz
sp_KullaniciEkle
sayesinde yeni bir kullanıcı ekliyor. Metodun kodu şu şekilde:
private void btnKullaniciEkle_Click(object sender, System.EventArgs e)
{
// Veritabanı işlemlerine geçmeden önce kullanıcının girdiği
// değerleri bir alalım:
string strAdi = txtAdi.Text;
string strSoyadi = txtSoyadi.Text;
string strEmail = txtEmail.Text;
// Normalde yukarıda kullanıcının tüm girdilerini kontrol etmek
// gerekiyor. Fakat bu işlemi size bırakıyorum. Çünkü bu yazdıdaki
// odak noktamız Acsess Stored Query''lerini stored procedure gibi kullanmak. //--------- Veritabanı işlemleri başlıyor ------------//
// veritabanımıza bağlantı için gerekli string:
string strBaglanti = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\\db1.mdb";
// Bağlantı nesnemiz:
OleDbConnection conBaglanti = new OleDbConnection(strBaglanti);
// Komutumuzu tanımlayalım
OleDbCommand cmdKullaniEkle = new OleDbCommand( );
// komutumuzun tipini ve ismini verelim:
/* *******************************************************
*
* DİKKAT EDİN KOMUTUMUZUN TİPİ STORED PROCEDURE
* ve COMMAND TEXT'imiz ise STORED PROCEDURE'UN İSMİ
*
*********************************************************/
cmdKullaniEkle.CommandType = CommandType.StoredProcedure;
cmdKullaniEkle.CommandText = "sp_KullaniciEkle";
/* *********************************************************
* Parametreleri tanımlayıp onları komutumuza ekliyoruz: *
***********************************************************/
// Önce kullanıcı adını içeren parametreyi hazırlayalım:
OleDbParameter prmAdi = new OleDbParameter();
prmAdi.ParameterName = "@Adi";
prmAdi.OleDbType = OleDbType.VarChar;
prmAdi.Size = 20;
prmAdi.Value = strAdi;
// Soyadını içeren parametre:
OleDbParameter prmSoyadi = new OleDbParameter();
prmSoyadi.ParameterName = "@Soyadi";
prmSoyadi.OleDbType = OleDbType.VarChar;
prmSoyadi.Size = 20;
prmSoyadi.Value = strSoyadi;
// Son parametremiz ise email için:
OleDbParameter prmEmail = new OleDbParameter();
prmEmail.ParameterName = "@Email";
prmEmail.OleDbType = OleDbType.VarChar;
prmEmail.Size = 50;
prmEmail.Value = strEmail;
/***** Parametreleri komuta ekle ****/
cmdKullaniEkle.Parameters.Add(prmAdi);
cmdKullaniEkle.Parameters.Add(prmSoyadi);
cmdKullaniEkle.Parameters.Add(prmEmail);
// Komuta bağlantı nesnemizi de ekleyelim:
cmdKullaniEkle.Connection = conBaglanti;
// Bağlantıyı açalım:
conBaglanti.Open();
// Komutu çağıralım ve sonucu ekrana yazdıralım:
int sonuc = cmdKullaniEkle.ExecuteNonQuery();
MessageBox.Show("Veritabanına " + sonuc.ToString() + " kayıt eklendi ");
// Bağlantıyı kopart.
conBaglanti.Close();
// Yeni kayıt eklendiğne göre onu alt traftaki datagrid içinde
// görmek gerekir. Bunun için kullanicilariListele()'yi çağıralım:
KullanicilariListele();
}
Kod 3: Yeni bir kullanıcı veritabanına ekleyen metod
Yukarıdaki metod'un birinci yazığımızdan farklarından birisi Access saklı sorgusunu çağırırken parametre kullanıyor olmamız. Diğeri ise işin doğasından ötürü DataSet ve DataAdapter olaylarına hiç girmeden direk olarak komut nesnemizin ExecuteNonQuery metodundan faydalanmamızdır.
Sizin de gördünüz gibi Access saklı sorgularını tıpki SQL Server veya başka bri veritabanı sunucusunda (Oracle, DB2 gibi) yeralan saklı yordam çağırmak kadar kolaydır. Hatta ister parametreli ister parametresiz çağırma şanslarına sahipsiniz. Biz örneğimizde INSERT ve SELECT komutları ile çalıştık. DELETE ve UPDATE komutlarını da Access sorgu yordamlarmızda kullanabilirsiniz. Örnek programcığın kodunu indirebilirsiniz. bu kodu mutlaka derleyip çalıştırınız. Hatta DELETE ve UPDATE komutlarını da kullanacak şekilde değiştirmeniz sizin için öğrendiğinizi pekiştirmek babında faydalı olacağı kanaatindeyim.
Örnek kaynak kodları indirmek için tıklayın.
Makale:
C# ile MS Access Stored Queries Kullanımı ADO.NET ve SQL Ahmet Faruk Nacaroğlu
Yazılan Yorumlar
Yorum Yaz
EYL
11
2014
mehmet karaağaç
/
üye hakkında
Güzel bir makale :)
EYL
11
2014
mehmet karaağaç
/
üye hakkında
Güzel bir makale :)
EYL
11
2014
mehmet karaağaç
/
üye hakkında
Güzel bir makale :)
EYL
11
2014
mehmet karaağaç
/
üye hakkında
Güzel bir makale :)
EYL
11
2014
mehmet karaağaç
/
üye hakkında
Güzel bir makale :)
EYL
11
2014
mehmet karaağaç
/
üye hakkında
Güzel bir makale :)
AĞU
17
2006
Yunus Emre .
/
üye hakkında
bu makaleniz için çok teşekkür ediyorum. tam aradığım konuydu.
Sayfalar :
1
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için
tıklayın
.
Üye değilseniz
Üyel Ol
linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
Bu Konuda Son 10
Eklenen Son 10
Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor
Dizayn ve Kodlama
bt
akademi
. Tüm Hakları Saklıdır © Copyright 2002-2009 c#nedir?com
Makaleler
Serbest Köşe
Makale Gönder
.Net TV
Video Gönder
Canlı Köşe
Kaynak Kod
Forum
Haberler
Röportajlar
Anketler
C# Nedir?
İletişim
Site Haritası
RSS
Favorilere Ekle
Üyelik
Hesap Aktivasyon
Ekibimiz
Ekibe Katıl