ODBC (Open Database Connectivity)

Veritabanı yönetim sistemlerine erişmek için standart bir yazılım arayüzü sağlar. ODB (Open Database), ODBC’nin genişletilmiş modelidir. ODBC’de veri tabanına istemci olarak erişim mümkünken ODB kullanıldığında bağlantının her zaman local′de görülmesi sağlanır. Böylece sistemde yoğunluk, veri kaybı ve IP çakışması yaşanmaz.

DAO (Data Access Objects)

ODBC’nin alt seviye diller için (C,C++, vb) geliştirilmiş olması ve kullanımının zor olması nedeniyle Microsoft tarafından Visual Basic 3 ile geliştirdiği ve kullanımı kolay bir teknolojidir. Microsoft’un Access veritabanlarına erişim standardı olan jet için geliştirdiği bu teknik, hala VB6’dan MS Access’e veri erişim için en hızlı yöntemdir.

RDO (Remote Data Objects)

Microsoft’un VB4 ile duyurduğu RDO; DAO’nun ODBC sağlayıcısındaki eksikliğini gidermek için geliştirilmiştir. Uzak veri kaynaklarına erişim için ODBC’yi daha performanslı kullanmak için geliştirilmiştir.

OLE DB (Object Linking and Embedding DataBase)

ODBC’de olduğu gibi sürücü  mantığıyla çalışan OLE DB, arka tarafta COM arayüzünü kullanan bir tekniktir. Kaydettiği gelişme ile bir çok sisteme bağlantı için kullanılabilmektedir. Bu başarısından dolayı da ADO.NET içinde önemli bir yeri vardır.

ADO (ActiveX Data Objects)

ADO.NET ‘in temelini oluşturan teknolojidir. ADO, OLE DB teknolojisini kullanan ve veriye erişimi daha da kolaylaştıran, yüksek seviye programlama dilleri için veri erişiminde tercih edilen bir teknolojidir.

ADO.NET

ADO.NET, .NET Framework ile geliştirilen veri işlemlerini kolaylaştırır. N katmanlı mimariler (Nesne Tabanlı Programlama) geliştirmek için hazırlanmış olup çevrimdışı sistemleri ve XML’e tam destek veren bir sistemdir.

 

System.Data: ADO.NET ile uygulama geliştirirken kullanılabilecek, tüm providerler için ortak olan bileşenlerin bulunduğu namespace’dir.

System.Data.SqlClient: SQL Server ile çalışabilmek için yazılmış class’ların yer aldığı namespace’dir.

System.Data.OleDB: Microsoft Access, Oracle, Text Dosyaları, Excel vb gibi sistemler bağlantıyı sağlar.

System.Data.Odbc: ODBC standartlarını destekleyen sistemlere bağlantı kurmayı sağlar.

System.Data.Oracle: Oracle bağlantısını sağlar. Referansı ekledikten sonra uygulamalarda Oracle için yazılmış olan class’lar kullanılabilmektedir.

SQL Server .NET Veri Sağlayıcısı (Data Provider) Ortak Tipleri

 

SQL Connection

Bu class ile bağlantı kurmak istenilen SQL Server instance’ını, kullanılmak istenilen veritabanını, ve bağlantı için gerekli olan güvenlik ayarlarını belirttikten sonra, ağlantı açılarak veritabanı kullanılabilir hale getirilmiş olur. Daha sonra diğer class’lar devreye girer ve veri taşıma işlemleri gerçekleştirilir.

Kısacası SQL Connection, database bağlantıyı sağlayan class’dır. Bu class’ın içerisinde belirtiğiniz adres ile uygulamanızın database bağlantısı sağlanır.

 

SqlConnection Sınıfının Özellikleri ve Metotları

 

1) ConnectionString

Veri tabanına bağlantı sağlamak için oluşturduğumuz bağlantı adresini (bağlantı cümlesini) belirttiğimiz metottur. bağlantı cümleleri için bakınız: “SQL Connection (SQL Bağlantı) Örnekleri”

Özellikleri

  • Data Source: SQL Server adı.
  • Integrated Security: True, Windows Authentication ile bağlantının yapılması. False ise, Sql Server Authentication ile bağlantı yapılmasıdır.
  • Persist Security Info: SQL Server’in güvenlik bilgilerini uygulama tarafına geriye göndermesidir. Varsayılan değer olarak False alır.
  • Pooling: SQL Server bağlantı havuzunu destekler. Varsayılan değer olarak True alır.
  • Max Pool Size: Aynı bağlantı için açılan havuzda, maksimum kaç tane bağlantının bulunması gerektiğini belirtir.
  • Provider: Sadece OleDBConnection için kullanılır.

 

2) Open()

Bağlantının kullanıma hazır olması ve açılmasını sağlar. SQL Server üzerinden kaynakların ayrılması ve kullanılabilmesini sağlayan metottur.

3) Close()

Bağlantının kapatılmasını sağlar. SQL Server tarafından ayrılan kaynakların bırakılmasını sağlar.

4) ConnectionState

Bağlantının durumunu verir. Alabileceği değerler: “Broken, Closed, Connecting, Executing, Fetching, Open” şeklindedir. Böylece bağlantının durumuna göre yapılacak işleme karar verilir.

SQL Connection (SQL Bağlantı) Örnekleri

Standart Güvenlik
Server=myServerAddress; Database=myDataBase; User Id=myUsername; Password=myPassword;

Güvenilir Bağlantı
Server=myServerAddress; Database=myDataBase; Trusted_Connection=True;

SQL Server Instance Bağlantı
Server=myServerNamemyInstanceName; Database=myDataBase; User Id=myUsername; Password=myPassword;

Bir CE cihazından gelen Güvenilen Bağlantı
Data Source=myServerAddress; Initial Catalog=myDataBase; Integrated Security=SSPI; User ID=myDomainmyUsername; Password=myPassword;

IP Adresi Üzerinden Bağlantı
Data Source=190.190.200.100,1433; Network Library=DBMSSOCN; Initial Catalog=myDataBase; User ID=myUsername; Password=myPassword;

Multiple Active Result Sets True
Server=myServerAddress; Database=myDataBase; Trusted_Connection=True; MultipleActiveResultSets=true;

Lokal SQL Server Express’e Database Ekleme
Server=.SQLExpress; AttachDbFilename=C:MyFolderMyDataFile.mdf; Database=dbname; Trusted_Connection=Yes;

Otomatik Lokal Database Bağlantısı
Server=(localdb)v11.0; Integrated Security=true;

SQL Command

Sql Connection ile bağlantımızı tanımladık ve veri tabanımıza güvenilir bir şekilde bağlantımızı sağladık. Şimdi sıra veri tabanında işlem yapmaya geldi bu bir sorgu olabilir veri ekleme olabilir (SELECT, INSERT, UPDATE, vb). O yüzden gerekli komutları yazmamız lazım. İşte Sql Command’da bu işlemi yapabilmek için oluşturulmuş bir class’dır. Sql Command ile bağlantı kurduğunuz veri tabanına komutlar gönderebilir istediğiniz işlemleri yapabilirsiniz.

SQL Command Metotları

  • CommandText: Parametrik veya parametresiz sql cümlelerinizi atanabileceği özelliktir.
  • CommandType: CommandText ile belirtilen ifadenin, stored procedure’mü, yoksa text’mi ifade ettiğini belirtir.
  • Connection: Sql Command ile yazılan sorgunun hangi veri tabanında çalıştırılması gerektiğini belirtir.
  • ExecuteNonQuery(): Yazılan komut ile etkilenen kayıt sayısının geriye alınabilmesini sağlar.
  • ExecuteScalar(): ExecueNonQuery ile aynı işlemi görür yalnız geriye sadece bir değer döndürür.
  • ExecuteReader(): Sorgu sonucunda geriye gelen verinin uygulama  tarafından alınabilmesini sağlar.
  • ExecuteXmlReader(): Gelen verinin XML formatında okunmasını sağlar.

Bağlantılı (Connected) Model

SqlDataReader

SqlDataReader, adından da anlaşıldığı üzere bağlantılı model bağlantı sağlar. Kısacası uygulamanız veri ile çalıştığı sürece sürekli açık bir bağlantı bekler. Tüm işlemleri anlık olarak yapacağından dolayı veri işlemleri oldukça hızlı gelişir.  Ama büyük datalar ile işlem yaptığınız zaman verileriniz yoğunluğundan dolayı kopukluklar yaşayabilirsiniz.

SqlDataReader Metotları

  • Read(): SqlDataReader’ın en önemli metodudur. Reader’ın veriyi satır satır okur. Her okumadan sonra bir sonraki satıra geçer. Eğer bir sonraki satıra geçemezse yani öyle bir satır yoksa false değerini döner. Böylece Reader ile tüm veri satırlarını tek tek gezmiş oluruz.
  • Get.(): Read() metodu ile okuduğu satırdaki sütunların değerlerini alabilmeyi ve aynı zamanda tiplerini de dönüştürerek alabilmeyi sağlar.
  • Close(): DataReader’in kullandığı connection nesnesini bırakmasını sağlar.

 

Bağlantısız (Disconnected) Model

SqlDataAdapter

Bu modelin bağlantısız olma özelliği, DataReader nesnesinde olduğu gibi ve o nesnenin en büyük sıkıntısı olan read-only, forward-only olması ve en önemlisi de son satırı okuyana kadar, bağlantının açık kalması gerekliliğinin, bu modelde olmayışıdır.

Kısaca açıklamak gerekirse SqlDataAdapter ile bağlantı sağlandığı zaman, SqlCommand(sorgu) ile gönderilen veri karşılığına gelen tüm datalar çekilir. Geri dönen tüm veriler DataAdapter üzerinde DataTable atanır. Böylece sürekli veriye bağlı kalınmasına gerek kalmaz. Daha sonra uygulama işlemi (örneğin veri silme işlemi) DataTable  üzerinden gerçekleştirir. Eğer işlem bittiyse DataTable üzerinden işlenen veri tekrar veri tabanına bağlantı sağlanarak veri tabanına gönderilir.

DataSet

DataSet, aslında veritabanının uygulama tarafındaki versiyonu olarak düşünülebilir. Veritabanının bire-bir kopyası olarak kullanılabilecek DataSet, uygulamanın çalıştığı makinanın belleğine yerleşir ve orada sanki veritabanıymış gibi kullanılabilir. Mesela bir DataSet üzerinde sorgulamalar, güncellemeler, eklemeler ve kayıt silme işlemleri yapılabilmektedir. Tabiki şunu da karıştırmamak gerekir. Bir DataSet veri tutmaz, veriyi DataSet içerisindeki DataTable adı verilen nesneler tutmaktadır. Bu nedenle, DataAdapter class’ının Fill() metoduna da DataSet’i doldurması söylendiğinde, aslında DataSet içerisinde birden çok DataTable olabilir ve bu tablolar arasında DataRelation adı verilen bağlantı nesneleri yer almaktadır. DataTable nesnesi de aslında içinde bir çok bileşen bulundurmaktadır. Bunların en önemlisi ve tablonun yapısını belirten DataColumn class’ıdır. Bu classla, kolonun yapısı, özellikleri, adı, tipi alabileceği verinin büyüklüğü vb. bilgiler tutulmaktadır. Diğer önemli bir bileşen de DataRow’dur. DataTable içerisindeki her bir satır, DataRow olarak belirtilmektedir. Veriler, DataColumn ve DataRow’ların kesiştiği hücrelerde tutulmaktadır.