Otomatik hesaplama yapan ya da sütunlar arasında aritmetik işlemler gerektiren bir uygulama üzerinde çalışıyorsanız bir SQL sorgusundan dönen değeri sayısal olarak ifade etmeniz gerekecektir.
Örnek olarak fiyatı belli olan bir ürünün alış miktarı kullanıcıdan alınsın, her ikisi de tablolarda sütun olarak yer alan alış miktarı ve fiyatı bilgisinin çarpımını elde etmek için ExecuteScalar() metotuna başvurmalıyız. Hatta kullanıcı üründen ne kadar aldığını textBox1’e girdiği anda toplam tutarı textBox2’ye yazdıralım.
private void textBox1_TextChanged(object sender, EventArgs e) { SqlConnection baglanti = new SqlConnection("server=.;database=StokTakip;Integrated Security=True"); baglanti.Open(); SqlCommand cmd = new SqlCommand("select Fiyati from Urunler where UrunAdi = '" + textBox3.Text + "'",baglanti); int fiyat = Convert.ToInt32(cmd.ExecuteScalar()); int tutar = fiyat * Convert.ToInt32(textBox1.Text); try { textBox2.Text = tutar.ToString(); } catch { MessageBox.Show("Lutfen sayi giriniz."); } finally { textBox1.text = ""; } baglanti.Close(); }
Kodu kısaca açıklarsak; textBox3 ile aldığımız ürün adının fiyatını getirdik. Kullanıcının textBox2 ile girdiği alış miktarı ile çarpmadan önce fiyatın integer değer çevrilmesi gerekiyor. Bu durumun çözümünde ExecuteScalar() metotu oldukça yararlı.
ExecuteScalar() metotu, veritabanından toplam gibi tek bir değeri döndürmeyi sağlayan hızlı bir araçtır. Döndürdüğü değer, Resultset’in ilk elemanınıdır ve bu elemanın hangi tipte olduğu ilk etapta bilinemeyeceği için nesne(object) olarak kabul edilir. Eğer doğrudan int, string gibi farklı bir türe atamak isterseniz ‘Cannot implicitly convert type ‘object’ to ‘int’. An explicit conversion exists (are you missing a cast?)’ hatası alırsınız. Bu yüzden gerekli çevirme işlemlerini yapmak gerekir.