• Sonuç bulunamadı

«BM364» Veritabanı Uygulamaları

N/A
N/A
Protected

Academic year: 2022

Share "«BM364» Veritabanı Uygulamaları"

Copied!
27
0
0

Yükleniyor.... (view fulltext now)

Tam metin

(1)

«BM364» Veritabanı Uygulamaları

Yaşar GÖZÜDELİ

[email protected] http://blog.verivizyon.com/ygozudeli

“İstemci Tarafta DB Erişimi Kodlamak"

HAFTA

9

(2)

Konu Akışı

 ADO.NET Bileşenleri

 Entity FrameWork ve O/R Mapping

(3)

ADO.NET

 Veritabanı uygulamalarında veri kaynağına erişim için standart bir yol

 ADO.NET' in bağlantılı ve bağlantısız çalışma modları

 ADO.NET nesne modeli

 Bir veritabanına bağlanıp veri okuma ve değiştirme

işlemini yapabilmek

(4)

Veritabanın Uygulamalardaki Rolü

Text dosyası, MSAccess,MySQL, SQL Server, Oracle....

PHP Script,VBScript,JavaScript, VB6.0,C#, VB.NET,Java ile yazılmış veri erişim

Class’ları-Kodları

Windows Ortamı, {ASP.NET, PHP,ASP,JSP}+Browser, Dos Ekranı

ADO.NET (veritabanı Erişim API'leri)

(5)

ADO.NET Nesne Modeli-Bağlantılı

İki tür erişim:

Bağlantılı Veri Erişimi

Connection, veritabanı ile bir bağlantı sağlar

Transaction, ACID'i sağlamak için kullanılan bir nesnedir.

DataAdapter Offline ve online verilerin veritabanı ile çift yönlü etkileşimini sağlar

Command, Veritabanına gidecek metin ifadeyi yönetir.

Parametrelerle, metin ifade şekillendirilebilir

DataReader,tek yönlü, ileri doğru küçük çaplı veri okumada kullanılır.

(6)

Veri Sağlayıcıları(Data Providers)

 Veri Sürücüsü

Uygulama-Veritabanı iletişimi

DLL olarak sistemde kayıtlıdırlar

ADO.NET ile veritabanı

uygulamaları geliştirirken, bu sürücüler kullanılır

Her bir sürücüye özgü veri sağlayıcısı

Özel Veri Sağlayıcıları:

Daha iyi performans

Genel Veri Sağlayıcıları

Daha genel işlev

Veri Sağlayıcısı İsim Uzayı

SQL Server System.Data.SqlClient OLE DB System.Data.OleDb ODBC System.Data.Odbc Oracle System.Data.Oracle

(7)

String conStr="Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=NWIND_RW.MDB";

OleDbConnection conn = new OleDbConnection(conStr);

conn.Open();

//… OleDbDataAdapter veya OleDbCommand ile veri işlemleri yapılır

conn.Close();

xxxConnection

OleDbConnection, SqlConnection…

Kullanım: 4 aşama

Oluştur

Kullan

Kapat

Transaction için destek sağlar

OleDbConnection Örneği:

(8)

OleDbConnection ile SQL Server'a Erişim

OleDbConnection conn =new OleDbConnection();

conn.ConnectionString = "Provider=SQLOLEDB;Data Source=.;Database=pubs;Integrated Security=SSPI";

try {

conn.Open();

Console.WriteLine("Bağlantı açıldı");

}

catch(SqlException hata) {

Console.WriteLine(hata.Message.ToString());

}

Finally{

conn.Close();

Console.WriteLine("Bağlantı kapatıldı");

}

(9)

ConnectionString

Bir veritabanına erişim için gerekli bütün bilgileri içerir

Çoklu tanımlamalar arasına noktalı virgül konur

Bütün tanımlamalar gerekli olmayabilir

Format ve yapıyı tanımak önemli

Parametreleri ezberlemeye gerek yok

yardım dosyasından-örnekten bakıp yazılır!

OLE-DB Sürücüsü

Veritabanı Sunucu Adı

Veritabanı adı Erişim Modu. Windows hesabından yetkili olanlar erişebilir

conn.ConnectionString= “ Provider = SQLOLEDB ; Data Source = (local)

; Database = pubs ; Integrated Security = SSPI ";

(10)

ConnectionString

 Bazı Connection String parametreleri

Kullanıcı adı ve şifre verilerek erişiliyor

conn.ConnectionString= "Provider = SQLOLEDB ; Data Source = (local) ; Database = pubs ; user id =webuser; password=w~q12|*- ";

Veritabanının yolu Access içinVeri erişim sürücüsü

OleDbConnection connAccess=new OleDbConnection ("Provider = Microsoft.Jet.OLEDB.4.0 ; data source = c:\\Authors.mdb" );

(11)

ConnectionString

using(SqlConnection conn) {

conn.ConnectionString = "Provider=SQLOLEDB;Data Source=localhost;Database=Friends;User

Id=sa;Password=sa.; ConnectionTimeout=10";

Console.WriteLine(conn.DataBase.ToString());

conn.ChangeDatabase("northwind");

//artık başka bir veritabanına bağlantı sağlıyor conn.Open();

Console.WriteLine("bağlantı açıldı");

conn.Close();

Console.WriteLine("bağlantı kapandı");

}

Çıkışta, connection nesnesinin Dispose() methodu çağrılır

(12)

xxxCommand

SqlCommand, OleDbCommand, OracleCommand, OdbcCommand …

Her command kendi connection'ı ile kullanılabilir

Veritabanında çalıştırılacak sorguları tutar, çalıştırır ve yanıt döndürürler

Sorgu = SP adı | tablo adı | SELECT * ifade

Özellikleri

Connection:Bağlantı sağlanan Conn nesnesi. Get ve set

CommandText: Sorgu metni.

CommandType: get-set. Text'deki komut nasıl değerlendirilecek

Text | StoredProcedure | TableDirect

CommandTimeOut: Saniye cinsinden bağlantının açık kalacağı süre

(13)

SQL Veri İşleme Dili(DML)

İfade Örnek

SELECT SELECT isim,soyad FROM tbKullanici

WHERE SELECT isim, soyad FROM tbKullanici

WHERE isim LIKE '%xxxxx%'

JOIN SELECT isim,soyad

FROM tbKullanici JOIN tbMakale

ON tbKullanici.KullaniciKod=tbMakale.YazarKod

INSERT INSERT INTO tbKullanici(isim,soyad) VALUES('Ali','Eryat')

UPDATE UPDATE tbKullanici SET isim=xxyy'

WHERE kullaniciKod = 3

DELETE DELETE FROM tbKullanici WHERE kullaniciKod = 3

tbKullanici

kullaniciKod isim soyad

1 Yusuf YAHYA

2 Volkan VERİM

3 Yahya ÖZTÜRK

tbMakale

MakaleKod Makale YazarKod

1 SQL….. 1

2 C#... 2

3 ASP.NET…… 1

•Veritabanına veri eklemek

•Veri Seçmek

•Veri silmek

•Veri Güncellemek için kullanılan standart ifadeler

(14)

Command Nesnesi ile Sorguların Kullanımı

OleDbConnection conn = new

OleDbConnection("Provider=SQLOLEDB;data source=.;initial catalog=dbContext;integrated security=SSPI");

String sSql = "INSERT INTO tbKullanici (isim,soyad) VALUES('Ahmet','Eryatan')

";

OleDbCommand cmd=new OleDbCommand(sSQL, conn);

(15)

Command Nesnesi ile Sorguyu Çalıştırmak

 Command.Text özelliğine yüklenen sorguyu

veritabanına gönderip çalıştırtmak için üç method

ExecuteNonQuery

Geriye Sonuç döndürmeyen sorgular içindir

Kaç adet kayıt etkilendiğini döndürür

SP'den parametre döndürebilir. SELECT sonucu da döndürmez

ExecuteReader

Bir xxxDataReader nüshalandır ve içine gelen sonucu doldurup döndür

ExecuteScalar

Skaler bir sonuç döndürür.

o SELECT COUNT(*) FROM tbKullanici bir sayı döndürür.

Skaler bir sorgu değil ise, 1x1 ile belirtilen hücreyi döndürür

(16)

Command ile SQL çalıştırma örneği

OleDbConnection conn = new OleDbConnection("Provider=SQLOLEDB;data source=.;initial catalog=dbContext;integrated security=SSPI");

String sSql = "INSERT INTO tbKullanici (isim,soyad) VALUES('Ahmet','Eryatan')";

OleDbCommand cmd=new OleDbCommand(sSQL, conn);

try{

conn.Open()

int sonuc = cmd.ExecuteNonQuery()

Console.WriteLine("{0} adet kayıt eklendi", sonuc.ToString())

}

catch(OleDbException e){

Console.WriteLine("Hata Oluştu:{0}", e.Message.ToString()) }

Finally{

conn.close();

(17)

xxxCommand.CommandType

Command'ın Text özelliğine verilen ifadenin türünü belirtmek için, Command.CommandType özelliği kullanılır

CommandType Açıklama

Text (Default) Sql ifadesi olarak çalıştırılması gerektiğini belirtir

StoredProcedure SP olarak çalıştırılması gerektiğini belirtir

TableDirect Tablo adı verildiğini belirtir ve SELECT * FROM

<tablo_ismi> ile tablonun içeriğinin çekileceğini

belirtir

(18)

TableDirect Örneği

// conn nesnesinde bağlantı açıldı

OleDbCommand cmd=new OleDbCommand("tbMarka",conn);

cmd.CommandType=CommandType.TableDirect;

try {

conn.Open();

OleDbDataReader dr;

dr=cmd.ExecuteReader();

while(dr.Read()) {

Console.WriteLine(dr["markaAd"].ToString());

}

dr.Close();

}

catch(Exception hata){

Console.WriteLine(hata.Message.ToString());

}

finally{ conn.Close();

Tablodaki Verilere erişim

(19)

SP örneği

STORED PROCEDURE, Veritabanında kayıtlı Sorgulara verilen ad.

C#'taki metodlar gibi davranır.(parametre alır-değer döndürür-parametre döndürür)

İçerisinde SELECT ifadesi varsa, resultset(tablular data) döndürür.

Cmd.CommandType = CommandType.StoredProcedure ile, Command nesnesinin veritabanına SP gönderdiği belirtilir

Örnek bir SP

CREATE PROCEDURE MarkaBul (

@markaKod int )

AS

SELECT markaKod, markaAd FROM tbMarka

WHERE markaKod=@markaKod RETURN

(20)

Command ile SP çalıştırmak

SqlCommand cmd=new SqlCommand("MarkaBul",conn);

cmd.CommandType=CommandType.StoredProcedure;

cmd.Parameters.Add("@markaKod",SqlDbType.Integer);

cmd.Parameters["@markaKod"].Value=201;

cmd.Parameters["@markaKod"].Direction = try

{ conn.Open();

SqlDataReader dr;

dr = cmd.ExecuteReader();

while(dr.Read()) {

Console.WriteLine(dr["markaKod"].ToString()+"-

"+dr["markaAd"].ToString());

}

dr.Close();

}

catch(Exception hata) {

Console.WriteLine(hata.Message.ToString());

}

(21)

xxxDataReader

Sadece ileri yönlü veri okuma için

Basit türden veri okuma işlemleri için hızlı

DataAdapter'e göre daha az yük bindirir.

Nüshalama işlemi için kendi yapıcısı yok

xxxCommand.ExecuteReader() ile nüshalanır ve döndürülür

xxxCommand, açık olduğu sürece veri okuyabilir

Bağlantılı halde veriye erişebilir. Bağlantısız veri tutmaz.

(22)

SqlDataReader Örnek

Açılan satırdan, 0 indisli sütunun değeri

Akımı başlat

dataReader kapanınca conn da kapansın

SqlConnection conn = new SqlConnection("data

source=localhost;integrated security=sspi;initial catalog=pubs");

String sSQL="SELECT au_lname,au_fname FROM authors";

SqlCommand cmd=new SqlCommand(sSQL,conn);

conn.Open();

SqlDataReader dr =

cmd.ExecuteReader(CommandBehavioru.CloseConnection);

while(dr.Read()){

Console.WriteLine(dr.GetString(0));

}

dr.Close();

conn.Close();

(23)

CommandBehavior Enumaratörü

CloseConnection

Command nesnesine, datareader kapandığında connection'ı da kapatmasını belirtir

KeyInfo

Sorguya ait anahtar alan bilgilerini de içeren bir dataReader nüshalamak için

SchemaOnly

Sorguya ait sadece şemayı içeren bir DataReader nüshalamak için

SequentialAccess

BLOB(Binary Large Object- Text-Binary-Image) türü veritabanı alanlarını sorgularken, bu alana bir streaming sağlayabilmek için.

BLOB alanlar 2GB civarı veri alabilir

SingleResult

Sorgu ne kadar resultset döndürürse döndürsün, ilk resultset'i okuyabilen bir DataReader. Daha iyi performans

SingleRow

Sorgu ne kadar satır döndürürse döndürsün ilk satır erişilebilir.

Daha iyi bir performans

(24)

CommandBehavior.SingleRow

SqlConnection conn = new SqlConnection("data

source=localhost;integrated security=sspi;initial catalog=dukkan");

String sSQL="SELECT isim, soyad FROM tbKullanici WHERE kullaniciKod=2";

SqlCommand cmd=new SqlCommand(sSQL,conn);

conn.Open();

SqlDataReader dr = cmd.ExecuteReader(CommandBehavioru.SingleRow);

for(int i=0; i<rd.FieldCount;i++){

Console.WriteLine(dr.GetName(i) +"="+ dr[i].ToString());

}

dr.Close();

conn.Close();

(25)

xxxDataReader-2

Önemli özellikleri:

FieldCount: Sorgudan dönen sütun sayısı

RecordsAffected: Sorgudan etkilenen kayıt sayısı

Indeksleyiciler'le veri okunabilir

dr[0] veya dr["isim"]

Veri Okumak için sağladığı Metodlar

dr.GetValue(), GetString(), GetInt32(),… ile veri okunabilir.

dr.Read()

ile bir satır açılır ve okunabilir hale getirilir. True döndürürse satır var demektir.

NextResultSet()

Yığının bir sonraki SELECT' inin sonucu

GetValues()

Geçerli olan satırı döndürür.

(26)

Ödev

 Bir adet SQL Server’a erişen istemci kod örneği

(27)

Sonuç

 Veritabanları sadece insanların sorgulamaları için

değildir. Yazılımlar da insanlarla etkileştikten sonra

verilerini veritabanlarında saklayıp veritabanlarından

okuyarak gösterebilirler.

Referanslar

Benzer Belgeler

— Örnek; MySQL sunucu üzerinde personel isminde bir veritabanı oluşturmak için aşağıdaki ifade kullanılabilir.

Bir dosyanın tüm parçaları birer extents olarak adlandırılır E er disk üzerinde yeterince yanyana bo alan varsa dosya tek bir extent olarak olu turulur Dosya yöneticisi yeni

Veri sağlayıcılarını sadece bir veri kaynağı için yapılan özel veri sağlayıcıları ve bir çok veri kaynağına hitap eden genel veri sağlayıcıları olarak 2'ye

Mutlu YAPICI Mıd Ürün M1 Xbox One M2 Playstation4 M3 Xbox One M4 PS Vita M3 Playstation4 Primary Key Primary Foreign Key Key Primary Primary Key Key Ürün Firma Fiyat. Xbox

nitelikleri olabilir, ancak veri modellemede, gerçek dünyanın soyut bir modeli oluşturulduğu için, bu niteliklerin yalnız küçük bir kısmı, uygulamalar için.. gerekli

Şimdide bu iki tabloyu ilişkilendirmek için 1 lik tablonun birincil anahtarını n lik tabloya yabancı anahtar olarak

 Bir bölümde birden fazla proje geliştirilmektedir ancak, her proje sadece bir bölüm tarafından gerçekleştirilebilinir.... Kavramsal, Mantıksal ve Fiziksel

Bölüm Formunda öncelikle verileri veri tabanından alıp list view de gösterme işlemlerini yapalım.. Veri tabanı bağlantı işlemi için