Son kullanma tarihi geçmiş, bayatlamış bir tarayıcı kullanıyorsanız, Mercedes kullanmak yerine tosbağaya binmek gibi... Web sitelerini düzgün görüntüleyemiyorsanız eh, bi' zahmet tarayıcınızı güncelleyiniz. Modern Web standartlarını karşılayan bir tarayıcı alternatifine göz atın.
Visual Studio C# form ile veri tabanımdaki verileri anlık olarak çekemiyorum
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?
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.
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();
}
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();