Coder

31 Ağustos 2012

Asp.net toplam ve online ziyaretçi sayısı göster

Asp.net sitemizde toplam ziyaretçi sayısı ve anlık online ziyaretçi sayısını Session yardımı ile sitemizde gösterebiliriz. Server tarafında çalışan web.config dosyasına benzer Global.asax özel dosya ile kolaylıkla toplam ve online ziyaretçi sayısını kullanıcıya gösterebiliriz.

Bu mini Asp.net ziyaretçi sayacını yapabilmek için, sayıyı gösterecekherhangi .aspx dosyası ve Global Application Class(Global.asax) dosyalarını projemize ekleyerek başlayabiliriz.

Eklediğimiz Global.asax dosyasını açarak ilk sıradaki Application_Start metoduna

[cc lang="c#"]
protected void Application_Start(object sender, EventArgs e)
{
Application.Add(“toplamziyaretci”, 0);
Application["onlineziyaretci"] = 0;
}
[/cc]

Kullanıcı siteye ziyaret ettiğinde yani session açtığında yapılacak olan işlemler. Toplam ziyaretci ve online ziyaretçi sayısını 1 arttırıyoruz.

[cc lang="c#"]
protected void Session_Start(object sender, EventArgs e)
{
Application["toplamziyaretci"] = ((int)Application["toplamziyaretci"]) + 1;
Application["onlineziyaretci"] = ((int)Application["onlineziyaretci"]) + 1;
}
[/cc]

Session_End metodunda ise gelen ziyaretçi siteden çıktığında online ziyaretçi saysını 1 azaltmak için yazıyoruz.

[cc lang="c#"]
protected void Session_End(object sender, EventArgs e)
{
Application["onlineziyaretci"] = ((int)Application["onlineziyaretci"]) – 1;
}
[/cc]

Ziyaretçiye gösterebilmek için herhangi bir sayfanın Page_Load kısmına aşağıdaki gibi yazıyoruz.

[cc lang="c#"]

protected void Page_Load(object sender, EventArgs e)
{
Response.Write(“Toplam ziyaretci sayısı : ” + Application["toplamziyaretci"]);
Response.Write(”
“);
Response.Write(“
Online ziyaretci sayısı : ” + Application["onlineziyaretci"]);
}

[/cc]

Global.asax özel dosyası ile Asp.net sayacımı oluştu.

13 Ağustos 2012

Linq ile veritabanından listview e veri çekme

Linq to Sql ile veritabanımızdaki tabloyu sorgulayarak windows form mumuzdaki listview kontrolüne nasıl veri çekip göstereceğimizi bu örnek ile öğrenelim.

Öncelikle Linq to Sql den birz bahsedecek olursak; bu teknoloji, ORM aracını kullanarak bağlanılan veritabanındaki tabloları sınıf, kolonları da özellik(property) olacak şekilde üretir. Bu sayede oluşturulan sınıf içinde sql join işlemi yapmadan nesnelerle ilişkilendirme yaparak özelliklerine yani kolonlarına erişile bilmekte. Bunu söylemeden geçmek istemiyorum, nesneler hakkında temel bilgisi olmayan arkadaşlar linq e başlamadan önce nesneler(OOP) konusunda biraz bilgi sahibi bir kaç örnek yapmış olmaları gerekir.

Bu örneğimizde linq’e yeni başlayanların kafası karışmaması için basit bir okuma işlemi yaptık. Daha önce örneklerim de de kullandığım coder isimli veritabanımı(“tblkisi” tablo adında id, adi, soyadi olarak 3 kolondan oluşmakta) projemize tanıtmak için Solution Explorer penceresinden projemize sağ tıklayıp Add New Item deyip LINQ to SQL Classes .dbml dosyasını ekliyoruz. Burada dosya ismini dcoder ismi ile ekledim. Veritabanına yapılan bağlantı dosyasının adı(dcoderDataContext) ile işlemlerimize devam edeceğimiz için burası önemli. Kodlara bakarak neden isim verdiğimi öğrenebilirsiniz.

Soldaki server explorer yardımı ile veritabanımıza bağlantıyı gerçekleştiriyoruz. Ardından resimdeki gibi kullanacağımız tabloyu ortaya sürüklüyoruz. Kayıt edip form ekranımıza geçiyoruz.

Bundan sonra yapılacak iş form arayüzüne bir buton ve listview atıp butona clik olayına alttaki kodları yazmak;

[cc lang="c#"]
private void button1_Click(object sender, EventArgs e)
{
dcoderDataContext ctx = new dcoderDataContext();

var x = from kisiler in ctx.tblkisis where kisiler.id < 10 select kisiler;

foreach (tblkisi k in x)
{
ListViewItem li = new ListViewItem();
li.Text = k.id.ToString();
li.SubItems.Add(k.adi.ToString());
li.SubItems.Add(k.soyadi.ToString());
listView1.Items.Add(li);
}
}
[/cc]

[stextbox id="info"]

Projemize eklediğimiz LINQ to SQL Classes dosyayı sizde dcoder olarak kayıt ettiyseniz kod kısmında Visual Studio intellisense hatırlatma özelliğinden otomatik dcoderDataContext isminde gelecektir. var x değişkenine, linq ile yaptığımız sorgu sonucunu(sorgumuz id’si 10 dan küçük olan kayıtları getirmek) atadık. Bu kayıtları göstermek için foreach ile döngüye girdik buradaki değerleri listview de gösterdik. [/stextbox]

Görüldüğü gibi 2 satır kod ile kolayca veriyi ekrana yansıttık. Bu sonucu Ado.net ile yapılan örnekle de alabilirsiniz. Fakat aradaki kod kolaylığı dişe değecek kadar büyük. Sql connection listview örneği bağlantısına tıklayarak Ado.net ile yapılmış haliyle karşılaştırabilirsiniz.

Listview tüm verileri database kayıt etme

Textbox dan veya başka bir yerden Listview’e girilen değerleri database imize kayıt etmek isteyebiliriz. Şöyle kısa bir senaryo ile anlatalım; kafe adisyon programında, garson masa müşteriden sipariş edilen ürünleri listview de saklayıp müşteri hesabını ödeyeceği zaman satılan ürünlerin adını ve fiyatını hesap kesiminde database’e kayıt ettirebilir. Buna benzer senaryoda kullanma babında bu uygulamayı paylaşmak istedim.

Örnek için resimdeki gibi bir arayüz formu hazırlayabilirsiniz. Buradaki amaç ilk önce textbox lardan girilen değerleri listview e kayıt etmek ardından listviewdeki tüm verileri tek hamle ile database e göndermek.

Burada coder isimli bir veritabanı bir tablo, içerinde id, adi ve soyadi kolonu bulunmakta. İlk önce textbox dan listview’e veri kayıt edelim.

[cc lang="c#"]
private void button1_Click(object sender, EventArgs e)
{
ListViewItem lv = new ListViewItem();
lv.Text = textBox1.Text;
lv.SubItems.Add(textBox2.Text);
listView1.Items.Add(lv);

}
[/cc]

[stextbox id="info"]Listview sınıfı nesneyi tanımladık fieldlarını doldurduk. Ardından listView1.Items.Add(lv) nesnedeki değeri listview e gönderdik. [/stextbox]

Resimdeki listview altında dbkayıt butonu ise listviewdeki değerleri tek seferde database e kayıt etmemizi sağlamakta. Buton clik ile kodlarına dalacak olursak;

[cc lang="c#"]
private void button2_Click(object sender, EventArgs e)
{

int etkilenen = 0;

for (int i = 0; i < listView1.Items.Count; i++ ) { try { SqlConnection sql = new SqlConnection("server=.; database=coder; trusted_connection=true;"); SqlCommand cmd = new SqlCommand(); cmd.Connection = sql; string adi = listView1.Items[i].SubItems[0].Text; string soyadi = listView1.Items[i].SubItems[1].Text; cmd.CommandType = System.Data.CommandType.Text; cmd.CommandText = "insert into tblkisi (adi,soyadi) values (@adi, @soyadi)"; cmd.Parameters.AddWithValue("@adi", adi); cmd.Parameters.AddWithValue("@soyadi", soyadi); sql.Open(); cmd.ExecuteNonQuery(); sql.Close(); } catch (Exception) { MessageBox.Show("Kayıt edilmedi"); } } if (etkilenen != 0) // Açıklama 11 : { MessageBox.Show("Kayıt edilmedi !!!"); } else { MessageBox.Show("Kayıt edildi..."); } } [/cc] For döngüsü ile listview eklenmiş satır sayısı kadar döngü kurduk. Döngünün içinde değerleri okuması için listView1.Items[i] kaçıncı satırda ise o satırdaki veriyi stirng değişkenlerine atadık. Programın kopma noktası da burası oluyor zaten. Geriye kalan kısım Ado.net den başkası değil…

Programda bazı şeyler eksik biliyorum ama hatasız çalışmakta. Burada aktarmak istediğim bilgi listview içinde for ile dönmeden başka bir şey değil…

10 Ağustos 2012

C# Ado.net veri kayıt etme

İstek üzerine C# ile geliştirilen windows form uygulamasında ADO.net kullanarak basit mssql deki veri tabanına kayıt ekleme programı. ADO.net ile yeni tanışan arkadaşlara hitaben bu uygulamamızda iki adet textbox, bir adet buton, kişi listesini tutacak database ve içerisin de bir adet tablo(id, adi, soyadi kolonlarına sahip) araçları edindikten sonra işlemlere başlayabiliriz.

[cc lang="c#"]
private void button1_Click(object sender, EventArgs e)
{
string adi = textBox1.Text; //Açıklama 1 :
string soyadi = textBox2.Text;

SqlConnection sql = new SqlConnection(“server=.; database=coder; trusted_connection=true;”); // Açıklama 2 :

SqlCommand cmd = new SqlCommand(); // Açıklama 3:
cmd.Connection = sql; // Açıklama 4 :
cmd.CommandType = System.Data.CommandType.Text; // Açıklama 5 :
cmd.CommandText = “insert into tblkisi (adi,soyadi) values (@adi, @soyadi)”; // Açıklama 6 :
cmd.Parameters.AddWithValue(“@adi”, adi); // Açıklama 7 :
cmd.Parameters.AddWithValue(“@soyadi”, soyadi);

sql.Open(); // Açıklama 8 :

int etkilenen = cmd.ExecuteNonQuery(); // Açıklama 9 :

sql.Close(); // Açıklama 10 :

if (etkilenen > 0) // Açıklama 11 :
{
MessageBox.Show(“Kayıt edildi…”);
}
else
{
MessageBox.Show(“Kayıt edilmedi !!!”);
}

}
[/cc]

Kodların genel açıklaması kod üzerinden numaralarla alttaki açıklamalardan faydalanabilirsiniz.

[stextbox id="info"]

  1. Textboxlardaki değerleri belirlediğimiz string tipdeki değişkenlere atıyoruz.
  2. Veritabanı ile bağlatıyı kurmak için SqlConnection(using System.Data.SqlClient; isim alanını eklemeniz gerekir !) nesnesini tanımlayıp sql değişkenine atıyoruz.
  3. Sql komutları taşımasını sağlayan sınıfın nesnesini tanımlıyoruz. Sql komutları yazabilmek için.
  4. Hangi bağlantı üzerinden yapılacağını buradan aktarıyoruz.
  5. Kendi sql sorgumuzu yazacağımız için text tanımladık. Stored Procedure için farklı tanımlamamız gerekir. SP ile ilgili örnekler blogumda mevcut…
  6. Coder isimli veritabanımıza yeni kayıt eklemek için @ işareti ile @adi, @soyadi isiminde değişken tanımlıyoruz.
  7. Parameters.AddWithValue ile parametreleri ilk başta oluşturuduğunuz, yani kullanıcıdan aldığınız değerleri değişkenlere atamakta.
  8. Bağlantıyı açıyoruz, kapatmayı unutmamak gerekir.
  9. Sorguyu çalıştırmak için genellikle veritabanına değer gönderirken, select yapmayacaksak, db den veri gelmesini istemiyorsak insert, update ve delete işlemleri için kullanılır.
  10. Bağlantıyı kapatıyoruz.
  11. Etkilene data 0 dan büyük ise işlem gerçekleşmiş kabul edip kullanıcıya iletiyoruz.

[/stextbox]

07 Ağustos 2012

C# da TC kimlik no algoritma ile doğrulama

Başlığı daha sade anlaşılır tutmak isterdim ama saat gecenin 02:36′sı kusura bakmayın. Hikaye blogu değil burası dediğinizi, daha şimdiden sinirlendiğinizi hissedebiliyorum. Küçük büyük bir çok projede TC kimlik numarsı doğrulama gibi sıkıntımız olmuştur. Bilindiği gibi TC kimlik numarası rastgele sayılardan oluşmaz, belirli algoritma sonucunda oluşmuştur. Bunun hakkında fazla konuşmadan isteyenler için burada ki adreste algoritma hakkında detaylı bilgiye ulaşabilir.

Algoritmalardan hariç webservis ile de internet üzerinden TC kimlik no doğrulanmakta. (Webservisi kullanmak için bu “https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx” adresi kullanabilirsiniz) Ama biz webservis fazla kurcalamadan internetsiz organik yöntemler ile hızlı bir şekilde doğrulamayı planlıyoruz.

C# ile basit form üzerinde textbox, label, buton kullanarak anlama babında yaptığımız uygulama ile yazımıza devam edelim. TC kimlik numaramızın ilk 10 rakamın toplamının birler basamağı, 11. rakamı vermekte. Bu şekilde TC kimli no kontrolü yapılabilmekte. Bu algoritma ile yola çıkarak programımızı geliştirdik. Form için gerekli elemanları ekledikten sonra kod kısmına geçerek daha iyi anlayabiliriz.

[cc lang="c#"]
private void button1_Click(object sender, EventArgs e)
{

if (11 != textBox1.Text.Length) // Girilen sayı 11 haneli olmak zorunda
{
label1.Text = “Eksik veya fazla sayı girildi”;
}

else
{
int toplam = 0; // 1. Açıklama

for (int i = 0; i < textBox1.Text.Length - 1; i++) // 2. Açıklama { toplam += Convert.ToInt32(textBox1.Text[i].ToString()); // 3. Açıklama } if (toplam.ToString()[1] == textBox1.Text[10]) // 4. Açıklama { label1.Text = "Tc kimlik Numarası Doğru"; // 5. Açıklama } else { label1.Text = "Tc kimlik Numarası Yanlış"; } } } [/cc] Buton click olayı ile başlayan programımızın açıklamasını kodların yorum kısmından alttaki açıklamalarla öğrenebilirsiniz;

  1. Uygulamanın kopma noktası bu değişken. 0 değeri vererek tanımlıyoruz. Bu şekilde yapılmasını amacı değişkenin for blogu içinde kullanıması için.
  2. Girilen Tc kimlik numarasının ilk 10 rakamını almak için length dan 1 eksiğini döndürdük
  3. Girilen sayıları soldan sağa doğru tek tek topladık, sonucu toplam değişkeninde biriktirdik.
  4. Burada toplam sayının birler basamağını almak için 1 yazdık 0 ile onlar basamağındaki sayıyı alırdık. Alınan sayı ile girilen tc kimlik numarasının 10. indeksi yani (0 dan başladığını hatırlayalım) 11. sayı ile karşılaştırdık.
  5. Eşit ise TC kimlik numarası doğru…

Powered by WordPress