C# ile Windows Formununa Login Girişi!

Yaptığımız uygulamaların çalışması için önceden bir ‘Kullanıcı Adı’ ve ‘Şifre’ sorarak çalışmasını isteyebiliriz. Bunun için bir çok algoritma geliştirilebilir. Bu makalede benim izleyeceğim yol, ‘Kullanıcı Adı’ ve ‘Şifre’ bilgilerini bir veritabanında tutmak olacak, hatta kullanıcının ‘Yetki’lerini de veritabanında tutarak uygulamamızda kullanıcıya özel yetkiler verebiliriz. Aşağıdaki resimde kullanıcı ve yetki bilgilerinin veritabanı tasarımı SQL Server 2005’de yapılmış olarak gösterilmektedir.

Tasarımı incelersek; ‘Yetki’ tablosu bizim uygulamamıza özel yetkileri içeriyor. Mesela bir ürün takip otomasyon’u yapıyorsak, ‘Stok Gir’, ‘Stok Çık’ bunlar yetki olabilir ve depo bölümünü ilgilendiren yetkilerdir, aynı şekilde ‘Cihaz Üretime Hazırla’ gibi bir yetki’de üretim bölümünü ilgilendiren bir yetkidir. Uygulamamızda birde ‘Admin’ yetkisi olur bu yetki de yeni kullanıcı ekleyebilir, yetkileri değiştirebilir. Bunu yapması için de Yetkilerin adlarını da tutmamız Admin için daha anlaşılır yapar. ‘Kullanicilar’ tablosuda ‘KullaniciNo’, ‘KullaniciSifre’ ve ‘KullaniciAdi’ tutar bu tablo da ‘Kullanıcı Adı’ ve ‘Şifre’ bilgileri tutulur. ‘Kullanıcı No’ tek bir ‘Kullanıcı Adı’ ve ‘Şifre’ olacağı için primary key olarak tanımlanmışdır. Son olarak ‘Izin’ tablosu da ‘Kullanıcı No’, ‘Yetki No’ ve ‘ErisebilirMi’ sütunlarından oluşuyor. Bu tabloyu incelersek, Kullanıcı No’yu primary key yapamayız çünkü bir kullanıcının birden fazla yetki’si olabilir, yetki’yide primary key yapamayız çünkü bir yetki birden fazla kullanıcı için kullanılabilir, ‘ErisebilirMi’ sütunuda zaten primary key olması söz konusu değil, bu tablo KullanıcıNo ve Yetki tablosunun birbirine bağlayan bir tablodur. Veritabanı kısmı tasarımımız bittikden sonra şimdi uygulamamızı tasarlayalım.

‘Kullanıcı Adı’ ve ‘Şifre’ soran basit bir form tasarımı hazırladık. Tüm menüler deaktif, kullanıcı şifre girmeye başladığı zaman ‘Tamam’ butonuda aktif olacak şekilde hazırladık. Şimdi veritabanına birkaç kullanıcı, yetki ve izin ekleyelim.

Yukarıda bazı yetki’ler, kullanıcılar ve izin’ler belirledik, kullanıcıya göre yetki verdik. Şimdi farklı kullanıcılarla giriş yapalım ve bakalım uygulamamızda doğru yerler aktif oluyor mu. Murat kullanıcısının sadece ‘Stok Gir’ ve ‘Stok Çık’ yetkisi verdik, Burak kullanıcısına bu yetkileri vermedik, sadece ‘Admin’ ve ‘Ürün Hazırlama’ yetkisi verdik.

Formumuzdan ‘Murat Özkan’ kullanıcı adı ile giriş yapıldığında;

‘Burak Özkan’ kullanıcı adı ile giriş yaptığında;

Farklı kullanıcı girişlerinde farklı yerler aktif oldu, peki bunu nasıl yaptık? İşin kod kısmını biraz inceleyelim. Önce ‘Tamam’ butonunun ‘Click’ eventinde olanları yazalım;

private void button1_Click(object sender, EventArgs e)
{
   if (kullaniciAdi_tb.Text == "")
   {
      MessageBox.Show("Lütfen Kullanıcı Seçiniz.", "Otomasyon", MessageBoxButtons.OK, MessageBoxIcon.Error);
      return;
   } 

   SqlConnection cnn = new SqlConnection();
   cnn.ConnectionString = Properties.Settings.Default.ConnectionString;
   cnn.Open();
   DataSet ds = new DataSet();
   SqlDataAdapter sda = new SqlDataAdapter("select * from Kullanicilar where KullaniciAdi = '" + kullaniciAdi_tb.Text + "'", cnn);
   sda.Fill(ds); 

   if (ds.Tables.Count == 0)
   {
      MessageBox.Show("Geçersiz Kullanıcı.", "Otomasyon", MessageBoxButtons.OK, MessageBoxIcon.Error);
      return;
   }

   KullaniciAdi = ds.Tables[0].Rows[0][2].ToString();
   KullaniciNo = (int)ds.Tables[0].Rows[0][0];
   string sifre = ds.Tables[0].Rows[0][1].ToString();
   KullaniciSifre = sifre;

   if (sifre == sifre_tb.Text)
   {
      MessageBox.Show("Hoşgeldiniz ", "Otomasyon", MessageBoxButtons.OK, MessageBoxIcon.Information);
   }
   else
   {
      MessageBox.Show("Geçersiz Şifre", "Otomasyon", MessageBoxButtons.OK, MessageBoxIcon.Error);
      return;
   }

   if (YetkileriniYukle() != true) { return; }

   stokCik_tsmi.Enabled = YetkiDizisi[3];
   stokGir_tsmi.Enabled = YetkiDizisi[2];
   urunHazirla_tsmi.Enabled = YetkiDizisi[5];
   yetkilendirmeAyarlari_tsmi.Enabled = YetkiDizisi[0];
   kullaniciEkle_tsmi.Enabled = YetkiDizisi[0];

   menuStrip1.Enabled = true;
}

Kod’u incelediğimizde veritabanı’nın ‘Kullanıcı’ tablosundan ‘Kullanıcı Adı’na göre şifresini alıyoruz ve girilen şifreyle karşılaştırıyoruz. Eğer şifre doğruysa yetkilerini yüklüyoruz aksi durumda hata verip hiçbir menüyü aktif etmeden fonksiyonu bitiriyoruz. Şimdi ‘YetkileriniYukle()’ fonksiyonunu inceleyelim;

private bool YetkileriniYukle()
{
   SqlConnection cnn = new SqlConnection();
   cnn.ConnectionString = Properties.Settings.Default.ConnectionString; cnn.Open();

   DataSet ds = new DataSet();
   SqlDataAdapter sda = new SqlDataAdapter("select YetkiNo, ErisebilirMi from Izin where KullaniciNo = '" + KullaniciNo + "'", cnn);
   sda.Fill(ds);

   if ((ds.Tables.Count == 0))
   {
      MessageBox.Show("Yetkiler Yüklenemiyor.", "Otomasyon", MessageBoxButtons.OK, MessageBoxIcon.Error);
      return false;
   }

   for (int i = 0; i < ds.Tables[0].Rows.Count; ++i)
   {
      int yetkiIndis = (int)ds.Tables[0].Rows[i][0];
      YetkiDizisi[yetkiIndis] = (bool)ds.Tables[0].Rows[i][1];
   }
   return true;
}

Bu fonksiyonda da KullaniciNo’ya göre Izin tablosundan yetkileri aldık, bir tane global YetkiDizi’miz var, veritabanından verdiğimiz yetkilere göre YetkiDizi’si dolduruluyor, yetkiIndis’de sıralı olmayacağı için Izın tablosundanki YetkiNo’ya göre dolduruluyor böylece programda ki indis’le veritabanında ki YetkiNo aynı olmuş oluyor. Son olarakda kullanıcı ekleme, silme, şifre değiştirme ve kullanıcının yetkilerini belirleme kısmını yapalım;

Yukarıdaki şekilde form’larımızı tasarladık, bu işlemleri yapmak için ‘Stored Procedure’ kullanacağız. Ilk olarak Kullanıcı Sil formunu inceleyelim;

Form’un Load kısmı ve button1_Click event’i şöyle;

private void KullaniciSil_Load(object sender, EventArgs e)
{
   SqlConnection cnn = new SqlConnection();
   cnn.ConnectionString = Properties.Settings.Default.ConnectionString;cnn.Open();

   DataSet ds = new DataSet();SqlDataAdapter sda = new SqlDataAdapter("select * from Kullanicilar", cnn);
   sda.Fill(ds);

   if (ds.Tables.Count == 0)
   {
      MessageBox.Show("Kullanıcılar Yüklenemiyor.", "Otomasyon", MessageBoxButtons.OK, MessageBoxIcon.Error);
      return;
   }

   for (int i = 0; i < ds.Tables[0].Rows.Count; ++i)
   { listBox1.Items.Add(ds.Tables[0].Rows[i][2].ToString()); }
}

private void button1_Click(object sender, EventArgs e)
{
   if (MessageBox.Show("Kullanıcı Kaydı Silinme İşlemini Onaylıyormusunuz?", "Otomasyon", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) != DialogResult.Yes)
   {
      MessageBox.Show("Silme İşlemi İptal Edildi", "Otomasyon", MessageBoxButtons.OK, MessageBoxIcon.Information);
      return;
   }

   SqlConnection cnn = new SqlConnection();
   cnn.ConnectionString = Properties.Settings.Default.ConnectionString;cnn.Open();
   SqlCommand cmd = new SqlCommand();

   cmd.Connection = cnn;
   cmd.CommandText = "[up_KullaniciSil]";
   cmd.CommandType = CommandType.StoredProcedure;
   cmd.Parameters.AddWithValue("@KullaniciNo", listBox1.SelectedIndex + 1);
   try
   {
      cmd.ExecuteNonQuery();
   }
   catch (Exception ex)
   {
      MessageBox.Show(ex.Message);
      return;
   }
   MessageBox.Show("Kullanıcı Başarıyla Silindi", "Otomasyon", MessageBoxButtons.OK, MessageBoxIcon.Information);
   this.Close();
}

Form ilk açıldığında Kullanıcılar veritabanından yükleniyor, ‘Kullanıcı Sil’ butonunda SQL Serverda hazırladığımız ‘@KullanıcıNo’ parametresi alan stored procedure çağırıyoruz;

Stored Procedure;

SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER proc [dbo].[up_KullaniciSil]@KullaniciNo intasbeginbegin tran

begin try delete from Izin where KullaniciNo = @KullaniciNo end try begin catch rollback tran return end catch

begin try delete from Kullanicilar where KullaniciNo = @KullaniciNo end try begin catch rollback tran return end catch

commit tran end

Yetkilendirme ayarları formunu belirlediğimiz yetkilerin isimlerine sahip olan checkBox ekliyoruz. FormLoad kısmında yine kullanıcıları yüklüyoruz, seçilen kullanıcıların yetkileri seçilmiş oluyor. FormLoad ve ‘UYGULA’ butonun kod kısmı aşağıdaki gibi;

private static CheckBox[] cbDizi = new CheckBox[7];
public string KullaniciAdi;
public int KullaniciNo;
private DataSet dsKullanicilar;

private void YetkilendirmeAyarlari_Load(object sender, EventArgs e)
{
   cbDizi[0] = Yetki0;
   cbDizi[1] = Yetki1;
   cbDizi[2] = Yetki2;
   cbDizi[3] = Yetki3;
   cbDizi[4] = Yetki5;
   cbDizi[5] = Yetki6;
   cbDizi[6] = Yetki13;

   SqlConnection cnn = new SqlConnection();
   cnn.ConnectionString = Properties.Settings.Default.ConnectionString;
   cnn.Open();

   dsKullanicilar = new DataSet();
   SqlDataAdapter sda = new SqlDataAdapter("select * from Kullanicilar", cnn);
   sda.Fill(dsKullanicilar);

   if (dsKullanicilar.Tables.Count == 0)
   {
      MessageBox.Show("Kullanıcılar Yüklenemiyor.", "Otomasyon", MessageBoxButtons.OK, MessageBoxIcon.Error);
      return;
   } 

   for (int i = 0; i < dsKullanicilar.Tables[0].Rows.Count; ++i)
   { comboBox1.Items.Add(dsKullanicilar.Tables[0].Rows[i][2].ToString()); }
}

private void button1_Click(object sender, EventArgs e)
{
   if (MessageBox.Show("Yetkileri Değiştirmek İstediğinize Eminmisiniz?", "Otomasyon", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) != DialogResult.Yes)
   { return; }

   SqlConnection cnn = new SqlConnection();
   cnn.ConnectionString = Properties.Settings.Default.ConnectionString;
   cnn.Open();
   SqlCommand cmd = new SqlCommand();

   cmd.Connection = cnn;
   cmd.CommandText = "up_KullaniciYetkiDegistir";
   cmd.CommandType = CommandType.StoredProcedure;
   cmd.Parameters.AddWithValue("@KullaniciNo", KullaniciNo);
   cmd.Parameters.AddWithValue("@Yetki0",  Yetki0.Checked);
   cmd.Parameters.AddWithValue("@Yetki1",  Yetki1.Checked);
   cmd.Parameters.AddWithValue("@Yetki2",  Yetki2.Checked);
   cmd.Parameters.AddWithValue("@Yetki3",  Yetki3.Checked);
   cmd.Parameters.AddWithValue("@Yetki5",  Yetki5.Checked);
   cmd.Parameters.AddWithValue("@Yetki6",  Yetki6.Checked);
   cmd.Parameters.AddWithValue("@Yetki13", Yetki13.Checked);

   try
   {
      cmd.ExecuteNonQuery();
   }
   catch (Exception ex)
   {
      MessageBox.Show(ex.Message);
      return;
   }
   MessageBox.Show("Yetkiler Başarıyla Değiştirildi.", "Otomasyon", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
   SqlConnection cnn = new SqlConnection();
   cnn.ConnectionString = Properties.Settings.Default.ConnectionString;
   cnn.Open();

   for (int i = 0; i < dsKullanicilar.Tables[0].Rows.Count; ++i)
   {
      if ((string)dsKullanicilar.Tables[0].Rows[i][2] == comboBox1.Text)
      { KullaniciNo = (int)dsKullanicilar.Tables[0].Rows[i][0]; }
   }

   DataSet ds = new DataSet();
   SqlDataAdapter sda = new SqlDataAdapter("select YetkiNo, ErisebilirMi from Izin where KullaniciNo = '" + KullaniciNo + "'", cnn);
   sda.Fill(ds);

   if ((ds.Tables.Count == 0))
   {
      MessageBox.Show("Yetkiler Yüklenemiyor.", "Otomasyon", MessageBoxButtons.OK, MessageBoxIcon.Error);
      return;
   }

   for (int i = 0; i < ds.Tables[0].Rows.Count; ++i)
   {
      int yetkiIndis = (int)ds.Tables[0].Rows[i][0];
      cbDizi[yetkiIndis].Checked = (bool)ds.Tables[0].Rows[i][1];
   }
}

Her kullanıcı için cbDizi setleniyor. cbDizi, chechBox’lardan oluşan bir dizi ve veritabanımızdaki YetkiNo ile aynı indis’e sahip.

Stored Procedure;

SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER proc [dbo].[up_KullaniciYetkiDegistir]
@KullaniciNo int,
@Yetki0 int,
@Yetki1 int,
@Yetki2 int,
@Yetki3 int,
@Yetki4 int,
@Yetki5 int,
@Yetki6 int,

as begin 

update Izin set ErisebilirMi = @Yetki0 where KullaniciNo = @KullaniciNo and YetkiNo = 0
update Izin set ErisebilirMi = @Yetki1 where KullaniciNo = @KullaniciNo and YetkiNo = 1
update Izin set ErisebilirMi = @Yetki2 where KullaniciNo = @KullaniciNo and YetkiNo = 2
update Izin set ErisebilirMi = @Yetki3 where KullaniciNo = @KullaniciNo and YetkiNo = 3
update Izin set ErisebilirMi = @Yetki4 where KullaniciNo = @KullaniciNo and YetkiNo = 4
update Izin set ErisebilirMi = @Yetki5 where KullaniciNo = @KullaniciNo and YetkiNo = 5
update Izin set ErisebilirMi = @Yetki6 where KullaniciNo = @KullaniciNo and YetkiNo = 6 
end

Kullanıcı şifresini değiştirmek isteyebilir, bunun için ana form’dan giriş yaptıkdan sonra aşağıdaki işlemle kendi şifresini değiştirebilir. ‘DEĞİŞTİR’ butonuna basıldıkdan sonra yapılan işlemler aşağıdaki gibi;

private void button1_Click(object sender, EventArgs e)
{
   if ((eskiSifre_tb.Text == "") || (yeniSifre_tb.Text == ""))
   {
      MessageBox.Show("Lütfen Eski ve Yeni Şifrenizi Giriniz", "Otomasyon", MessageBoxButtons.OK, MessageBoxIcon.Error);
      return;
   }

   if (eskiSifre_tb.Text != KullaniciSifre)
   {
      MessageBox.Show("Eski Şifrenizi Lütfen Doğru Giriniz", "Otomasyon", MessageBoxButtons.OK, MessageBoxIcon.Error);
      return;
   }

   if (MessageBox.Show("Şifre Değişikliğini Onaylıyormusunuz?", "Otomasyon", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) != DialogResult.Yes)
   { return; }

   SqlConnection cnn = new SqlConnection();
   cnn.ConnectionString = Properties.Settings.Default.ConnectionString;
   cnn.Open();
   SqlCommand cmd = new SqlCommand();

   cmd.Connection = cnn;
   cmd.CommandText = "up_KullaniciSifreDegistir";
   cmd.CommandType = CommandType.StoredProcedure;
   cmd.Parameters.AddWithValue("@KullaniciAdi", KullaniciAdi);
   cmd.Parameters.AddWithValue("@KullaniciSifre", yeniSifre_tb.Text); 

   try
   {
      cmd.ExecuteNonQuery();
   }
   catch (Exception ex)
   { MessageBox.Show(ex.Message); return; }

   MessageBox.Show("Şifre Başarıyla Değiştirildi", "Otomasyon", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

Burada eski şifreyi nasıl karşılaştırdığımızı sorabilirsiniz, bu form’da bir tane string türünden public ‘KullaniciAdi’ ve ‘KullaniciSifre’ tanımlıyoruz. Bu form’u ilk ana form’da çağırdığımız için kullanıcının adını ve şifresini zaten biliyoruz.

Stored Procedure;

SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO

ALTER proc [dbo].[up_KullaniciSifreDegistir]
@KullaniciAdi varchar(50),
@KullaniciSifre varchar(50)

as begin
update Kullanicilar set KullaniciSifre = @KullaniciSifre where KullaniciAdi = @KullaniciAdi
end

Son olarak admin yetkisine sahip olan kişinin kullanıcı ekleme işlemine geldi. Ben burada yeni kullanıcılar için şifreyi sabit ‘otomasyon’ olarak belirledim. Yeni kullanıcı ilk kez girdikden sonra şifresini değiştirebilir, admin de kullanıcının yetkilerini sonradan belirler.’Kullanıcı Ekle’ butonuna basılınca yapılan işlem;

private void button1_Click(object sender, EventArgs e)
{
   if (kullaniciAdi_tb.Text == "")
   { MessageBox.Show("Lütfen Bir Kullanıcı İsmi Giriniz!", "Otomasyon", MessageBoxButtons.OK, MessageBoxIcon.Error); return; }

   if (MessageBox.Show("Yeni Kullanıcı Kaydını Onaylıyormusunuz?", "Otomasyon", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question) != DialogResult.Yes)
   { return; }

   SqlConnection cnn = new SqlConnection();
   cnn.ConnectionString = Properties.Settings.Default.ConnectionString;
   cnn.Open();
   SqlCommand cmd = new SqlCommand();

   cmd.Connection = cnn;
   cmd.CommandText = "up_KullaniciEkle";
   cmd.CommandType = CommandType.StoredProcedure;
   cmd.Parameters.AddWithValue("@KullaniciAdi", kullaniciAdi_tb.Text);
   cmd.Parameters.AddWithValue("@KullaniciSifre", sifre_tb.Text); 

   try
   {
      cmd.ExecuteNonQuery();
   }
   catch (Exception ex)
   {
      MessageBox.Show(ex.Message);
      return;
   }
   MessageBox.Show("Yeni Kullanıcı Başarıyla Eklendi", "Otomasyon", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

Yine SQL Server’da tanımlamış olduğumuz bir stored procedure çağırarak kullanıcı ekliyoruz.

Stored Procedure;

SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER proc [dbo].[up_KullaniciEkle]
@KullaniciAdi varchar(50),
@KullaniciSifre varchar(50)
as begin
   declare @KullaniciNo varchar(30);
   set @KullaniciNo = ((select Count(*) from Kullanicilar) + 1)
   insert into Kullanicilar values(@KullaniciNo, @KullaniciSifre, @KullaniciAdi)
end

Genel olarak Login form tasarımı bu şekilde elbette üstüne birkaç özellik daha koyarak geliştirilebilir. Umarım sizlere faydalı olur. Başka bir makalede görüşmek üzere.

Kolay gelsin iyi çalışmalar…

Paylaş:
61 Responses to C# ile Windows Formununa Login Girişi!
  1. Onuralp Karaöz

    ConnectionString hata veriyo diyo herkez.
    Arkadaşlar o hata veren kodu oldugu gibi kaldırın
    DataSource’dan database inizi bulun vs zaten app.config olarak o stringi atıyor …
    Burak bey profesyonelce çalışmış anlamıyorsanız sorunu çözün programcının işi bu …
    Paylaşım için çok tesekkür ederim kendi adıma güzel bir kaynak oldu iyi çalışmalar

  2. ahmed arif

    merhaba hocam
    ben yeni başladım veritabanını gönderebilir misiniz?
    teşekkürler…

  3. engineer

    Merhaba
    Rica etsen bana projenın veritabanını gönderebilirmisin.
    ben çok uğraştım . programı çaliştiramadım.lütfen …

  4. Burak

    Merhabalar,

    Malesef projenin veritabanı dosyası mevcut değil. İlerleyen zamanlarda bu uygulamayı detaylı bir şekilde tekrardan elden geçirip güncelleyeceğim.

    İyi Bayramlar…

  5. Temel ÖZDEMİR

    Rica Etsem Veri Tabanını E-Posta ma Atabilirmisiniz
    tml-_-61@windowslive.com

  6. Temel ÖZDEMİR

    merhaba burak hocam teşekkür etmek istedim size paylaşımlarınız için ben henüz yolun başındayım otel ve kütüphane otamasyonları yaptım.sizin gibi başarılı olmayı umuyorum.projenizi geliştirmeyi düşünüyorum.iyi çalışmalar.

  7. Burak

    Kullanicilar tablosunda, stored procedure gönderilen “KullaniciAdi”nin KullaniciSifresini yenisi ile (parametre ile) update ediliyor.

  8. OSMAN

    selamlar.şifre değiştirme ekranındakı yazılan stored proc da ki olayı acıklarmısnız?

  9. merve

    Hocam hatanın ekran görüntüsünü mail attım. Bide ordan bakarsanız sevinirim. Procedure lerle ilgili bilgim yokta yardımcı olursanız sevinirim.

  10. merve

    SP ler bende hata veriyor. Nasıl çalıştırabilirim acaba?? ilk sp de TRAN ve dtabase de olan tablo isimlerinde hata veriyor. Nasıl YApabilirim acaba

  11. Burak

    Teşekkür ederim 🙂 İyi Çalışmalar…

  12. merve

    Tekrar Merhaba
    Benim dikkatsizliğim yüzünden olmuş. Veri tipini değiştirince sqldeki verileri silinmiş e normal olarak içi boşsa veri yoksa kod napsın :)))). gerekli yetkilendirmeleri yaptım şu an çalışıyor. Hocam eline sağlık baya güzel olmuş programın.

  13. merve

    Merhaba
    Bende YetkiDizisi[yetkiIndis] = (bool)ds.Tables[0].Rows[i][1]; satırında hata alıyorum.
    Erisebilir mi yi sql den bit yaptım fakat yine “Specified cast is not valid.” hatası veriyor. Bunu nasıl düzeltebilirim?

  14. Erdinç Korkmaz

    bana lazım olan çalışma da bu şekilde…bu yapılan yolla deniyorum ama
    bi sorun çıktı daha başlangıçta
    private void button1_Click(object sender, EventArgs e)
    {
    if (txtKullanici.Text == “”)
    MessageBox.Show(“Lütfen Kullanıcı Adını Giriniz”, “Hata”, MessageBoxButtons.OK, MessageBoxIcon.Error);
    Conn.Open();
    SqlCommand cmd=new SqlCommand(“select * from Kullanici where KullaniciAd = ‘ ” + txtKullanici.Text + ” ‘ “,Conn);
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataTable dt = new DataTable(“Tablo”);
    da.Fill(dt);

    if (dt.Rows.Count==0)
    {
    MessageBox.Show(“Geçersiz Kullanıcı “, “Hata”, MessageBoxButtons.OK, MessageBoxIcon.Error);
    return;
    }

    KullaniciAdi = dt.Rows[0][2].ToString();
    KullaniciNo = (int)ds.Tables[0].Rows[0][0];
    string sifre = ds.Tables[0].Rows[0][1].ToString();
    KullaniciSifre = sifre;

    KullaniciAdi = dt.Rows[0][2].ToString(); bu satırda böyle bir Row yok diyor..nedenini anlamdım ama galiba tabloyu doldurmuyor..bağlantıyı filan kontorl ettim..sorun ne olabilir acab ?

  15. Can.Kav

    Tekrar Merhaba açıkcası bana Login Girişi! bi format lazım giriş kabul edince istenilen forma geçmesini istiyorum. Ama sql veri tabanı kullanacam bu Login Girişi! ile ilgil bi örneğiniz varsa şimdiden tşk.

  16. Can.Kav

    Merhaba Hocam benim bi kaç sorum olacaktı.
    1.KullaniciNo = (int)ds.Tables[0].Rows[0][0];Belirtilen atama geçerli değil. (hata veriyor).
    2.Stored Procedure; nasıl düzenlenecek
    ilginiz için tşk.

  17. Burak

    Şuanda tekrardan indirdim, rar’dan çıkarttım ve bin klasörünün altındaki exe’yi çalıştırdım bir problem yok.

    “Etkinlik Takip Programı” olduğuna eminmisiniz? Bu makale farklı çünkü.

  18. bir yabancı grup stajer topluluğu

    arkadaşım etkinlik takip programını rar dan çıkarıp çalıştırdığımızda bu dosya bulunamadı hatası veriyor. yardımcı olursanız seviniriz.

  19. Burak

    Malesef şu sıralar bunu yapmam pek mümkün değil…

  20. emrah

    Hocam bunun asp.net 3.5 yapabilirmisiniz?

  21. Doğan

    cnn.ConnectionString = Properties.Settings.Default.ToString(); bu satırda hata veriyor ?

    Başlatma dizesinin biçimi, 0 dizininde başlayan belirtime uygun değil.

  22. Burak

    @Barış

    1. soru için; evet eminim.
    2. soru için; (bool) diyerek dönüştürme işlemini yapabilirsin. Ayrıca kaynak kodundan da inceleyebilirsin.
    3. soru için; Projenin altında Properties var onunda altında Settings var oradan bakabilirsin.

    Kolay gelsin, iyi çalışmalar…

  23. BARIŞ

    Izin tablosunun Erisebilirmi sutununun ‘bit’ veri türünden olduğuna ve YetkiDizisinin bool veri türünden olduğuna eminmisin?

    Bu programcılık konusunda yeniyim bana bu konuda yardımcı olurmusunuz?
    bit veri türü nasıl değişecek ya da nasıl olacak?

    cnn.ConnectionString = Properties.Settings.Default.ConnectionString;

    bu connectionstring nasıl tanımlanıyor?
    Teşekkürler

  24. Gökhan

    neyse kardeş 2 günlük bi araştırmadan sonra sorunu hallettim.yine de saolasın…;)

  25. Gökhan

    hımm anladım kardeş.sana zahmet trigger kodlarını da yazar mısın.bi türlü bu projeye göre bi trigger olusturamadım…:(

  26. Burak Özkan

    Ben triggerla yapmıştım, trigger’da veritabanında bulunuyor o yüzden görmemiş olabilirsin.

  27. gokhan

    o anlattıgın verdiğin konuda geçio mu göremedim ben…ya da projeyi upload etmişsin sanırım.projenin son halinde bu da var mı…

  28. Burak Özkan

    Tamam dediğim gibi yaparsan sorunun çözülmüş oluyor.

  29. Gökhan

    yane demek istediğim yeni kullanıcı eklediğim zaman butun yetkilere sahip olsun.daha sonra da admin bu yetkileri deiştirebilsin…

  30. Burak Özkan

    Veri tabanında bir tane trigger oluştur her kullanıcı eklendiğinde yetki tablosundan yetkileri direk versin yada stored procedure oluştur kullanıcıyı ekledikten sonra onu çağır.
    Kolay gelsin, iyi çalışmalar..

  31. Gökhan

    tmm kardeş olayı çözdüm saolasın ama bir sorum daha olucakdı.

    yeni kullanıcı eklerken yetkileri veri tabanından elle mi girmemiz gerekio.ben yeni bir kullanıcı ekledim yetkilendirme formundan o kullanıcıya yetkiler verip kaydediorum ama bi deişiklik olmuo.:(her kullanıcı için veri tabanından yetkileri elle mi girmemiz lazım…

  32. Burak Özkan

    Kısaca anlatmaya çalışayım. Ben kendi programımda şöyle yapmıştım. YetkiDizisini Yetkilendirme sayfasına aktarmıştım. Nasıl aktardım, yetkilendirme sayfasında aynen bir yetki dizisi oluşturdum sonra frm.YetkiDizisi = YetkiDizisi. Sonra formun load eventinde işlemimi yaptım, checkBox1.Checked = YetkiDizisi[0]. Hepsi bu.. Bu işlem çok zor olmasa gerek, hele kaynak kodu varken 😉 Kolay gelsin, iyi çalışmalar…

  33. Gökhan

    kardeş yetkilendirme ayarlarında sorun cıkıo yaa.kendime göre düzenledim ben checkboxları fln.yetkileri seçip uygula diorum yetkiler yuklendi dior ama hiç deişiklik olmuyor.mantık nasıl işlio burda anlatırsan sevinirim.mesala şöle bi kodum var.

    ana.cmd_yetki.Enabled = YetkiDizisi[0];

    ben bunu yetkilendirme ayarları formundan nasıl “1” yaparım.

  34. gokhn

    saolun size de…:)))

  35. Burak Özkan

    Probleminin çözüldüğüne ve programın işine yaradığına çok sevindim. Kolay gelsin, iyi çalışmalar…

  36. gokhan

    tmm kardeş sorunum çözüldü erisebilirmi sütununu “bit” yapınca düzeldi…gercekden cok güzel bi çalışma olmuş.tbrk ler….

  37. Burak Özkan

    Izin tablosunun Erisebilirmi sutununun ‘bit’ veri türünden olduğuna ve YetkiDizisinin bool veri türünden olduğuna eminmisin? Debug modda dataset’e bir bak hangi verileri görüyorsun?

  38. Gökhan

    kardeş ben bi yerde takıldım.” YetkiDizisi[yetkiIndis] = (bool)ds.Tables[0].Rows[i][1];”burda hata veriyor.hata=”Belirtilen Atama Geçerli Değil”

    kodlar aşşada;
    private bool YetkileriniYukle()
    {
    SqlConnection cnn = new SqlConnection(ana_menu.bağlantım);
    //– Connection String
    //cnn.ConnectionString = Properties.Settings.Default.ConnectionString;
    cnn.Open();

    DataSet ds = new DataSet();

    //– Kullanıcı No’ya göre yetkileri okunuyor…
    SqlDataAdapter sda = new SqlDataAdapter(“select Yetki_no, Erisebilirmi from Izin where ID = ‘” + ID + “‘”, cnn);
    sda.Fill(ds);

    if ((ds.Tables.Count == 0))
    {
    MessageBox.Show(“Yetkiler Yüklenemiyor.”, “Otomasyon”, MessageBoxButtons.OK, MessageBoxIcon.Error);
    return false;
    }

    //– Tanımladığımız yetki sayısı kadar yetki tablosuna yetkileri atıyoruz…
    for (int i = 0; i < ds.Tables[0].Rows.Count; ++i)
    {
    int yetkiIndis = (int)ds.Tables[0].Rows[i][0];
    YetkiDizisi[yetkiIndis] = (bool)ds.Tables[0].Rows[i][1];
    }
    return true;

    buraya kadar herşey tmm ama burayı çözemedim yardımcı olursan sevinirim…

  39. gokhan

    hımm anladım.projeyi merakla beklior olucam…kolay gelsin

  40. Burak Özkan

    Birisi uçurmuş herhalde açıkcası bende yedeğini almamıştım, ilk fırsatta bulmaya çalışacağım. SQL Database’leri olmadığı için ekleyemiyorum.

  41. Gökhan

    programın kaynak kodları download dan silinmiş kardeş.tekrar upload ede bilir misin acaba.bir de sql database leri de upload edersen sevinirim…(mdf ve ldf dosyalarını)tşk

  42. Burak Özkan

    Programın kaynak kodlarını ‘Download’ menüsü altında bulabilirsiniz.

  43. Mehmet

    burak hocam programın demosunu kaynak kodunu atarsanız çok sevinirim

  44. Mehmet KARABEY

    Uygulama gayet güzel olmuş.Crystal report ile ilgili de bir uygulama yapsanız sahane olur dinamik crsytal report ile ilgili mesela connection ı baska bir dosyadan okuyorsak crystal report u tasarlarken bu baglantıyı görür mü gibisinden konulara değinirseniz çok güzel olur.Kolay gelsin.

  45. Burak Özkan

    SQL Server’da bir tane New Query açarak sitedeki kodu kopyala/yapıştır yapıp ardından F5’e basarsan stored procedure oluşturulmuş olur. Kolay gelsin, iyi çalışmalar…

  46. Veysel Karani

    Hocam Elinize Sağlık çok güzel olmuş. Fakat Şu stored procedure lar Kaynak kodun için de Ek olarak vermiş olsaydınız çok güzel olurdu. Çünk ü SP leri çalıştıramıyorum. Teşekkürler

  47. Ömer ANAR

    Yararlı bi proğram olmuş eline sağlık

  48. Burak Özkan

    ds’nin ilk satırını almamdaki sebep bu programı ilk yaptığımda kullanıcı adları tek bir taneydi. Kullanıcı Eklerken kayıtlı Kullanıcı Adları gösteriliyor ve bir daha girilemiyordu. Kullanıcı Adı isim soyisim gibiydi. Dediğin gibi böyle bakınca anlatım bozukluğu oluyor. Orayı en kısa zamanda düzelteceğim teşekkür ederim. Diğer önerin içinde şu yorumu yapayım, DataSet bana daha kullanışlı geliyor pek bir zararını görmedim :), ExecuteScalar tek satırlık komutlar için geçerli diye biliyorum Kullanıcı Adı ve Şifre kontrolünde tamam ama Yetki kısmında kullanamam. Hız farkı var mı onuda kullanmadığım için bir yorumda bulunamayacağım.
    Yorum için teşekkür ederim…

  49. Samet Yıldıran

    Kullanıcı girişinde sql sorguna bakarak anlaşılıyorki “hmm demekki aynı kullanıcı adından fazla olabiliyormuş”. Ama sonra sorguyu ds ye attıktan sonra sadece ilk satırı alıyorsun:).
    Birde DataSet kullanıyorsun, tek bir table kullandığın halde:). DataTable kullan dicem ondanda daha iyi çözüm var. Select * yerine şifreyi ExecuteScalar ile çek kontrolünü gerçekleştir:).
    İyi çalışmalar…

  50. temetnosce

    Merhabalar hocam. bunun örnek dosyasını gönderebilirmisini. Teşekkür ederim. veyselkaranikoparal@hotmail.com

Bir Cevap Yazın

Your email address will not be published. Please enter your name, email and a comment.