DB Helper

Klasik Ado.Net kullanımını daha basit bir hale getiren metotları (transaction destekli) barındıran kütüphane projesi.

  • ExecuteScalar
  • ExecuteNonQuery
  • ExecuteReader
  • FillTable

Örnek kullanım;

Github bağlantısı.

For Json

For Json, Sql Server 2016 yeniliklerinden belkide en önemlisi.

Bu versiyonu kullandığımız da sorgu sonuçlarını direk Json biçiminde ala bilmekteyiz. Teknik olarak for xml ile aynı işlevsellikte verileri dışa aktarabiliriz.
Günümüz modern web ve mobil uygulamaların sıkça tercih ettiği bir veri biçimi olduğundan Sql Server 2016 il yerleşik olmasa da baya bir destek geldiğini söyleyebiliriz.

MSSQL için Xml aynı zamanda bir veri tipi iken Json değildir. Buna karşın Json verilerini nvarchar olarak saklayıp özel fonksiyonlar ile sorgulayabilirsiniz.

Basit bir örnek yapalım.
t­sql

json result

Şimdi örneği biraz ileri götürelim.
İstemci uygulamasının web olduğunu ve Js tabanlı bir DataGrid kullandığımızı varsayalım.
Örneğin Bootgrid. Bootgrid, verileri listelemek ve sayfalamak için bizden aşağıdaki gibi biçimde Json verisi ister.

Şimdi ihtiyacımız olan verileri Json olarak dışarı aktaran t-­sql kodunu yazalım.

Son olarak klasik Ado.Net ile verileri alalım.

Elbette ki de sadece bu kadar değil. DB seviyesinde bir kaç numara daha yapmanızı sağlayacak hareketler mevcut. Neler mi?

OPENJSON

Bu fonksiyon, nvarchar biçimde ki json verisini tablo verisine çevirmeye yarıyor.

Normal şartlarda “for json” komutu uyumluluk seviyesi 2014 de de çalışsa bile bu tip fonksiyonlarda ise mutlaka 2016 olması gerekiyor.

t­-sql

sonuç

Product Table

OPEN_VALUE

Json biçiminde saklı veri üzerine işlem yapmanıza olanak verir. Aşağıdaki gibi bir ürün tablosu tasarlayalım.

Product Table / Design

PropersitesÖzellikler tahmin edeceğiniz gibi Json biçiminde veri saklayacak. Amacımız, tüm ürünlerin özellik tanımları eşit olmayacağından dolayı şema bağımsız bir yapı elde etmek.
Örnek veri ekleyelim.

Select atalım ama detaylı olsun 🙂

For Json

JSON_MODIFY

Json formatında saklı verileri güncellemek için kullanılır. Bir önceki örnekten devam edelim.

Benim gibi veritabanı seviyesinde çok iş yapmayı sevmiyorsanız pek kullanacağını sanmam. Lakin bilmekte fayda var yoksa problemleri nasıl çözeceğiz 🙂

SqlBulkCopy İle Veri Kopyalama

Excel yada benzeri bir kaynaktan elde ettiğimiz yaklaşık bir milyon kayıt içeren bir DataTable olduğunu düşünelim. Bu kayıtları veritabanında ki x bir tabloya nasıl eklerizinsert ?

Tek tek Insert yapmak mı? Bildiğin intihar olur.
DataAdapter ile UpdateGüncelleme yapmak mı? İnanılmaz zahmetli ve gereksiz.(Çalışacağından emin bile değilim)

Biri Bulk Insert mü dedi, işte aradığımız cevap.
Bulk Insert, yüklü miktarda ki verileri herhangi bir tablotable ya performanslı bir şekilde aktarmak için veri katmanında kullanabileceğimiz bir komuttur. Ado.Net teknolojisi SqlBulkCopy (kısaca sbc diyelim) sınıfıclass ile bu işlemi kolaylıkla kullanmamıza olanak verir.
Tabi kullanımı bu kadar kısıtlamamak gerekir. Sbc ile iki farklı sunucu yada aynı sunucu içinde iki farklı tablo da kopyalanabilir.

Örnek

Excel dosyasındaki verileri DataTable nesnesine dolduracağız.  Sonar Sbc ile DataTable içindeki verileri örnek bir tabloya ekleyeceğiz.

Örnek Excel dosyası
Excel

Hedef tablo
Table

Excel dosyasındaki alanlar ile tablo alanlarını bilerek farklı isimlendirdim. Sbc sınıfının bir özelliği de bu gibi durumlarda alanları adresleyebilmesidirmapping.

Sınırsız Ağaç Yapısı İle Kategori Listeleme

Sınırsız ağaç yapısı ile veri listeleme tablo yapısı basit ama uygulama tarafı kod yazması tam tersine biraz karmaşıktır. Gelin bunu bir örnek ile açıklayalım.

YAPI

Aşağıdaki gibi bir tablomuz olsun. Sınırsız kategori ve alt kategorileri tutan.
Data Diagram
Kategori, hiyerarşinin en üstünde ise alt kategori değeri 0sıfır değilse üst kategorinin id değeri yer alacak.
Örneğin;
Kitap, kendi kategorisinde en tepede yani alt kategori değeri 0. Dünya Klasikleri ise Kitap kategorisinin altında olduğu için alt kategori değeri Kitap kategorisinin CategoryID değeri olacak yani 1 gibi …
Kategori Tablosu

Azıcık kod yazalım.
Kategori tablosunu DataTable la doldurarak başlayalım. Bu hamle işimizi bi hayli kolaylaştıracaktır. Daha sonra recursiveyinenelen bir metot yardımıyla kategori ve alt kategori bitinceye kadar döneceğiz. Son olarak ta elde ettiğimiz değerleri Treeview kontrolüne nodedüğüm olarak ekleyeceğiz.

Eğer karışık geldi ise biraz recursive çalışın.

Sonuç

Treeview

Veritabanından Xml’e Dönüştürme Yöntemleri

Şöyle bir düşündüğümüzde veritabanında bulunan herhangi bir tablonun (yada tabloların) verilerini Xml formatında dosyaya yazmanın kaç yolu vardır acaba?

DataTable

Bu sınıfı sadece yazmak için kullanmak kaynak tüketimi açısından çok iyi bir seçim olmaz fakat kullanım kolaylığı açısında tercih edilebilir.

XmlTextWriter

Diğer bir yöntem ise henüz Veri KatmanındaDataLayer iken oracıkta Xml formatına dönüştürüp XmlTextWriter ile cayır cayır yazmak.

XDocument

Aşağıdaki teknik ile (attributenitelik yerine bu sefer nodedüğüm kullandım) XDocument ile manuel olarak Xml dosyasını oluşturmak. Sanırım en zoru bu. Yanlış anlaşılmasın benim için kolay da hani ilk yapan için diyorum 🙂