Visual Studio C# form ile veri tabanımdaki verileri anlık olarak çekemiyorum

NLRezonance

Hectopat
Katılım
12 Mayıs 2020
Mesajlar
674
Çözümler
1
Daha fazla  
Cinsiyet
Erkek
C# form uygulaması içinde bir SQL sorgusu çalıştırıyorum. Bir giriş paneli oluşturdum ve bu giriş paneli sadece veri tabanına ilk eklediğim değeri kabul ediyor. Ancak bu değeri veri tabanından sildiğim halde hala yalnızca bu ilk girdiğim verinin kullanıcı adı ve şifresini kabul ediyor. Bu sorunu nasıl çözebilirim?
 
Kodlar ve veri tabanındaki veriler bize vahiy olarak mı geliyor?
 
Entity veya direk connection ne kullanıyorsan işin bitince bağlantıyı kapatmalısın. Yoksa bağlantıyı açtığı halini çeker. Her işlem için bağlantı sağla ve ardından kapa. Yanlış hatırlamyorsam. Entity için Dispose(), connection string içinde Close() kullanılır. Eğer bunlar işe yaramaz ise projeni paylaşırsan daha detaylı incelerim.
 
Kodlar ve veri tabanındaki veriler bize vahiy olarak mı geliyor?

Yani şu an öyle geliyor. Veri tabanımda sadece 1 kulalnıcı adı şifre var ve onu kabul etmiyor.

Entity veya direk connection ne kullanıyorsan işin bitince bağlantıyı kapatmalısın. Yoksa bağlantıyı açtığı halini çeker. Her işlem için bağlantı sağla ve ardından kapa. Yanlış hatırlamyorsam. Entity için Dispose(), connection string içinde Close() kullanılır. Eğer bunlar işe yaramaz ise projeni paylaşırsan daha detaylı incelerim.

Sorunum burada başlıyor. Yalnızca ilk kaydettiğim veriyi giriş ekranında kabul ediyor. Veri tabanımdaki diğer verileri girdiğimide örneğin kullanıcı adı z şifreyi 123 yaptığımda yanlış şifre diyor veri tabanından baktığım halde.

Kod:
 string user = textBox3.Text;
            string password = textBox4.Text;
            con = new SqlConnection("Data Source=RB\\SQLEXPRESS;Initial Catalog=proje;Integrated Security=True");
            com = new SqlCommand();
            con.Open();
            com.Connection = con;
            com.CommandText = "Select*From Kullanıcı where kullanıcı_adi='" + textBox3.Text +
            "'AND sifre='" + textBox4.Text + "'";
            dr = com.ExecuteReader();
            if (dr.Read())
            {
                MessageBox.Show("Tebrikler Giriş Başarılı");
                anaSayfa gecis = new anaSayfa();
                gecis.Show();
                this.Hide();
            }
            else
            {
                MessageBox.Show("Hatalı Kullanıcı Adı veya şifre");
            }
            con.Close();

        }
 
Yani şu an öyle geliyor. Veri tabanımda sadece 1 kulalnıcı adı şifre var ve onu kabul etmiyor.

Dostum kodları ve veritabanını görmeden yardımcı olmak zor anlamında söyledim. Kodları ve veritabanında ki verileri paylaşmazsan çözüm bulamazsın.

Öncelikle Textbox'a girilen değerleri değişkene alıp, neden o değişkenleri kullanmadın merak ettim.

Veritabanında ki kullanıcılar tablosuna select atıp dönen sonuç tablosunun görüntüsünüde atar mısın?
 
C#:
 static SqlConnection con;
        static SqlDataAdapter da;
        static SqlDataReader dr;
        static SqlCommand cmd;
        static System.Data.DataSet ds;

        public static string sqlCon = "Data Source=RB\\SQLEXPRESS;Initial Catalog=proje;Integrated Security=True;
  public static bool login(string kid, string pass)
        {
            string sorgu = "Select * From Kullanıcı where kullanıcı_adi=@user AND sifre=@pass";
            con = new SqlConnection(sqlCon);
            cmd = new SqlCommand(sorgu, con);

            cmd.Parameters.AddWithValue("@user", kid);
            cmd.Parameters.AddWithValue("@pass", pass);


            con.Open();
            dr = cmd.ExecuteReader();

            if (dr.Read())
            {
                con.Close();
                return true;
            }
            else
            {
                con.Close();
                return false;

            }

        }


bunu denermisin.
 
Dostum kodları ve veritabanını görmeden yardımcı olmak zor anlamında söyledim. Kodları ve veritabanında ki verileri paylaşmazsan çözüm bulamazsın.

Öncelikle Textbox'a girilen değerleri değişkene alıp, neden o değişkenleri kullanmadın merak ettim.

Veritabanında ki kullanıcılar tablosuna select atıp dönen sonuç tablosunun görüntüsünüde atar mısın?

Kod:
4 z z
5 z z3

Select attığımda çıkan sonuç bu. Ayrıca 2 gündür C# form ve SQL kullanıyorum o değişkenleri neden kullanmadığımı ben bile bilmiyorum.
 
2 güne göre hızlı ilerlemişsin. Hızlı koşan atın, damlaya damlaya göl olur. Neyse soruna odaklanalım.

Textbox'dan girdiğin değerler ne tam olarak? (Attığın sorgu sonucuna göre 2 satır kayıt dönmüş. Büyük ihtimal kaydı silememişsin. Birde result set'i resim olarak atarsan daha iyi olur.)

Koda gelirsek;
Aşağıdaki kod daha sağlıklı çalışacaktır. Sen kendine göre düzeltirsin. Fiddler üzerinden yazdığım için tam testini yapamadım. Veritabanındaki kullanıcı adı ve şifre eşleştiğinde giriş yapacaktır.

C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;

namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //Kullanmak istediğin event
        private void Form1_Load(object sender, EventArgs e)
        {
            //Metodu çağırdığın yer
            Login(textBox3.Text, textBox4.Text);
        }

        public void Login(string userName, string password)
        {
            SqlConnection cnn = new SqlConnection("Data Source=RB\\SQLEXPRESS;Initial Catalog=proje;Integrated Security=True");
            SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM Kullanıcı WHERE kullanıcı_adi = @userName AND sifre = @password", cnn);
            cmd.Parameters.AddWithValue("@userName", userName);
            cmd.Parameters.AddWithValue("@password", password);
            cnn.Open();

           

            if (cnn.State == ConnectionState.Closed)
            {
                cnn.Open();
            }

            bool hasRow = Convert.ToInt32(cmd.ExecuteScalar()) > 0;

            if (hasRow)
            {
                MessageBox.Show("Tebrikler Giriş Başarılı");
                anaSayfa gecis = new anaSayfa();
                gecis.Show();
                this.Hide();
            }
            else
            {
                MessageBox.Show("Hatalı Kullanıcı Adı veya şifre");
            }

            cnn.Close();
        }
    }
}
 
2 güne göre hızlı ilerlemişsin. Hızlı koşan atın, damlaya damlaya göl olur. Neyse soruna odaklanalım.

Textbox'dan girdiğin değerler ne tam olarak? (attığın sorgu sonucuna göre 2 satır kayıt dönmüş. Büyük ihtimal kaydı silememişsin. Bir de result Set'i resim olarak atarsan daha iyi olur.)

Koda gelirsek;
Aşağıdaki kod daha sağlıklı çalışacaktır. Sen kendine göre düzeltirsin. Fiddler üzerinden yazdığım için tam testini yapamadım. Veritabanındaki kullanıcı adı ve şifre eşleştiğinde giriş yapacaktır.

C#:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;

namespace WindowsFormsApp1.
{
 public partial class Form1 : Form.
 {
 public Form1()
 {
 InitializeComponent();
 }

 //Kullanmak istediğin event.
 private void Form1_Load(object sender, EventArgs e)
 {
 //Metodu çağırdığın yer.
 Login(textBox3.Text, textBox4.Text);
 }

 public void Login(string userName, string password)
 {
 SqlConnection cnn = new SqlConnection("Data Source=RB\\SQLEXPRESS;Initial Catalog=proje;Integrated Security=True");
 SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM Kullanıcı WHERE kullanıcı_adi = @userName AND sifre = @password", cnn);
 cmd.Parameters.AddWithValue("@userName", userName);
 cmd.Parameters.AddWithValue("@password", password);
 cnn.Open();

 if (cnn.State == ConnectionState.Closed)
 {
 cnn.Open();
 }

 bool hasRow = Convert.ToInt32(cmd.ExecuteScalar()) > 0;

 if (hasRow)
 {
 MessageBox.Show("Tebrikler Giriş Başarılı");
 anaSayfa gecis = new anaSayfa();
 gecis.Show();
 this.Hide();
 }
 else.
 {
 MessageBox.Show("Hatalı Kullanıcı Adı veya şifre");
 }

 cnn.Close();
 }
 }
}

Zibilyon tane hata verdi. Bunu düzeltiyim derken de yaptığım yeri bozacaktım az kalsın. Gerçekten bu kadar zor olmamalı ya. Bunu yaptıktan sonra kayıt ekleme bölmünü de yapmam gerekecek onda kim bilir ne kadar uğraşacağım. Kötü olan kısım ise yarın 23:59'a kadar sürem var. 🤠 🤠
 
Zibilyon tane hata verdi. Bunu düzeltiyim derken de yaptığım yeri bozacaktım az kalsın. Gerçekten bu kadar zor olmamalı ya. Bunu yaptıktan sonra kayıt ekleme bölmünü de yapmam gerekecek onda kim bilir ne kadar uğraşacağım. Kötü olan kısım ise yarın 23:59'a kadar sürem var. 🤠 🤠

Yukarıdaki kodda hata vereceği pek bir yer yok. Büyük ihtimal parantez hatası yapmışsındır. Aşağıdaki kısmı kullansan yeter. Hiç anlamadan bu işlerin içinden çıkman zor.

C#:
SqlConnection cnn = new SqlConnection("Data Source=RB\\SQLEXPRESS;Initial Catalog=proje;Integrated Security=True");
 SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM Kullanıcı WHERE kullanıcı_adi = @userName AND sifre = @password", cnn);
 cmd.Parameters.AddWithValue("@userName", userName);
 cmd.Parameters.AddWithValue("@password", password);
 cnn.Open();

 if (cnn.State == ConnectionState.Closed)
 {
 cnn.Open();
 }

 bool hasRow = Convert.ToInt32(cmd.ExecuteScalar()) > 0;

 if (hasRow)
 {
 MessageBox.Show("Tebrikler Giriş Başarılı");
 anaSayfa gecis = new anaSayfa();
 gecis.Show();
 this.Hide();
 }
 else.
 {
 MessageBox.Show("Hatalı Kullanıcı Adı veya şifre");
 }

 cnn.Close();
 

Yeni konular

Geri
Yukarı