Slayt 1 - Verivizyon

Transkript

Slayt 1 - Verivizyon
HAFTA
9
“İstemci Tarafta DB Erişimi
Kodlamak"
Yaşar GÖZÜDELİ
[email protected]
http://blog.verivizyon.com/ygozudeli
«BM364» Veritabanı
Uygulamaları
Konu Akışı
 ADO.NET
Bileşenleri
 Entity FrameWork ve O/R Mapping
www.verivizyon.com
2
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

www.verivizyon.com
3
Veritabanın Uygulamalardaki Rolü
Windows Ortamı, {ASP.NET,
PHP,ASP,JSP}+Browser, Dos Ekranı
PHP Script,VBScript,JavaScript, VB6.0,C#,
VB.NET,Java ile yazılmış veri erişim
Class’ları-Kodları
ADO.NET
(veritabanı
Erişim API'leri)
Text dosyası, MSAccess,MySQL, SQL Server,
Oracle....
4
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.
5
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ı:


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
Daha iyi performans
Genel Veri Sağlayıcıları

Daha genel işlev
6
xxxConnection


OleDbConnection, SqlConnection…
Kullanım: 4 aşama






Oluştur
Aç
Kullan
Kapat
Transaction için destek sağlar
OleDbConnection Örneği:
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();
7
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ı");
}
8
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ı
conn.ConnectionString= “ Provider = SQLOLEDB ; Data Source = (local)
; Database = pubs ; Integrated Security = SSPI ";
Veritabanı adı
Erişim Modu. Windows hesabından yetkili olanlar
erişebilir
9
ConnectionString

Bazı Connection String parametreleri
OleDbConnection connAccess=new OleDbConnection ("Provider =
Microsoft.Jet.OLEDB.4.0 ; data source = c:\\Authors.mdb" );
Veritabanının yolu
Access içinVeri erişim sürücüsü
conn.ConnectionString= "Provider = SQLOLEDB ; Data Source = (local) ;
Database = pubs ; user id =webuser; password=w~q12|*- ";
Kullanıcı adı ve şifre verilerek erişiliyor
10
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
11
xxxCommand

SqlCommand, OleDbCommand, OracleCommand,
OdbcCommand …


Veritabanında çalıştırılacak sorguları tutar, çalıştırır ve yanıt
döndürürler


Her command kendi connection'ı ile kullanılabilir
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
12
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
•Veritabanına veri eklemek
•Veri Seçmek
•Veri silmek
•Veri Güncellemek için
kullanılan standart ifadeler
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
13
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);
14
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




ExecuteReader


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
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
15
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();
}
16
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
17
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();
Tablodaki
Verilere
erişim
}
catch(Exception hata){
Console.WriteLine(hata.Message.ToString());
}
finally{
conn.Close();
}
18
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
19
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());
}
finally{
con.Close();
}
20
xxxDataReader


Sadece ileri yönlü veri okuma için
Basit türden veri okuma işlemleri için hızlı


Nüshalama işlemi için kendi yapıcısı yok


DataAdapter'e göre daha az yük bindirir.
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.
21
SqlDataReader Örnek
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();
Akımı başlat
SqlDataReader dr =
cmd.ExecuteReader(CommandBehavioru.CloseConnection);
while(dr.Read()){
Console.WriteLine(dr.GetString(0));
}
dataReader
kapanınca conn
da kapansın
dr.Close();
conn.Close();
Açılan satırdan, 0 indisli
sütunun değeri
22
CommandBehavior Enumaratörü

CloseConnection


KeyInfo



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


Sorguya ait sadece şemayı içeren bir DataReader nüshalamak
için
SequentialAccess


Sorguya ait anahtar alan bilgilerini de içeren bir dataReader
nüshalamak için
SchemaOnly


Command nesnesine, datareader kapandığında connection'ı
da kapatmasını belirtir
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
23
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();
24
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()


NextResultSet()


ile bir satır açılır ve okunabilir hale getirilir. True döndürürse satır var
demektir.
Yığının bir sonraki SELECT' inin sonucu
GetValues()

Geçerli olan satırı döndürür.
25
Ödev

Bir adet SQL Server’a erişen istemci kod örneği
www.verivizyon.com
26
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.
www.verivizyon.com
27

Benzer belgeler