C#’da Veritabanı İşlemleri

C#’da Veritabanı İşlemleri

C# veya ASP.net gibi platformlarda Veritabanı işlemleri dediğimiz zaman aklımıza hemen ADO.NET gelmeli. ADO.net .NET platformunun modern Veritabanı sınıf nesnelerine sahip teknolojidir. Bu teknolojinin iki temel sınıfı vardır. Bunlar DataSet Sınıfları ve .NET Veri Sağlayıcı Sınıflarıdır.

DataSet Sınıfları
DataSet sınıfları, çevrımdışı daha çok masaüstü programlamada veri depolama ve yönetme işlemlerini gerçekleştirmek için kullanılır. Özellikle İlişkisel Veritabanı, XML ve XML Webservisleri üzerinden veriçekmek için kullanılır.

.NET Veri Sağlayıcı Sınıfları
Veri sağlayıcı sınıflarsa farklı türdeki veri tabanlarına bağlanmak için kullanılırlar. Bu farklı türdeki veri tabanları SQL Server .NET Veri Sağlayıcısı, OLE DB .NET Veri Sağlayıcısı ve Diğer .NET Veri Sağlayıcı türleri tarafından bağlanabilir.

ADO.NET Veri Sağlayıcıları

 

ado.net_veri_saglayicilari

SQL Server için veritabanı bağlanma kodu


System.Data.SqlClient.SqlConnection baglanti;
baglanti= new System.Data.SqlClient.SqlConnection();
baglanti.ConnectionString= "Data Source=VERİKAYNAĞI;Initial Catalog=VERİTABANIADİ;User ID=USERADİ; Password=ŞİFRE; Connection TimeOut=60";

SQL Server 7.0’dan önceki sürümlerine veritabanı bağlanma kodu


System.Data.OleDB.OleDbConnection baglanti;
baglanti = new System.Data.OleDb.OleDbConnection();
baglanti.ConnectionString="Provider=SQLOLEDB; Data Source=ProdServ; Initial Catalog=Pubs; Integrated security=SSPI";

DİKKAT:Microsoft Access veri kaynağı, tek veri tabanından oluşur. SQL Server verikaynağı ise birden fazla veri tabanından oluşur. Bu yüzden SQL Server veritabanı bağlantıcümlesinde Initial Catalog parametresi kullanılır.

Microsoft Access 2003 sürümü için veritabanı bağlantı kodu (MDB uzantılar için)

System.Data.OleDb.OleDbConnection baglanti;
baglanti= new System.Data.OleDb.OleDbConnection();

baglanti.ConnectionString=@”Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\Deneme\Personel.mdb”;

Microsoft Access 2010 sürümü ve üzerisi için veritabanı bağlantı kodu (Accdb uzantılar için)


System.Data.OleDb.OleDbConnection baglanti;
baglanti = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Deneme\personel.accdb");

Veritabanı bağlantısı açmak ve kapamak


baglanti.Open(); // Bağlantıyı açar
baglanti.Close(); // Bağlantıyı kapatar

Veritabanı bağlantı durumunu kontrol etmek


if(baglanti.State==ConnectionState.Closed)
MessageBox.Show("Bağlantı kapalı");
else if (baglanti.State==ConnectionState.Open)
MessageBox.Show("Bağlantı açık");

Örnek bir Access 2010 uygulaması yapalım

 

Kaynak kodlar:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
namespace _1213BDDers07_01
{
public partial class Form1 : Form
{
public Form1()
{
HSancak Nesne Tabanlı Programlama II Ders Notları
InitializeComponent();
}
OleDbConnection bag= new
OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=C:\Users\HSK\Documents\personel.accdb");
//Form yüklenirken DataGrid dolduruluyor
private void Form1_Load(object sender, EventArgs e)
{
if (bag.State == ConnectionState.Closed)
bag.Open();
DataTable dt = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM Tablo1", bag);
da.Fill(dt);
dataGridView1.DataSource = dt;
}
//Listeleme Butonu
private void button1_Click(object sender, EventArgs e)
{
if (bag.State == ConnectionState.Closed)
bag.Open();
DataTable dt = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM Tablo1", bag);
da.Fill(dt);
dataGridView1.DataSource = dt;
}
//Ekleme Butonu
private void button2_Click(object sender, EventArgs e)
{
if (bag.State == ConnectionState.Closed)
bag.Open();
OleDbCommand komut = new OleDbCommand("INSERT INTO
Tablo1(ADI,SOYADI,MAAS) VALUES('" + textBox1.Text + "','" + textBox2.Text +
"','" + float.Parse(textBox3.Text) + "')", bag);
komut.ExecuteNonQuery();
DataTable dt = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM Tablo1", bag);
da.Fill(dt);
dataGridView1.DataSource = dt;
}
//Silme Butonu
private void button3_Click(object sender, EventArgs e)
{
if (bag.State == ConnectionState.Closed)
bag.Open();
OleDbCommand komut = new OleDbCommand("DELETE FROM Tablo1 WHERE
ADI='"+textBox1.Text+"' AND SOYADI='"+textBox2.Text+"'",bag);
komut.ExecuteNonQuery();
DataTable dt = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM Tablo1", bag);
da.Fill(dt);
dataGridView1.DataSource = dt;
HSancak Nesne Tabanlı Programlama II Ders Notları
}
//Güncelleme Butonu
private void button4_Click(object sender, EventArgs e)
{
if (bag.State == ConnectionState.Closed)
bag.Open();
OleDbCommand komut = new OleDbCommand("UPDATE Tablo1 SET MAAS=" +
float.Parse(textBox3.Text) + " WHERE ADI='" + textBox1.Text + "' AND
SOYADI='" + textBox2.Text + "'", bag);
komut.ExecuteNonQuery();
DataTable dt = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM Tablo1", bag);
da.Fill(dt);
dataGridView1.DataSource = dt;
}
//Arama Butonu
private void button5_Click(object sender, EventArgs e)
{
if (bag.State == ConnectionState.Closed)
bag.Open();
DataTable dt = new DataTable();
OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM Tablo1 WHERE
ADI='"+textBox1.Text+"'", bag);
da.Fill(dt);
dataGridView1.DataSource = dt;
}
//Form kapanırken bağlantı kapatılıyor
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
bag.Close();
}
//DataGrid ten seçilen satıra ait bilgiler TextBox’ alara aktarılıyor
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
textBox1.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();
textBox2.Text = dataGridView1.CurrentRow.Cells[2].Value.ToString();
textBox3.Text = dataGridView1.CurrentRow.Cells[3].Value.ToString();
}
//Kayıt eklemenin bir başka yöntemi
//string sorgu = "insert into personnel(Ad, Soyad, PNO, TCNO, Unvan, Bolum,
Cinsiyet, Dogum)
// values
(@ad,@soyad,@pno,@tcno,@unvan,@bolum,@cinsiyet,@dogumtarihi)";
//OleDbCommand cmd= new OleDbCommand(sorgu,baglanti);
//cmd.AddWithValue.Add("@ad",txtad.Text);
//cmd.AddWithValue.Add("@soyad",txtsoyad.Text);
//cmd.AddWithValue.Add("@pno",txtpno.Text);
//... gibi
//bablanti.open();
//cmd.ExecuteNonquery();
//balanti.close();

 

Aynı örneği bu sefer SQL Server için oluşturalım


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
namespace _1213BDDers08_05
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
SqlConnection bag = new SqlConnection(@"Data Source=HSKPB\SQLEXPRESS;
Initial Catalog=OgrenciVT; Integrated Security=True");
void baglan()
{
if (bag.State == ConnectionState.Closed)
bag.Open();
}
void listele()
{
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Ogrenci", bag);
da.Fill(dt);
dataGridView1.Columns[0].HeaderText = "Öğrenci No";
dataGridView1.Columns[1].HeaderText = "Adı";
dataGridView1.Columns[2].HeaderText = "Soyadı";
dataGridView1.Columns[3].HeaderText = "Bölümü";
dataGridView1.DataSource = dt;
}
HSancak Nesne Tabanlı Programlama II Ders Notları
private void Form1_Load(object sender, EventArgs e)
{
baglan();
listele();
dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
}
private void button1_Click(object sender, EventArgs e)
{
baglan();
listele();
}
private void button2_Click(object sender, EventArgs e) // EKLEME
{
baglan();
SqlCommand komut = new SqlCommand();
komut.Connection = bag;
komut.CommandText = "INSERT INTO Ogrenci(OGRNO, ADI, SOYADI, BOLUMU)
VALUES ('" + textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text
+ "','" + textBox4.Text + "')";
komut.ExecuteNonQuery();
listele();
bag.Close();
}
private void button3_Click(object sender, EventArgs e) // GÜNCELLEME
{
baglan();
SqlCommand komut = new SqlCommand();
komut.Connection = bag;
komut.CommandText = "UPDATE Ogrenci SET ADI='" + textBox2.Text + "',
SOYADI='" + textBox3.Text + "', BOLUMU='" + textBox4.Text + "' WHERE
OGRNO='" + textBox1.Text + "'";
komut.ExecuteNonQuery();
listele();
bag.Close();
}
private void button4_Click(object sender, EventArgs e) // SİLME
{
baglan();
SqlCommand komut = new SqlCommand();
komut.Connection = bag;
komut.CommandText = "DELETE FROM Ogrenci WHERE OGRNO='" + textBox1.Text
+ "'";
DialogResult s;
s = MessageBox.Show(textBox1.Text + " Numaralı Öğrenci Silinsinmi",
"Silme İşlemi", MessageBoxButtons.YesNo);
if (s == DialogResult.Yes)
{
if (komut.ExecuteNonQuery() >= 1)
HSancak Nesne Tabanlı Programlama II Ders Notları
{
listele();
MessageBox.Show("Kayıt Silindi");
}
else
MessageBox.Show(textBox1.Text + " Numaralı Öğrenci Sistemde
Kayıtlı Değil!!!");
}
else
MessageBox.Show("Kayıt Silinmedi");
bag.Close();
}
private void button5_Click(object sender, EventArgs e) // ARAMA
{
baglan();
DataTable dt = new DataTable();
SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Ogrenci WHERE
OGRNO='" + textBox1.Text + "'", bag);
da.Fill(dt);
dataGridView1.DataSource = dt;
bag.Close();
}
private void dataGridView1_SelectionChanged(object sender, EventArgs e)
{
textBox1.Text = dataGridView1.CurrentRow.Cells[0].Value.ToString();
textBox2.Text = dataGridView1.CurrentRow.Cells[1].Value.ToString();
textBox3.Text = dataGridView1.CurrentRow.Cells[2].Value.ToString();
textBox4.Text = dataGridView1.CurrentRow.Cells[3].Value.ToString();
}
}
}

 

Directory sınıfı

Directory sınıfı

Directory sınıfının diğer methodlar içerisinde kendini farklılaştırıcı hiç bir özelliği bulunmamaktadır. Yalnızca statik sınıflar metotlar içerir.

Örnek kaynak kodlar:


string adres;
adres = @"C:\WINDOWS";
DirectoryInfo dosyabilgisi = new DirectoryInfo(adres);
MessageBox.Show(

"Dosya adı:" + dosyabilgisi.Name + "\n" +
"Dosya yolu: " + dosyabilgisi.FullName + "\n" +
"Dosyanın oluşturulma tarihi:" + dosyabilgisi.CreationTime + "\n" +
"Dosyaya son giriş tarihi:" + dosyabilgisi.LastAccessTime + "\n" +
"Son değişiklik zamanı:" + dosyabilgisi.LastWriteTime + "\n" +
"Son erişim zamanı:" + dosyabilgisi.LastAccessTime + "\n" +
"Dosya var mı :?" + dosyabilgisi.Exists + "\n" +
"Klasör adı:" + dosyabilgisi.Name + "\n" +
"Bir üst klasör:" + dosyabilgisi.Parent + "\n" +
"Kök Dizin:" + dosyabilgisi.Root + "\n"

);

Sonuç:

directory_sinifi

Fileinfo sınıfı

string adres=@"C:\WINDOWS\deneme.txt";
FileInfo d=new FileInfo(adres);
Console.WriteLine("Öznitelikler: "+d.Attributes);
Console.WriteLine("Oluşturulma tarihi: "+d.CreationTime);
Console.WriteLine("Var mı? "+d.Exists);
Console.WriteLine("Uzantı: "+d.Extension);
Console.WriteLine("Tam adres: "+d.FullName);
Console.WriteLine("Son erişim zamanı: "+d.LastAccessTime);
Console.WriteLine("Son değişiklik zamanı: "+d.LastWriteTime);
Console.WriteLine("Boyut: "+d.Length);
Console.WriteLine("Klasör adı: "+d.Name);
Console.WriteLine("Bulunduğu klasör: "+d.DirectoryName);

Path sınıfı:

string adres=@"C:\dizin\deneme.txt";
Console.WriteLine("Uzantı: "+Path.GetExtension(adres));
string yeniAdres=Path.ChangeExtension(adres,"jpg");
Console.WriteLine("Yeni uzantı: "+Path.GetExtension(yeniAdres));
string adres2=@"C:\klasör";
Console.WriteLine("Yeni adres: "+Path.Combine(adres,adres2));
Console.WriteLine("Klasör: "+Path.GetDirectoryName(adres));
Console.WriteLine("Dosya adı: "+Path.GetFileName(adres));
Console.WriteLine("Uzantısız dosya adı: "+Path.GetFileNameWithoutExtension
Console.WriteLine("Tam adres: "+Path.GetFullPath(adres));
Console.WriteLine("Kök dizin: "+Path.GetPathRoot(adres));
Console.WriteLine("Geçici dosya adı: "+Path.GetTempFileName());
Console.WriteLine("Geçici dosya dizini: "+Path.GetTempPath());
Console.WriteLine("Dosya uzantısı var mı? "+Path.HasExtension(adres)
Console.WriteLine("Alt dizin ayıracı: "+Path.AltDirectorySeparatorChar
Console.WriteLine("Dizin ayıracı: "+Path.DirectorySeparatorChar);
Console.Write("Geçersiz dosya adı karakterleri: ");
char[] dizi=Path.GetInvalidFileNameChars();
foreach(char b in dizi)
Console.Write(b+" ");
Console.Write("\nGeçersiz adres karakterleri: ");
char[] dizi2=Path.GetInvalidPathChars();
foreach(char b in dizi)
Console.Write(b+" ");
Console.WriteLine("\nAdres ayırıcı karakter: "+Path.PathSeparator);
Console.WriteLine("Kök dizin ayıracı: "+Path.VolumeSeparatorChar);

dosya_ozellikleri_c_sharp_ornek

Projeyi indir

C# ‘da Dosyalama işlemleri

C#’da Dosyalama İşlemleri

Dosyalama işlemleri çeşitli türdeki dosyaların içlerindeki bilgileri okumak ve yazmak gibi iki aşamadan oluşur. Bu aşamalar içerisinde de farklı türdeki dosyalar C#’da farklı okuma işlemi gerçekleştirilir. Örneğin bir yazı türündeki dosyayı okumak için StreamReader, binary türündeki dosyaları okumak içinse BinaryReader kullanılır.

Bu dosyalama işlemlerinden herhangi birini gerçekleştirmek için programımızın en başına


using System.IO; // Dosyalama işlemleri için kullanacağımız isim uzayı (bkz: C# Giriş çıkış isim uzayı)

Nereye ekleceksiniz?

using_io_kullanimi

C#’da Text Dosyalama işlemleri | StreamReader ve StreamWriter

Öncelikle bir sınıf ekledik ve bu sınıftan bir nesne türeterek işlem yapabiliriz. Eğer bir sınıftan nesne türeteceksek ilk aklımıza gelen şey new operatörü olmalıdır.

StreamReader Kullanım


StreamReader stroku = new StreamReader(yol); // Burada yol dosyanın adresidir.

Örnek bir Reader (Okuma) işlemi


StreamReader SR = new StreamReader(@“C\dosyalama\deneme.txt”);
SW.WriteLine(textBox1.Text);
SW.Close(); // veri kaybına uğramamak için dosyayı kapatıyoruz.

StreamWriter Kullanım


StreamWriter stryaz = new StreamWriter(yol); // Burada yol dosyanın adresidir.

Örnek bir Writer (Yazma)işlemi


StreamWriter SW = new StreamWriter(@“C:\dosyalama\deneme.txt”);
SW.WriteLine(textBox1.Text);
SW.Close();

Bir adet örnek yapalım. Formumuzu oluşturalım ve içerisinde

  • 1 tane ListBox
  • 1 tane TextBox
  • 3 tane Button

Harddiskimizin C bölmesine bir klasör oluşturalım. Normal şartlar altında C dizinimizi direkt olarak kullanacaktık fakat bu alan içerisinde Windows bulunduğu için korumalıdır. Biz de bir alt klasör oluşturup içerisinde işlemleri yapacağız. Bu dosya içerisine de islem.txt seklinde text dosyası oluşturalım.

dosyalama_klasoru

Formumuzu aşağıdaki gibi tasarlayalım.

visual_studio_stream_reader_ornek_uygulama

Ekleceğimiz diyalog pencereleri:

open_file_dialog_and_save_file_dialog_pencelerinin_gosterimi

Dosya oku butonu için kodlar


// Dosya okuma işlemini biraz daha otomatikleştirelim
// Bunun için OpenDialog penceresini kullanalım.
openFileDialog1.ShowDialog();
string dosya_yolu = openFileDialog1.FileName;
listBox1.Items.Clear();
StreamReader oku = new StreamReader(@dosya_yolu);
string satir;
while((satir=oku.ReadLine())!=null)
{
listBox1.Items.Add(satir);
}

oku.Close();

Yazma butonu için kodlar


saveFileDialog1.ShowDialog();
string dosya_yolu=saveFileDialog1.FileName;
StreamWriter yaz = new StreamWriter(@dosya_yolu);
yaz.WriteLine(textBox1.Text);
yaz.Close();

Dosya ekle çin kodlar


saveFileDialog1.ShowDialog();
string dosya_yolu = saveFileDialog1.FileName;
StreamWriter ekle = File.AppendText(@dosya_yolu);
ekle.WriteLine(textBox1.Text);
ekle.Close();

Projeyi indir

FileStream

FileStream sınıfını StreamReader’dan farkı her türlü dosyaya destek sunma özelliğidir. Filestream sınıfı dosyaların açma, yazma ve bunun yanında da dosyalama işlemlerinde istenilen senkronizasyona ve filtrelemeye göre iyi bir performansa çalıştırılabilir.

 

FileStream Nesne = FileStream (Dosya_Yolu,Dosya_modu,Erişim_tipi,Paylaşım Tipi);

 


FileStream fs = new FileStream(@"c:\Dosyalama\deneme.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite,FileShare.ReadWrite);

  • Dosya_yolu:Dosyanın yolun bellirteceğimiz kısım.
  • Dosya_modu:6 şekli vardır.filestream_c_sharp

    Append: Üzerine ekleme yapar.

    Create: Dosya yoksa oluşturacak, varsa üzerine yazılır.

    Create New: Dosya varsa bile yeni bir dosya oluşturur.

    Open: Dosya varsa varolan dosyayı açar.

    OpenOrCreate: Dosya yoksa yeni oluşturur, varsa dosyayı açar.

    Truncate: Dosyanın mutlak var olması gerekir. Önceki dosyayı tamamen silerek dosya açar. Dosya açıldığında 0 baytır.

  • Erişim_tipi: Dosya erişebilirlik özelliğidir. 3 Özellik bulunur.Read: Dosyaya yalnızca okuma erişimi (amacı) verilmiştir.

    ReadWrite: Dosyaya hem okuma hem de yazma erişimi verilmiştir.

    Write: Yalnızca yazma erişim kontrolu verilmiştir.

  • Paylaşım Tipi: Dosya açıkken paylaşımlı olup olmadığı özellikleridir. Bu özellik sayesinde programın programın Windows ve diğer programlar ile paylaşımını kısıtlayabiliriz. 6 Özellik bulunurDelete: Dosyaya silinebilir özelliği verir. Böylece kullanıcı dosya açıkken bile dosyayı silebilir.

    Inheritable: Dosya açıkken yalnızca kısıtlayıcı alt işlemler tarafından erişilebilir.

    None: Tüm kısıtlamalar mevcuttur. Dosya açıkken kullanıcı dosya içerisinde okuma, yazma veya silme işleminde bulunamaz.

    Read: Dosya açıkken okuma paylaşımına olanak sağlar.

    ReadWrite: Hem okuma hem yazma paylaşımı verir.

    Write: Yalnızca yazma paylaşımı verir.

Örnek:

filestream_ornek_goster

Kaynak kodlar:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;

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

private void Form1_Load(object sender, EventArgs e)
{
FileStream fs = new FileStream(@"c:\Dosyalama\deneme.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite,FileShare.ReadWrite);
StreamReader sr = new StreamReader(fs);
string kayit;
while ((kayit = sr.ReadLine()) != null)
{
lbx_kayit_no.Items.Add(kayit);
kayit = sr.ReadLine();
lbx_adi.Items.Add(kayit);
kayit = sr.ReadLine();
lbx_soyadi.Items.Add(kayit);
}
sr.Close();
fs.Close();
}

private void btn_kayit_ekle_Click(object sender, EventArgs e)
{
if (txt_kayit_no.Text == "" || txt_adi.Text == "" || txt_soyadi.Text == "")
{
MessageBox.Show("Tüm alanları doldurunuz!");
}
else
{
lbx_kayit_no.Items.Add(txt_kayit_no.Text);
lbx_adi.Items.Add(txt_adi.Text);
lbx_soyadi.Items.Add(txt_soyadi.Text);
}
}

private void lbx_kayit_no_SelectedIndexChanged(object sender, EventArgs e)
{
lbx_adi.SelectedIndex = lbx_kayit_no.SelectedIndex;
lbx_soyadi.SelectedIndex = lbx_kayit_no.SelectedIndex;
}

private void btn_kayit_sil_Click(object sender, EventArgs e)
{
int indexno = lbx_kayit_no.SelectedIndex;
if (indexno >= 0)
{
lbx_kayit_no.Items.RemoveAt(indexno);
lbx_adi.Items.RemoveAt(indexno);
lbx_soyadi.Items.RemoveAt(indexno);
}
else
{
MessageBox.Show("Silenecek kaydı seçiniz");
}
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
FileStream fs = new FileStream(@"c:\Dosyalama\deneme.txt", FileMode.OpenOrCreate, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
int ks, i;
ks = lbx_kayit_no.Items.Count;
if (ks > 0)
{
for (i = 0; i < ks; i++) { sw.WriteLine(lbx_kayit_no.Items[i].ToString()); sw.WriteLine(lbx_adi.Items[i].ToString()); sw.WriteLine(lbx_soyadi.Items[i].ToString()); } } else { MessageBox.Show("Yazılacak kayıt yok."); } sw.Close(); fs.Close(); } } }

Projeyi indir

BinaryReader

İkili tipteki dosyalar (video,resim,ses) üzerinde işlem yapmaya sağlar.

MenuStrip Kontrolü

MenuStrip (MainMenu)

Formların başlangıcında bulunan açılır menülerdir. Menü elemanlarından oluşur. Kullanıcıların birden çok araçlara kısayol ile ulaşmalarını amaç edinir.

MenuStrip kontrolü ekleme

menu_strip_visual_studio_ekleme

Menü öğelerine isim verirken & işareti kullanılarak, kullanıcın
klavyenin ALT tuşuyla bu öğeyi çalıştırmasını sağlanabilir. & işareti hangi karakter ile kullanılırsa
(hangi karakterin solundaysa) kısa yol olarak o karakter kullanılır.
Yandaki şekilde &Dosya ile ALT+D tuş kombinasyonuyla Dosya menüsü açılır.

MenuItem Özellikleri

  • Checked: Menü öğesinin yanında seçili olduğuna dair bir işaretin gözükmesini sağlar
  • Enabled: Menü öğesinin aktif durumda olup olmadığını belirler
  • RadioCheck: Öğenin seçilme stilinin RadioButton düğmesi olarak gözükmesini sağlar.
  • ShortCutKeys: Menüye ulaşım için bir kısa yol tanımlar .
  • ShowShortCutKeys: Menünün kısa yolunun, isminin yanında gözükmesini belirler.
  • MenuItems: Alt menülerin tutulduğu koleksiyondur.

menu_strip_visual_studio

Örneği indir

Timer kontrolü

Timer Kontrolü

Belirli bir süre içerisinde belirlediğimiz kodların tekrar tekrar çalıştırılmasına sağlayan kontroldür. Bu kontrol içerisinde yalnızca tik olayı vardır. Bir tikin ne kadar hızlı veya yavaş olabileceğini ayarlayıp buna göre istediğimiz kodların çalışmasını sağlayabiliriz.


// Timerı açmak için
Timer1.Start();
// Timer durdurmak için
Timer1.Stop();

Timer Interval Özelliği

Timerın en önemli özelliğinin tik olayını söylemiştik. Tik olayının hızınıysa Interval özelliğiyle sağlarız. Bu da en önemli özelliğine özellik katan kısmıdır. Intervala milisaniye cinsinden deger veririz.

1000 milisaniye – 1 saniye
10000 milisaniye – 10 saniye
60000 milisaniye – 1 dakika (60 saniye)


Timer1.Interval = 2000;

Tarih ve saati dinamik bir şekilde programın isminde gösterelim

Timer ekleyelim.
timer_visual_studio

Formumuzun üzerine çift tıklayarak Form_Load olayına kodlarımıza yazalım

timer1.Interval = 1000; // her 1 saniye içerisinde güncellenecek
timer1.Start();

Eklediğimiz Timer altta gri bölge üzerine yerleşecektir. Çift tıklayarak Tick olayına girelim ve aşağıdaki kodları yazalım.
cift_tik_timer

// Zaman biçiminde değişken oluşturup değişkene bugünün tarih ve zamanını gönderiyoruz
DateTime t = DateTime.Now;
this.Text = t.ToLongTimeString(); // Zamanı alıp string tipine değiştiriyoruz ve formun başlığına eşitliyoruz

Örnek proje 1 (Bu projenin button eklenmiş hali)

Örnek proje 2 (C# ‘da kayan yazı yapımı (örneği) -Biraz daha geliştirilmiş örnek)

Örnek proje 3

RichTextBox Kontrolü

RichTextBox nedir?

Normal bir textbox üzerinde yalnızca belirli işlemler yapabiliriz. Yani biçimsel olarak fontunu büyütme, font rengini değişme gibi işlemler yapabilirken RichTextBox’da metinler bir editörün içerisinde bulunuyor ve bir Word belgesi özelliklerine sahip oluyor. Bu sayede büyük bir textbox içerisinde madde işaretlemelerinden yazılan metinlerin büyütülmesi, küçültülmesi gibi işlemler bile yapabiliyoruz.

RichTextBox özellikleri

  • ZoomFactor: Metinin büyütülüp / küçültülmesini sağlar. Bu özellik günümüzde tarayıcılardaki % ‘lik oran gibidir. Örn: Mozilla Firefox ctrl+ veya ctrl- ile metni yakınlaştırıp, uzaklaştırmak gibi.
  • WordWrap: Metni kaydırmaya yarar. Satırın uzunluğunun editöre sığmadığı zamanlarda satırın sonraki bölümünün alt satıra geçerek scroll bar oluşturmasını sağlar.
  • Detechurls: Bağlantı olarak girilen yazıların otomatik olarak link olarak görülmesini sağlar(Linklabel olarak gösterir.).
  • Lines:Sadece string dizisi olarak tutar.
  • Bullentintend: Satırların madde işaretinden kaç piksek açıkta olduğu ayarıdır.
  • SelectedText: Seçili olan metnin tutulduğu özellik.
  • SelectedBullet:Seçilen madde işaretlerini işaretleme için kullanılır.
  • SelectedFont: Seçili metnin rengini ayarlayabileceğimiz özellik.
  • Find: Metin içerisinde arma yapıldığında kullabilecek özellik.
  • Loadfile: Dosya yükleme işlemlerinde kullanılacak özellik.
  • SaveFile: Dosyayı kaydetmek için kullanılacak özellik.
  • Undo: Yapılan işlemleri geri almak için kullanabilecek özelllik.
  • Redo: Geri alınan işlemi yineler.
  • Textchanged: Metin kutusu içerisinde yazı – text değişikliğinde meydana gelecek olaylar özelliği.

Basit bir örnek:

RichTextBox ekleyip ekrandaki duruma getirelim.

rich_text_box_visual_studio

rich_text_box_ornek_basit

İçerisine metin girelim. Örneğin bu günlerde Diren Gezi Parkı dememizin yerinde olacağını düşünüyorum.

icerisine_verilen_link_rich_textbox

Butonları düzeltelim.

diren-gezi-parki

Diyalogları ekleyelim.

font_ve_color_dialog_pencelerinin_eklenmesi

Form tasarımında eklediğimiz

RichTextBox ‘ın name özelliğini rtxt_bilgi

Renk buttonunun name özelliğini btn_font

Font buttonunun name özelliğiniyse btn_font

yapalım.

Bu değişikliklere göre kaynak kodlar şu şekilde;


private void btn_font_Click(object sender, EventArgs e)
{
fontDialog1.ShowDialog();
rtxt_bilgi.SelectionFont = fontDialog1.Font;
}

private void btn_renk_Click(object sender, EventArgs e)
{
colorDialog1.ShowDialog();
rtxt_bilgi.SelectionColor = colorDialog1.Color;
}

Sonuç:

Font

diren_gezi_parki_richtextbox_ornek

Renk

diren_gezi_parki_richtextbox_ornek_RENK

Projeyi indir

Örnek 2: Gelişmiş Proje

rich_textbox_ornek_2_indir

Proje indir

Form Uygulamaları

Form Uygulamaları

Formlar kullanıcılarla etkileşimi sağlayan Windows işletim sisteminden bildiğimiz ‘Pencereler’ ‘dir. Form üzerinde ayrı bir form tercih etmek istediğimizde kullanmamız gereken çeşitli kodlar bulunur. Bu kodları bulmak için öncelikle bir form oluştırmanız gerekir.

Visual Studio’da proje içerisinde yeni form oluşturmak

Form açmanın bir kaç farklı yöntemi vardır biz bunlardan iki tanesini öğrenelim. Bu yöntemlerden ilki Solution Explorer’den

windows_form_ekleme_yontemi_1

ikincisiyse Project menüsünden.

windows_form_ekleme_yontemi_2

Her iki yöntem de geleceğiniz ortak ve son aşama ise aşağıdaki görüntüdür.

windows_form_ekleme

Form uygulamalarımızda birden çok form ekledikten sonra şunu bilmemiz gerekir. Eklediğimiz form bir sınıf olarak eklendiğinden sınıf içerisinden bir nesne türetilmek zorundadır. Bu sayede bu nesneyi bir button gibi kullanarak özelliklerini kullanabiliyoruz.

Nesne türetmek için her zaman kullandığımız operatör new operatörüdür.


// FormName formadi = new FormName()
// Projedeki bulunduğumuz form adı (FormName özelliği) Form1 olduğunu düşünüğümüzde
Form1 FRM1 = new Form1();

Bulunduğumuz Form ekranını kapatma veya gizleme


// Bulunduğumuz formu kod ile kapatma
FRM1.Close();
// Bulunduğumuz kodun görünürlüğünü gizlemek
FRM1.Visible = false; // veya this.Visible = false;

Bulunduğumuz formdan başka bir forma geçmek


// Geçiş yapacağımız form2 olsun.
/*
ALGORİTMA 1.BULUNDUĞUN FORMUN GÖRÜNÜRLÜĞÜNÜ GİZLE 2. GEÇİŞ YAPACAĞIN FORMA GEÇ
*/
this.Visible= false;
Form2 FRM2 = new Form2();
FRM2.Show(); // veya FRM2.ShowDialog(); Bu kullanım diyalog kutusu ile gösterir. Diğeri ile farkı bu kullanımda diğer formların kitlenerek yalnızca aktif formun kullanabilmemesidir.

Başlangıç Formunu değiştirmek

c_sharp_acilis_formunu_degistirme

Form kapatılınca “Form kapatılsın mı?” diyalog penceresi oluşturmak


DialogResult s;
s = MessageBox.Show("Form kapatılsın mı?", "Kapatma İşlemi", MessageBoxButtons.YesNo);
if (s == DialogResult.Yes) e.Cancel = false;
else e.Cancel = true;

Herhangi bir tuşa basarak formu kapatma

Örneğin F10’a basarak programı kapatmak istediğimizi düşündüğümüzde;


if ((e.KeyCode == Keys.F10))
{
Application.Exit();
}
else MessageBox.Show("Kapatmak icin CTRL + F10 tuşuna basınız");

Form Özellikleri

  • Acceptbutton: Herhangi bir form aktif iken aktif tuşu oluşturmanızı yarar. Çoğunlukla Enter Tuşudur. Örneğin Enter tuşu buna örnektir. Entere bastığızda gelen işlem bir Acceptbutton Form özelliğidir.
  • Cancelbutton: Deaktif tuşu oluşturmanıza yarar. Çoğunlukla Esc tuşu atanır.
  • Opacity: Opaklık ayarı.
  • Startposition: Formumuz açıldığı zaman hangi posizyonda (sol en alt köşe, sol köşeye yaslı, sağ taraf vb..) ayarları yapabildiğimiz özellik.
  • TopMost: Formumuzu tüm pencelerin önünde göstermeye yarayan özellik.
  • Minimumstyle, Maximumstyle, borderFormun tasarımsal özelliklerini ayarlayabileceğimiz özellikleri.

Form olayları

  • Click: Form üzerinde tıklandığı zaman meydana gelecek olay.
  • Cloasing: Form kapanmadan hemen önce gerçekleşecek olay.
  • Form_Load: Form yüklenince gerçekleşecek olaylar.

Form Methodları

  • Show: Formu göstermeye yarar.
  • Hide: Formu gizler. Visible görünümünü kapatmayla aynı işlevi görür.
  • Close:Formu kapatır.

Basit bir form örneği:

visual_studio_basit_birformornegi

İndir

C# Tarih Fonksiyonları

C# Tarih Fonksiyonları

Tarih zaman fonksiyonlarımızı kullanmak için gerekli uzay alanımızı kullanmamız gerekir. Matematik fonksiyonlarında olduğu gibi bunun iki yöntemi vardır. Ya kaynak kodlarımızın başına System.DateTime; uzay alanını eklemek yada aşağıdaki kullanımı tercih etmektir. Bizim size tavsiyemiz aşağıdaki kullanım şeklidir.


DateTime.Fonksiyonismi();

  • DateTime.Compare Karşılaştırma için kullanılır. Karşılaştırılan iki tarih arasında değeler birbirine eşitse 0, birinci ikincisinden büyükse -1, değilse 1 değerini döndürür. Kullanımı:
    // tarih1 -> 2004/01/13 12:20:00 | tarih2 -> 2004/01/13 12:35:00
    DateTime tarih1 = new DateTime(2004, 01, 13, 12, 20, 0);
    DateTime tarih2 = new DateTime(2004, 01, 13, 12, 35, 0);
    MessageBox.Show(Convert.ToString(DateTime.Compare(tarih1,tarih2)));
  • DateTime.DaysInMonth (C# ay gününü veren fonksiyon) C#’da verdiğimiz yıla ve aya göre bize ayın kaç çektiğini gösteren fonksiyondur. Kullanımı: Convert.ToString(DateTime.DaysInMonth(2013,10));
  • DateTime.IsLeapYear (Artık yıl fonksiyonu) 4 yılda bir artık yıl olur yani buda yılın 4’e bölümünden kalanın 0 anlamına gelir. Bu durumu bu fonksiyon ile öğrenip Şubat ayının hangi yıllar ayında 29 çektğini öğrenebiliriz. Kullanımı: DateTime.IsleapYear(2013);
  • DateTime.Parse Tarih ifadesini bize verir. Yukarıdaki örneğimizde ” DateTime tarih1 = new DateTime(2004, 01, 13, 12, 20, 0);” i Parse ile 2004/01/13 12:20:00 şeklinde alabiliriz.
  • TOlongDateString Tarihi uzun bir şekilde göstermeye yarar.
  • TOlongtimeString Zamanı uzun bir şekilde göstermeye yarar.

C# Matematik Fonksiyonları

C# Matematik fonksiyonları aşağıdaki gibi kullanırız(İkinci yöntem ise kaynak kodlarımızın başına Using.Math uzay alanını yazmaktır.).

Math.Fonksiyonismi();

Matematiksel Fonksiyonlar

  • ABS (Mutlak Değer Fonksiyonu): Verilen sayının mutlak değerini almaya yarar. Kullanımı:
    float sayi = 1.4563f;
    int mutlak;
    mutlak = Convert.ToInt16(Math.Abs(sayi));
  • Ceiling: Sayının bir üst değeri verir. Örneğin -12..44 sayısının Ceiling değeri -11 dir. Kullanımı:
    Math.Ceiling(-124…44);
    Çıkış:-11
  • Flor: Ceiling fonksiyonun tersini yaparak sayının bir alt değerini verir. Kullanımı:
    Math.Floor(-12.24242) sonuç-> -13
  • Pi: Pi sayısını veren fonksiyondur. Kullanımı: Math.Pi
  • Cos, Sin ve Tan fonksiyonları: Değerlerini radyan cinsinden belirttiğimzi trigonometrki hesaplamalarda kullanacağımız fonksiyonlardır. Değeri radyana çevirmek: Verdiğimiz değeri Radyana çevirelim. Bunun için pi*derece/180 bunuda C# da kullanmak için Math.PI *derece / 180 dememiz gerekir.
  • Exp: Verilen sayıyı e‘nin kuvveti şeklinde alır.Kullanımı:Math.Exp(5);
  • Log: Verdiğimiz sayının logaritmik değerini hesaplamaya yarar. Birinci parametrede sayıyı ikinci parametrede hangi değere göre log alacağımızı belirtiriz. Kullanımı:
    Math.Log(20,10); // Log10’a göre aldık.
  • Smarth.Log: Doğal logaritmayı hesaplar(Direkt 10 tabanına göre).
  • Max: Tahmin edebileceğiniz gibi gelen parametrelerden büyük olanını döndüren matematik fonksiyonudur. Kullanımı: Math.Max(deger1,deger2,deger3);
  • Min: En küçük değeri döndüren Matematiksel fonksiyondur. Kullanımı: Math.Min(deger1,deger2,deger3);
  • Pow Fonksiyonu: C# da üst alma fonksiyonudur. Bu fonksiyonun bir benzeri C programlamada mevcuttur. Kullanımı: x^y (x üzeri y) Math.Pow(x,y) —
    MessageBox.Show(Convert.ToString(Math.Pow(2, 3))); // Sonuç : 8
  • Sqrt (Kök alma fonksiyonu): Standart kök alma fonksiyonudur. Kullanımı:
    MessageBox.Show(Convert.ToString(Math.Sqrt(25))); // Çıktı: 5


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

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

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{ int sayi;
sayi = Convert.ToInt32(textBox1.Text);
switch (comboBox1.SelectedIndex)
{
case 0: listBox1.Items.Add(Math.Abs(sayi)); break;
case 1: listBox1.Items.Add(Math.Cos(sayi)); break;
case 2: listBox1.Items.Add(Math.Sin(sayi)); break;
case 3: listBox1.Items.Add(Math.Tan(sayi)); break;
case 4: listBox1.Items.Add(Math.Log10(sayi)); break;
case 5: listBox1.Items.Add(Math.Pow(sayi,3)); break;
case 6: listBox1.Items.Add(Math.Sqrt(sayi)); break;
default: break;
}
}
}
}

C# String Fonksiyonlar

String sınıfı içerisinde yer alan fonksiyonlardır. Bu fonksiyonları

string.Fonksionismi();

benzeri bir şekilde kullanırız.

  • Compare: Karşılaştırma fonksiyonudur. Belirtilen strnig değerlerini alfabetik olarak karşılaştırır. Bu karşılaştırma sonucunda şayet iki stringe eşitse 0, birinci string alfabetik olarak ikinci stringden önce geliyorsa -1 ve bu durumun tersi mümkünse 1 döndürür. Kullanımı: string.Compare(“Bilgi”, “Tanrısı”);
  • Concat: Birleştirme fonksiyonudur. Diyelim ki iki adet Textboxımız var ilkinde adını ikincisinde ise soyadını istedik. Bunu Concat Fonksiyonuyle birleştirip tek bir stringe aktarabiliriz. Kullanımı: string.Concat(“Ali”, “Göksel”, “Bektaş”);
  • CopyTo: Bir stringi başka bir stringe kopyalamak için kullanılan fonksiyondur. Stringler değişmez yapılar olduğu için artık bir farkı yoktur. Eskiden bellek tiplerini belirtmeler daha ilkel olduğu için bu yöntem kullanılmaktaydı. Günümüzde str1=str2; ile str=Copy(str2); aynı işlevi gördüğünden gerek kalmamıştır.
  • Endswith & StartWith: Endswith sonu belirttiğimiz string ile biten, StartWith ise başı belirttiğimiz string ile başlayan fonksiyonu belirtir. Kullanımı: str1=”Ali”; string.StartWith(“A”); string.Endswith(i);
  • ToUpper & ToLower: Stringleri tamamen büyük veya tamamen küçük yapan fonksiyonlardır. Kullanımı: string adim = “bilgius”; label1.Text = adim.ToUpper();
  • Join: Bir çok string değerini tek bir string değerine döndürmek için kullanılır. Birleştirmek anlamına gelir.
    string yeniad=”deneme “;
    string adim = “bilgius”;
    string birlestir = “”;
    birlestir = string.Join(” “, adim, yeniad);
    MessageBox.Show(birlestir)
  • Substring: Join fonksiyonun tersini yaparak stringi parçalar.
    string str1=”deneme “;
    string parcalabehcet = str1.Substring(3);
    label1.Text = parcalabehcet;
  • Trim Solundaki ve sağındaki boşlukları kaldırır.
  • TrimEndSonundaki boşlukları kaldırır.
  • TrimStartBaşındaki boşlukları kaldırır.
  • Lenght: String uzunluğunu verir.