using System;
using System.Data.SqlClient;
using System.Data;
using System.Windows.Forms;
namespace WinFormsAppYoutube
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//Veri tabanı yolu
//SqlConnection conn = new SqlConnection(@"Data Source=SERVER YOLU;Initial Catalog=Server TABLO ADI;Integrated Security=True;");
SqlConnection conn = new SqlConnection(@"Data Source=DESKTOP-0B1GIRL\SQLEXPRESS;Initial Catalog=Youtube;Integrated Security=True;");
private void Form1_Load(object sender, EventArgs e)
{
// Form yüklenirken yapılacak işlemler
}
private void button_login_Click(object sender, EventArgs e)
{
//Giriş için Kullanıcı Bilgilerinin alınması
string username = text_username.Text;
string user_password = text_password.Text;
try
{
//veri tabanı kullanıcı bilgileri: Login Form
//Tablodaki Parametlerin tanıtılması(Tablo Başlıkları)
string query = "SELECT * FROM Login_new WHERE username = @username AND password = @password";
SqlCommand cmd = new SqlCommand(query, conn);
cmd.Parameters.AddWithValue("@username", username);
cmd.Parameters.AddWithValue("@password", user_password);
//SqlDataAdapter: SQL Server veritabanını doldurmak ve güncelleştirmek için kullanılan bir dizi veri komutunu DataSet ve veritabanı bağlantısını temsil eder. Bu sınıf devralınamaz.
SqlDataAdapter sda = new SqlDataAdapter(cmd);
DataTable dtable = new DataTable();
//.Fill Veri Tabanındaki verileri kullanıcının girmiş olduğu veriler ile karşılaştırır.
sda.Fill(dtable);
if (dtable.Rows.Count > 0)
{
// Giriş başarılı olması durumunda Form2 ye giriş yapar
MenuForm form2 = new MenuForm();
form2.Show();
this.Hide();
}
else
{
MessageBox.Show("Invalid login details", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
text_username.Clear();
text_password.Clear();
text_username.Focus();
}
}
catch (Exception ex)
{
MessageBox.Show("ERROR: " + ex.Message);
}
finally
{
conn.Close();
}
}
private void button_clear_Click(object sender, EventArgs e)
{
//Login Formda girilen bilgilerin temizlenmesi
text_username.Clear();
text_password.Clear();
text_username.Focus();
}
private void button_exit_Click(object sender, EventArgs e)
{
//Exit Buton çıkış uyarı denetimi
DialogResult res = MessageBox.Show("Do you want to exit", "Exit", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (res == DialogResult.Yes)
{
//Exit Buton uyarı sırasında mesaja Yes dendiğinde Formu kapatma
Application.Exit();
}
}
}
}
SqlDataAdapter
Neden Kullanılır?
Veritabanı ve Uygulama Arasında Köprü Görevi Görmesi:
SqlDataAdapter
, veritabanı komutlarını (SELECT
,INSERT
,UPDATE
,DELETE
) uygulamaya bağlamanızı sağlar. Bu komutları kullanarak veritabanından veri çekebilir veya veri tabanına veri ekleyip güncelleyebilirsiniz.
Bağlantısız Veri İşleme:
SqlDataAdapter
, veritabanıyla sürekli bir bağlantıya gerek kalmadan veri almayı sağlar. Örneğin, verileriDataTable
veyaDataSet
gibi bellek içi veri yapılarında tutar ve uygulamada bu veriler üzerinde işlem yapmanıza olanak tanır. Böylece, veri üzerinde işlem yaparken veritabanıyla sürekli bağlantı kurmaya gerek kalmaz, bu da performansı artırır.
Veriyi
DataSet
veyaDataTable
Yapılarına Doldurmak İçin Kullanılır:SqlDataAdapter
,DataTable
veyaDataSet
gibi yapıların içine veriyi almak için kullanılır.
Veriyi Güncelleme ve Senkronize Etme:
SqlDataAdapter
,Update
yöntemi ileDataTable
içindeki değişiklikleri veritabanına yansıtabilir. Yani, uygulamada yaptığınız güncellemeleri, veritabanıyla senkronize etmek istediğinizdeSqlDataAdapter
işinizi kolaylaştırır.InsertCommand
,UpdateCommand
,DeleteCommand
gibi komutlar ile veritabanına veri güncelleme işlemleri yapılabilir.
SqlDataAdapter
Kullanımının Avantajları
- Bağlantısız Veri İşlemleri: Sürekli bağlantıya ihtiyaç duymadan veri alıp güncelleyebilme.
- Esnek Veri İşleme:
DataSet
veDataTable
gibi yapılara veri aktarıp işleyebilme. - Performans: Veriyi tek bir bağlantı aç-kapat işlemiyle alır ve bellekten işler; sürekli bağlantı kurup kapatma ihtiyacını azaltır.
DataSet
Tam Olarak Nedir?
- DataSet; bir veya birden fazla DataTable nesnesinden oluşan bir veri koleksiyonudur.
- Verileri bellekte tutar ve üzerinde işlem yapılmasını sağlar.
- Tablolar arası ilişki (Foreign Key gibi) tanımlanabilir ve bu ilişkiler doğrultusunda veri manipülasyonu yapılabilir.
- Genellikle çoklu tablo içeren sorgular veya birden fazla tabloyu aynı anda işlemek gerektiğinde tercih edilir.
DataSet
Nerelerde Kullanılır?
- Veritabanı Bağlantısı Olmadan Veri İşlemek İçin:
DataSet
, veritabanına bağlı kalmadan veriyi işlemeye olanak tanır. VerilerDataSet
'e yüklendikten sonra veritabanı bağlantısı kapatılabilir ve veriler bellek içinde işlenebilir. - Çoklu Tablo Yönetimi İçin:
DataSet
, içinde birden fazlaDataTable
içerebilir, yani birden fazla tabloyu aynı anda çekmek ve üzerinde işlem yapmak istediğinizde uygun bir yapı sunar. - Veri Senkronizasyonu İçin:
DataSet
içinde yapılan değişiklikler (ekleme, silme, güncelleme) gerektiğindeDataAdapter
aracılığıyla veritabanına yansıtılabilir.
Bir ya da birden fazla satırların sonuç olarak döneceği sorgularda SqlCommand' ın ExecuteReader özelliği kullanılmaktadır. ExecuteReader geriye SqlDataReader tipinde veri döndürmektedir.
SqlDataReader, sadece okunabilir olarak kullanılmaktadır. Satır satır okuma işlemi yapılmaktadır. SqlDataReader kullanımı boyunca veritabanı bağlantısı açık olacaktır. Çünkü SqlDataReader veritabanı ile bağlantılı olarak çalışmaktadır. Okuma işlemi sona erdiğinde SqlDataReader bağlantısınında kapatılması gerekmektedir.
Yorumlar
Yorum Gönder