Coder

25 Haziran 2011

Benzersiz veri kayıt eden masaüstü uygulaması

Stok takip, telefon defteri, ürün deposu gibi benzersiz veri kayıt eden masaüstü uygulaması geliştirelim. Günlük iş hayatında veya projelerimizde bol bol kullandığımız ürün depo kayıt işlemi yapan mini C# ile Mssql tabanlı uygulama yapalım.

İlk olarak ürün adı, miktarı ve fiyat bilgilerini tutan, form yardımı ile yeni ürün ekleyen basit sade görünüşlü resimdeki gibi ürün form ekranı oluşturalım. Bunun için 3 adet textbox, kararınca label, 1 adet buton ve listedeki ürünleri gösterebilmek için 1 adet listview.

Listview kontrolü için yapılması gerekenler; üzerine tıklayınca çıkan ok kısmından View kısmını Details olarak ayarlayın. Edit Columns…‘a tıklayarak 4 tane kolon oluşturun. Properties alanından tüm satırı seçmeye yarayan FullRowSelect özelliğini ve satır-surun çizgilerin gösterilmesi için GridLines özelliğini True yapın, böylece listview kontrolü göze gelir hale gelecek.

Bu program ile ürün adı, miktarı, fiyatı eklenir, ürün listede yani veritabanın da mevcut değilse yeni ürün olarak eklenir. Fakat ürünümüz daha önceden veritabanımıza eklenmiş ise miktarı ve fiyatı arttırılır. Formumuzu oluşturduktan sonra MsSql üzerinden yeni veritabanı oluşturup(veritabanı ismi: coder) ürünler tablosu içerisine UrunId (int, ve Primary Key olarak ayarlanacak), Urunadi (nvarchar50), Miktar (int), Fiyat (Money) olarak girip urunler isminde tabloyu kayıt edin. Bunları yapmak zor geliyorsa alttaki kodları yeni sorgu sayfası açıp(New Query) alttaki kodları çalıştırdığınızda istenilen veritabanı tablo bilgileri ile oluşacaktır.
[cc lang="sql"]Create Database [coder]
GO
/****** Object: Table [dbo].[urunler] Script Date: 06/25/2011 01:14:37 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[urunler](
[UrunId] [int] IDENTITY(1,1) NOT NULL,
[UrunAdi] [nvarchar](50) NOT NULL,
[Miktar] [int] NOT NULL,
[Fiyat] [money] NOT NULL,
CONSTRAINT [PK_urunler] PRIMARY KEY CLUSTERED
(
[UrunId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO[/cc]

Veritabanımızı ve formumuzu oluşturduktan sonra benzersiz ürün kayıt eden Stored Procedure‘ü yazabiliriz. Saklı yordamımız şöyle;
[cc lang="sql"]Create proc sp_urunkayit (@urunadi nvarchar(50), @miktar int, @fiyat money)
as
begin
if exists (select UrunAdi from urunler where UrunAdi=@urunadi)
begin
Update urunler set Miktar+=@miktar, Fiyat+=@fiyat where UrunAdi=@urunadi
end
else
begin
insert into urunler (UrunAdi,Miktar,Fiyat) values (@urunadi,@miktar,@fiyat)
end
end [/cc]

Burada yapılan olay; ürün kaydı girildiği zaman eğer veritabanımızda ürün varsa mevcut ürünün üzerine miktarı ve fiyatı ekle yani update ile güncelleştirme yapıldı. Eğer ürün daha önce eklenmemiş ise insert into deyimi ile tabloya yeni ürün eklendi. Bunu telefon rehberi programında da yapılabiliriz, şöyleki ; eğer aynı telefon numarası eklenirse ekleme yapılmasın kullanıcıya bu numaradan olduğunu veya aynı isim soyisim de kayıt olduğunu vurgulata biliriz.

Sql kısımı bu kadardı, gelelim tasarımını hazırladığımız forma işlevsellik kazandırmaya.
[cc lang="c#"]SqlConnection sql = new SqlConnection(“server=.; database=coder; trusted_connection=true;”); //bağlantıyı global tanıladık
private void btnekle_Click(object sender, EventArgs e)
{
SqlCommand cmd = new SqlCommand();
cmd.Connection = sql;

cmd.CommandText = “sp_urunkayit”; // Oluşturduğumuz procedure ü burada çağırıyoruz.
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue(“@urunadi”, txturunadi.Text); // “” arasına yazan değişkenleri procedure ü oluştururken yazmıştık. Buradaki olay bu değişken üzerinden parametre taşımak

cmd.Parameters.AddWithValue(“@miktar”, txtmiktari.Text);
SqlParameter prm = new SqlParameter(“@fiyat”, SqlDbType.Money); // money tipinde olduğu için fiyat kısmını bu şekilde yapıyoruz
prm.Value = txtfiyati.Text;
cmd.Parameters.Add(prm);

sql.Open();
int etkilenen = cmd.ExecuteNonQuery();
sql.Close();

if (etkilenen > 0)
{
MessageBox.Show(“Kayıt girildi”);
listviewdoldur();

}
else
{
MessageBox.Show(“Ürün Eklenmedi!!!”);

}
}

private void Form1_Load(object sender, EventArgs e)
{

listviewdoldur(); //form açılır açılmaz listviewi dolduryoruz
}

private void listviewdoldur()
{
listView1.Items.Clear(); //listview metod içeriği
SqlCommand cmd = new SqlCommand(“select UrunID, UrunAdi, Miktar, Fiyat FROM urunler”, sql); //tabloyu ve gerekli kolonları çaığırıyoruz
sql.Open();
SqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
ListViewItem li = new ListViewItem(); // listview içini dolduruyoruz
li.Text = rdr[0].ToString();
li.SubItems.Add(rdr[1].ToString());
li.SubItems.Add(rdr[2].ToString());
li.SubItems.Add(rdr[3].ToString());
listView1.Items.Add(li);
}
sql.Close();
}[/cc]

Gereken açıklamalar kod içinde mevcut. Burada yaptıklarım; ilk önce global olarak bağlantıyı tanımladım. Ardından listview kontrolünü veritabanından gelecek bilgiler doğrultusunda doldurdum. Bunu metod olarak form_load kısmına ekledim. Böylece sayfa açılır açılmaz veri tabanındaki ürünler listesi karışımıza çıkacak. Ardından ekle butonu sayesinde oluşturduğumuz procedure e textbox lardan girilen parametreleri ADO.Net nimetlerinden faydalanarak gönderdik. Burada dikkat edilmesi gereken procedure deki parametre değişkenlerini doğru ve tipine göre yazmak. Ve bundan sonra yapmanız gereken f5 tuşuna basıp pazardan aldığınız taze domatesi, biberi vs buzdolabına koymadan önce kayıtlarını girmek.

Burada yapılan olaylar biraz karışık gelebilir, tabi yeni başlayanlar için. Yapılanları kısa ve özet olarak geçersek; veritabanı ve tablomuzu oluşturup stored procedure ü oluşturduk. Bu procedure sayesinde daha basit ve daha hızlı şekilde ürün kaydını gerçekleştirdik. Ardından bu kayıtları girebilmek ve önizleyebilmek için form ekranı oluşturduk, Ado.net ile sql bağlantımızı kurup mercimeği fırına gönderdik….

23 Haziran 2011

Ajax kontrolleri sorunsalları

Visual Studio ortamında da kullandığımız, geçmişte pek umursanmayan fakat yakın zamanlarda Google’ın arama çubuğunda ipucu uygulaması ile tekrar gündeme gelen ve ondan sonrada sık sık kullanılan Ajax teknolojisinin birkaç sorunsallarından bahsedeceğim.

Hikayeyi fazla uzatmadan herhangi bir Asp.net uygulamasında kullanacağımız meşhur hazır Ajax kontrollerinde bazen haftalarca süren sorunları ile baş başa kalan arkadaşlar için birkaç çözüm yolları. İlk olarak sorun adını belirtmek istersek; projeye eklediğimiz referans Ajax Toolkit Control .dll’nin çalışmaması.

Peki bu sonradan eklenilen Ajax kontrolleri neden çalışmaz?

  • .Net Framework 4 kütüphaneniz hasarlı olabilir. Microsoft .NET Framework 4 bağlantısına tıklayıp ilgili kütüphanenizi onarın.
  • Visual Studio’nun güncellemeleri varsa yapın, Service Pack yüklemediyseniz yükleyin.(Microsoft Visual Studio 2010 Service Pack 1)
  • Bu adımları sırasıyla veya hiç yapmayabilirsiniz belki sorun yoktur fakat soruna karşı bakış açınızı değiştirip uygulamanızı hangi kütüphane üzerinde yazdığınıza dikkat ederek Ajax Control Toolkit‘leri o Framework e göre ekleyin. Mesela Framework 3.5 ile yazıyorsanız uygulamanızı eklemeye çalıştığınız Ajax .Net4 kontrolleri haliyle çalışmayacaktır. Çalışmadığı zaman hem Debug da sorun verir hemde Toolbox kısmında kontroller soluk olarak gözükür(sürükle bırak yapamazsınız).

Sorunlar bu kadar bitmediğini biliyorum, fakat başıma gelen olayı nasıl çözdüğümü burada anlatmak istedim. Hikaye kısmı biraz uzun olabilir, bu stresli anınızda biraz gevşetmek için uzun uzaya anlatmak istedim…

Powered by WordPress