Son Haberler
Anasayfa / Yazılım / ASP.NET / ASP.NET SQL Komutları Çalıştırma

ASP.NET SQL Komutları Çalıştırma

Bir veritabanı bağlantısı tanımlanıp, bir komut çalıştırmak için yapılması gereken bir takım işlemler vardır. Öncelikle bağlantı kurulumu için deyim yazılır, fakat bağlantının açılması gerekir ki, komutlarla işlem yapılabilsin. Bağlantı açıldıktan sonra SqlCommand sınıfının çalışabilmesi için 3 çeşit komut çalıştırma yöntemleri vardır. Bu yazımda bunlara değinmek istiyorum. İhtiyacımıza göre istenileni kullanabiliriz.

ExecuteReader : ExecuteReader bir veya birden fazla veri satırının döneceği durumlarda sorgular ve stored procedure’ler için kullanılabilir. ExecuteReader bir SqlDataReader nesnesi dönmektedir. SqlDataReader sorgu sonucunda satır satır bilgi almak için kullanılır, ileri yönlüdür ve sadece okunabilirdir. SqlDataReader kullanmak veritabanından verileri okumada kullanılan en hızlı yoldur ancak bu yöntemle veriler üzerinde değişiklik yapılamaz, veriler güncellenemez ve veriler rastgele bir şekilde sıralanamaz.

SqlDataReader kullanıldığında veritabanındaki tüm bilgiler okunana kadar veritabanı bağlantısını açık tutar. Bu da bir problemdir, çünkü limitli bir bağlantı durumunda sürekli olarak SqlDataReader serveri meşgul edecektir. Aynı anda uygulamamıza bağlanan bir çok kullanıcı dolayısı ile hata alacaktır, veri görüntüleme yapamayacaktır. Bu sorunu azaltmak için SqlDataReader üzerinde elde ettiğimiz sonuçları bir DataTable nesnesine aktarır ve buradan verilerimizi okuyabiliriz. DataTable verileri herhangi bir açık veri tabanı bağlantısı olmaksızın saklayabilen nesnedir. Yani veritabanından bilgilerimizi SqlDataReader ile alırız bir DataTable nesnesine aktarırız ve bağlantmızı kapatırız. Böylelikle gereksiz yere server meşgul edilmemiş olur. DataTable için ileride makale yazacağım.

ExecuteScalar : SQL server üzerinden sadece tek bir veri dönecek ise kullanılır. Örneğin bir şirkette çalışanların sayısı, ya da bir markette süt ürünlerinin toplam stok sayısı gibi durumlar. Bu metotla geriye bir Object yani bir nesne döner. Ve biz bu nesneyi istediğimiz bir veri türüne dönüştürebiliriz.

ExecuteNonQuery : Veri ekleme, güncelleme işlemleri için kullanılan metottur. Geri dönen değer ise veritabanı üzerinde etkilenen verilerin satır sayısıdır.

Örnek olarak NorthWnd veritabanı üzerinde Employees tablosu üzerinde FirstName,LastName,EmployeeID gibi bilgileri okumak için neler yapmam gerekiyor bunu görelim. Tabi yine gösterme işlemini bir sonraki yazılara bırakıyorum amacım şu an mantıksal sıram ilk aşamada neler olmalı bunu göstermek..

Öncelikle ExecuteReader kullanacağım bunu belirteyim. Çünkü çalışanların listesini okuyacağım. Sonrası ExecuteReader kullandığımdan için dolayısı ile SqlDataReader nesnesi kullanacağım. Daha sonra SqlDataReader ve SqlConnection nesnelerim close edilecek.

default.aspx.cs dosyası :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        //Bağlantımı oluşturuyorum
        SqlConnection conn = new SqlConnection("Server=.;Database=northwnd;Integrated Security = True");
        //Komutumu yazıyorum.
        SqlCommand comm = new SqlCommand("SELECT EmployeeID,FirstName,LastName FROM Employees",conn);
        //Bağlantımı açıyorum.
        conn.Open();
        //SqlDataReader nesnem..
        SqlDataReader dr = comm.ExecuteReader();
        //Burası bir sonraki makalede..
        //sqlDataReader ve SqlConnection kapatılıyor.
        dr.Close();
        conn.Close();
    }
}

Şimdilik ne yaptık anlatayım. Veritabanıma bağlanabilmem için SqlConnection sınıfımdan conn adında bir instance alıyorum. Sorgumu çalıştırmak içinde SqlCommand sınıfından comm adında bir instance alıyorum ve veritabanı komutlarımı yazıyorum. Bir liste geri döneceği için SqlDataReader nesnesi oluşturuyor ve ExecuteReader ile okuyorum. Burada daha sonra bir takım işlemler yapacağım ama bu makalenin ilerisinde bir konu olduğu için şimdilik sıralamayı bilelim.

Daha sonra SqlDataReader ve SqlConnection nesnelerimi kapatmam gerekiyor. Bu nesneler çok önemli nesneler ve bunları mutlaka kapatmam gerekiyor. Aksi takdirde veritabanımda gereksiz bir yavaşlama, sistem sorunları oluşacaktır. Yüzlerce, binlerce kişi benim veritabanıma bağlanmaya çalıştığında bir çok sorun meydana gelecektir. Mümkün olduğunca database bağlantısı minimum seviyede açık tutulmalıdır.

Bu üstteki kod dediğim gibi şu anda çalışmaz, çünkü eksikler var, bunlarda sonraki yazılar ile tamamlanacak.. Şimdilik dediğim gibi mantıksal sıralamayı kavrayalım yeter..

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir