{"id":2704,"date":"2026-04-18T22:28:59","date_gmt":"2026-04-18T19:28:59","guid":{"rendered":"https:\/\/www.aydiner.gen.tr\/?p=2704"},"modified":"2026-04-18T22:28:59","modified_gmt":"2026-04-18T19:28:59","slug":"stok-uygulamasi-20-nisan","status":"publish","type":"post","link":"https:\/\/www.aydiner.gen.tr\/index.php\/2026\/04\/18\/stok-uygulamasi-20-nisan\/","title":{"rendered":"stok uygulamas\u0131 20 Nisan"},"content":{"rendered":"<p>SQL Server&#8217;da StokDB veritaban\u0131n\u0131 ve tablolar\u0131n\u0131 olu\u015fturmak.<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\nKategoriler          Urunler\r\n-----------          -------\r\nKategoriID (PK)  \u2190\u2500\u2500 KategoriID (FK)\r\nKategoriAdi          UrunID (PK)\r\n                     UrunAdi\r\n                     Barkod\r\n                     Fiyat\r\n                     StokMiktari\r\n                     EklenmeTarihi\r\n<\/pre>\n<p>SQL Script \u2014 SSMS veya Azure Data Studio&#8217;da \u00e7al\u0131\u015ft\u0131r\u0131n<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n-- 1. Veritaban\u0131 olu\u015ftur\r\nCREATE DATABASE StokDB;\r\nGO\r\n\r\nUSE StokDB;\r\nGO\r\n\r\n-- 2. Kategoriler tablosu\r\nCREATE TABLE Kategoriler (\r\n    KategoriID   INT IDENTITY(1,1) PRIMARY KEY,\r\n    KategoriAdi  NVARCHAR(100) NOT NULL\r\n);\r\nGO\r\n\r\n-- 3. \u00dcr\u00fcnler tablosu\r\nCREATE TABLE Urunler (\r\n    UrunID        INT IDENTITY(1,1) PRIMARY KEY,\r\n    UrunAdi       NVARCHAR(200) NOT NULL,\r\n    Barkod        NVARCHAR(50)  UNIQUE,\r\n    Fiyat         DECIMAL(10,2) NOT NULL DEFAULT 0,\r\n    StokMiktari   INT           NOT NULL DEFAULT 0,\r\n    KategoriID    INT           FOREIGN KEY REFERENCES Kategoriler(KategoriID),\r\n    EklenmeTarihi DATETIME      DEFAULT GETDATE()\r\n);\r\nGO\r\n\r\n-- 4. \u00d6rnek kategoriler\r\nINSERT INTO Kategoriler (KategoriAdi) VALUES\r\n(&#039;Elektronik&#039;),\r\n(&#039;G\u0131da&#039;),\r\n(&#039;Giyim&#039;),\r\n(&#039;K\u0131rtasiye&#039;),\r\n(&#039;Kozmetik&#039;);\r\nGO\r\n\r\n-- 5. \u00d6rnek \u00fcr\u00fcnler\r\nINSERT INTO Urunler (UrunAdi, Barkod, Fiyat, StokMiktari, KategoriID) VALUES\r\n(&#039;Laptop&#039;,         &#039;8680001&#039;, 15000.00, 10, 1),\r\n(&#039;\u015eeker 1kg&#039;,      &#039;8680002&#039;,    25.50, 50, 2),\r\n(&#039;Beyaz G\u00f6mlek&#039;,   &#039;8680003&#039;,   350.00, 30, 3),\r\n(&#039;T\u00fckenmez Kalem&#039;, &#039;8680004&#039;,     5.00,100, 4),\r\n(&#039;\u015eampuan&#039;,        &#039;8680005&#039;,    45.00, 40, 5);\r\nGO\r\n\r\n-- 6. Kontrol sorgusu\r\nSELECT u.UrunID, u.UrunAdi, u.Barkod, u.Fiyat, u.StokMiktari,\r\n       k.KategoriAdi, u.EklenmeTarihi\r\nFROM Urunler u\r\nJOIN Kategoriler k ON u.KategoriID = k.KategoriID;\r\n\r\n<\/pre>\n<p>Visual Studio&#8217;da projeyi kurmak ve SQL Server ba\u011flant\u0131s\u0131n\u0131 test etmek.<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\nStokYonetimi\/\r\n\u251c\u2500\u2500 Forms\/\r\n\u2502   \u251c\u2500\u2500 AnaSayfa.cs          \u2190 Ana men\u00fc\r\n\u2502   \u251c\u2500\u2500 UrunListeFormu.cs    \u2190 Listeleme + Silme\r\n\u2502   \u251c\u2500\u2500 UrunEkleFormu.cs     \u2190 Ekleme\r\n\u2502   \u2514\u2500\u2500 UrunGuncelleFormu.cs \u2190 G\u00fcncelleme\r\n\u251c\u2500\u2500 Helpers\/\r\n\u2502   \u2514\u2500\u2500 DbHelper.cs          \u2190 Veritaban\u0131 ba\u011flant\u0131 s\u0131n\u0131f\u0131\r\n\u2514\u2500\u2500 Program.cs\r\n\r\n<\/pre>\n<p>PM&gt; Install-Package Microsoft.Data.SqlClient<\/p>\n<p>Helpers klas\u00f6r\u00fc olu\u015fturun, i\u00e7ine DbHelper.cs ekleyin<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\nusing Microsoft.Data.SqlClient;\r\n\r\nnamespace StokYonetimi.Helpers\r\n{\r\n    public static class DbHelper\r\n    {\r\n        \/\/ \u26a0\ufe0f Kendi sunucu ad\u0131n\u0131za g\u00f6re de\u011fi\u015ftirin\r\n        private static readonly string ConnectionString =\r\n            &quot;Server=.\\\\SQLEXPRESS; Database=StokDB; Trusted_Connection=True; TrustServerCertificate=True;&quot;;\r\n\r\n        public static SqlConnection GetConnection()\r\n        {\r\n            return new SqlConnection(ConnectionString);\r\n        }\r\n    }\r\n}\r\n\r\n<\/pre>\n<p>Not: Sunucu ad\u0131 i\u00e7in SSMS&#8217;te ba\u011fland\u0131\u011f\u0131n\u0131z ad\u0131 kullan\u0131n.<br \/>\n\u00d6rnek: Server=BILGISAYAR-ADI\\\\SQLEXPRESS<\/p>\n<p>AnaSayfa.cs formunun Load olay\u0131na ekleyin:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\nusing Microsoft.Data.SqlClient;\r\nusing StokYonetimi.Helpers;\r\n\r\nprivate void AnaSayfa_Load(object sender, EventArgs e)\r\n{\r\n    try\r\n    {\r\n        using (var conn = DbHelper.GetConnection())\r\n        {\r\n            conn.Open();\r\n            MessageBox.Show(&quot;\u2705 Veritaban\u0131 ba\u011flant\u0131s\u0131 BA\u015eARILI!&quot;, &quot;Ba\u011flant\u0131 Testi&quot;,\r\n                MessageBoxButtons.OK, MessageBoxIcon.Information);\r\n        }\r\n    }\r\n    catch (Exception ex)\r\n    {\r\n        MessageBox.Show(&quot;\u274c Ba\u011flant\u0131 hatas\u0131: &quot; + ex.Message, &quot;Hata&quot;,\r\n            MessageBoxButtons.OK, MessageBoxIcon.Error);\r\n    }\r\n}\r\n\r\n<\/pre>\n<p>Ana Sayfa Tasar\u0131m\u0131 (AnaSayfa.cs)<\/p>\n<p>Ana Sayfa Tasar\u0131m\u0131 (AnaSayfa.cs)<br \/>\nDesigner&#8217;da \u015fu kontrollar\u0131 ekleyin:<\/p>\n<p>Kontrol Name Text<br \/>\nLabel lblBaslik STOK Y\u00d6NET\u0130M S\u0130STEM\u0130<br \/>\nButton btnUrunler \ud83d\udccb \u00dcr\u00fcn Listesi<br \/>\nButton btnEkle \u2795 Yeni \u00dcr\u00fcn Ekle<br \/>\nButton btnCikis \ud83d\udeaa \u00c7\u0131k\u0131\u015f<br \/>\n\u2705 Saat 2 Kontrol Listesi<br \/>\nWinForms projesi olu\u015fturuldu<br \/>\nMicrosoft.Data.SqlClient paketi y\u00fcklendi<br \/>\nDbHelper.cs olu\u015fturuldu<br \/>\nBa\u011flant\u0131 testi ba\u015far\u0131l\u0131<br \/>\nAna sayfa tasarland\u0131<br \/>\n\u23f1\ufe0f 3. SAAT \u2014 \u00dcr\u00fcn Ekleme Formu<br \/>\n\ud83d\udccc Hedef<br \/>\nUrunEkleFormu.cs ile veritaban\u0131na yeni \u00fcr\u00fcn eklemek.<\/p>\n<p>\ud83c\udfa8 Form Tasar\u0131m\u0131<br \/>\nKontrol Name Text\/\u00d6zellik<br \/>\nLabel \u2014 \u00dcr\u00fcn Ad\u0131:<br \/>\nTextBox txtUrunAdi \u2014<br \/>\nLabel \u2014 Barkod:<br \/>\nTextBox txtBarkod \u2014<br \/>\nLabel \u2014 Fiyat:<br \/>\nTextBox txtFiyat \u2014<br \/>\nLabel \u2014 Stok Miktar\u0131:<br \/>\nTextBox txtStokMiktari \u2014<br \/>\nLabel \u2014 Kategori:<br \/>\nComboBox cmbKategori DropDownStyle: DropDownList<br \/>\nButton btnKaydet \ud83d\udcbe Kaydet<br \/>\nButton btnTemizle \ud83d\uddd1\ufe0f Temizle<br \/>\nButton btnIptal \u2716\ufe0f \u0130ptal<br \/>\n\ud83d\udcbb UrunEkleFormu.cs \u2014 Tam Kod<br \/>\ncsharp<br \/>\nusing System;<br \/>\nusing System.Windows.Forms;<br \/>\nusing Microsoft.Data.SqlClient;<br \/>\nusing StokYonetimi.Helpers;<br \/>\nnamespace StokYonetimi.Forms<br \/>\n{<br \/>\npublic partial class UrunEkleFormu : Form<br \/>\n{<br \/>\npublic UrunEkleFormu()<br \/>\n{<br \/>\nInitializeComponent();<br \/>\n}<br \/>\n\/\/ Form a\u00e7\u0131l\u0131rken kategorileri y\u00fckle<br \/>\nprivate void UrunEkleFormu_Load(object sender, EventArgs e)<br \/>\n{<br \/>\nKategorileriYukle();<br \/>\n}<br \/>\nprivate void KategorileriYukle()<br \/>\n{<br \/>\ntry<br \/>\n{<br \/>\nusing (var conn = DbHelper.GetConnection())<br \/>\n{<br \/>\nconn.Open();<br \/>\nstring sql = &#8220;SELECT KategoriID, KategoriAdi FROM Kategoriler ORDER BY KategoriAdi&#8221;;<br \/>\nusing (var cmd = new SqlCommand(sql, conn))<br \/>\nusing (var reader = cmd.ExecuteReader())<br \/>\n{<br \/>\ncmbKategori.Items.Clear();<br \/>\nwhile (reader.Read())<br \/>\n{<br \/>\ncmbKategori.Items.Add(new<br \/>\n{<br \/>\nID = reader.GetInt32(0),<br \/>\nAd = reader.GetString(1)<br \/>\n});<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\ncmbKategori.DisplayMember = &#8220;Ad&#8221;;<br \/>\ncmbKategori.ValueMember = &#8220;ID&#8221;;<br \/>\n}<br \/>\ncatch (Exception ex)<br \/>\n{<br \/>\nMessageBox.Show(&#8220;Kategori y\u00fckleme hatas\u0131: &#8221; + ex.Message, &#8220;Hata&#8221;,<br \/>\nMessageBoxButtons.OK, MessageBoxIcon.Error);<br \/>\n}<br \/>\n}<br \/>\n\/\/ Kaydet butonu<br \/>\nprivate void btnKaydet_Click(object sender, EventArgs e)<br \/>\n{<br \/>\n\/\/ &#8212;&#8211; Validasyon &#8212;&#8211;<br \/>\nif (string.IsNullOrWhiteSpace(txtUrunAdi.Text))<br \/>\n{<br \/>\nMessageBox.Show(&#8220;\u00dcr\u00fcn ad\u0131 bo\u015f olamaz!&#8221;, &#8220;Uyar\u0131&#8221;,<br \/>\nMessageBoxButtons.OK, MessageBoxIcon.Warning);<br \/>\ntxtUrunAdi.Focus();<br \/>\nreturn;<br \/>\n}<br \/>\nif (!decimal.TryParse(txtFiyat.Text, out decimal fiyat) || fiyat &lt; 0)<br \/>\n{<br \/>\nMessageBox.Show(&#8220;Ge\u00e7erli bir fiyat girin!&#8221;, &#8220;Uyar\u0131&#8221;,<br \/>\nMessageBoxButtons.OK, MessageBoxIcon.Warning);<br \/>\ntxtFiyat.Focus();<br \/>\nreturn;<br \/>\n}<br \/>\nif (!int.TryParse(txtStokMiktari.Text, out int stok) || stok &lt; 0)<br \/>\n{<br \/>\nMessageBox.Show(&#8220;Ge\u00e7erli bir stok miktar\u0131 girin!&#8221;, &#8220;Uyar\u0131&#8221;,<br \/>\nMessageBoxButtons.OK, MessageBoxIcon.Warning);<br \/>\ntxtStokMiktari.Focus();<br \/>\nreturn;<br \/>\n}<br \/>\nif (cmbKategori.SelectedItem == null)<br \/>\n{<br \/>\nMessageBox.Show(&#8220;L\u00fctfen bir kategori se\u00e7in!&#8221;, &#8220;Uyar\u0131&#8221;,<br \/>\nMessageBoxButtons.OK, MessageBoxIcon.Warning);<br \/>\nreturn;<br \/>\n}<br \/>\n\/\/ &#8212;&#8211; Veritaban\u0131na Kaydet &#8212;&#8211;<br \/>\ntry<br \/>\n{<br \/>\n\/\/ Se\u00e7ilen kategorinin ID&#8217;sini al<br \/>\ndynamic seciliKategori = cmbKategori.SelectedItem;<br \/>\nint kategoriId = seciliKategori.ID;<br \/>\nusing (var conn = DbHelper.GetConnection())<br \/>\n{<br \/>\nconn.Open();<br \/>\nstring sql = @&#8221;INSERT INTO Urunler<br \/>\n(UrunAdi, Barkod, Fiyat, StokMiktari, KategoriID)<br \/>\nVALUES<br \/>\n(@UrunAdi, @Barkod, @Fiyat, @StokMiktari, @KategoriID)&#8221;;<br \/>\nusing (var cmd = new SqlCommand(sql, conn))<br \/>\n{<br \/>\ncmd.Parameters.AddWithValue(&#8220;@UrunAdi&#8221;, txtUrunAdi.Text.Trim());<br \/>\ncmd.Parameters.AddWithValue(&#8220;@Barkod&#8221;, string.IsNullOrWhiteSpace(txtBarkod.Text)<br \/>\n? DBNull.Value<br \/>\n: (object)txtBarkod.Text.Trim());<br \/>\ncmd.Parameters.AddWithValue(&#8220;@Fiyat&#8221;, fiyat);<br \/>\ncmd.Parameters.AddWithValue(&#8220;@StokMiktari&#8221;, stok);<br \/>\ncmd.Parameters.AddWithValue(&#8220;@KategoriID&#8221;, kategoriId);<br \/>\ncmd.ExecuteNonQuery();<br \/>\n}<br \/>\n}<br \/>\nMessageBox.Show(&#8220;\u2705 \u00dcr\u00fcn ba\u015far\u0131yla eklendi!&#8221;, &#8220;Ba\u015far\u0131l\u0131&#8221;,<br \/>\nMessageBoxButtons.OK, MessageBoxIcon.Information);<br \/>\nFormTemizle();<br \/>\n}<br \/>\ncatch (SqlException ex) when (ex.Number == 2627) \/\/ Unique constraint (Barkod)<br \/>\n{<br \/>\nMessageBox.Show(&#8220;Bu barkod zaten kay\u0131tl\u0131! Farkl\u0131 bir barkod girin.&#8221;, &#8220;Hata&#8221;,<br \/>\nMessageBoxButtons.OK, MessageBoxIcon.Error);<br \/>\n}<br \/>\ncatch (Exception ex)<br \/>\n{<br \/>\nMessageBox.Show(&#8220;Kay\u0131t hatas\u0131: &#8221; + ex.Message, &#8220;Hata&#8221;,<br \/>\nMessageBoxButtons.OK, MessageBoxIcon.Error);<br \/>\n}<br \/>\n}<br \/>\n\/\/ Temizle butonu<br \/>\nprivate void btnTemizle_Click(object sender, EventArgs e)<br \/>\n{<br \/>\nFormTemizle();<br \/>\n}<br \/>\nprivate void FormTemizle()<br \/>\n{<br \/>\ntxtUrunAdi.Clear();<br \/>\ntxtBarkod.Clear();<br \/>\ntxtFiyat.Clear();<br \/>\ntxtStokMiktari.Clear();<br \/>\ncmbKategori.SelectedIndex = -1;<br \/>\ntxtUrunAdi.Focus();<br \/>\n}<br \/>\n\/\/ \u0130ptal butonu<br \/>\nprivate void btnIptal_Click(object sender, EventArgs e)<br \/>\n{<br \/>\nthis.Close();<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\n\u2705 Saat 3 Kontrol Listesi<br \/>\nUrunEkleFormu tasarland\u0131<br \/>\nKategoriler ComboBox&#8217;a y\u00fckleniyor<br \/>\nValidasyonlar \u00e7al\u0131\u015f\u0131yor<br \/>\n\u00dcr\u00fcn veritaban\u0131na kaydediliyor<br \/>\nBarkod \u00e7ak\u0131\u015fmas\u0131 hatas\u0131 yakalan\u0131yor<br \/>\n\u23f1\ufe0f 4. SAAT \u2014 \u00dcr\u00fcnleri Listeleme &amp; Silme<br \/>\n\ud83d\udccc Hedef<br \/>\nUrunListeFormu.cs ile t\u00fcm \u00fcr\u00fcnleri listelemek ve se\u00e7ilen \u00fcr\u00fcn\u00fc silmek.<\/p>\n<p>\ud83c\udfa8 Form Tasar\u0131m\u0131<br \/>\nKontrol Name \u00d6zellik<br \/>\nTextBox txtArama PlaceholderText: &#8220;\ud83d\udd0d \u00dcr\u00fcn ad\u0131 veya barkod ara&#8230;&#8221;<br \/>\nButton btnAra \ud83d\udd0d Ara<br \/>\nButton btnTumunuGoster \ud83d\udccb T\u00fcm\u00fcn\u00fc G\u00f6ster<br \/>\nDataGridView dgvUrunler FullRowSelect, ReadOnly<br \/>\nButton btnSil \ud83d\uddd1\ufe0f Se\u00e7ileni Sil<br \/>\nButton btnDuzenle \u270f\ufe0f D\u00fczenle<br \/>\nLabel lblToplamKayit \u2014<br \/>\n\ud83d\udcbb UrunListeFormu.cs \u2014 Tam Kod<br \/>\ncsharp<br \/>\nusing System;<br \/>\nusing System.Data;<br \/>\nusing System.Windows.Forms;<br \/>\nusing Microsoft.Data.SqlClient;<br \/>\nusing StokYonetimi.Helpers;<br \/>\nnamespace StokYonetimi.Forms<br \/>\n{<br \/>\npublic partial class UrunListeFormu : Form<br \/>\n{<br \/>\npublic UrunListeFormu()<br \/>\n{<br \/>\nInitializeComponent();<br \/>\n}<br \/>\nprivate void UrunListeFormu_Load(object sender, EventArgs e)<br \/>\n{<br \/>\nDataGridViewAyarla();<br \/>\nUrunleriYukle();<br \/>\n}<br \/>\n\/\/ DataGridView g\u00f6rsel ayarlar\u0131<br \/>\nprivate void DataGridViewAyarla()<br \/>\n{<br \/>\ndgvUrunler.SelectionMode = DataGridViewSelectionMode.FullRowSelect;<br \/>\ndgvUrunler.MultiSelect = false;<br \/>\ndgvUrunler.ReadOnly = true;<br \/>\ndgvUrunler.AllowUserToAddRows = false;<br \/>\ndgvUrunler.AllowUserToDeleteRows = false;<br \/>\ndgvUrunler.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;<br \/>\n}<br \/>\n\/\/ T\u00fcm \u00fcr\u00fcnleri y\u00fckle<br \/>\nprivate void UrunleriYukle(string aramaMetni = &#8220;&#8221;)<br \/>\n{<br \/>\ntry<br \/>\n{<br \/>\nusing (var conn = DbHelper.GetConnection())<br \/>\n{<br \/>\nconn.Open();<br \/>\nstring sql = @&#8221;<br \/>\nSELECT<br \/>\nu.UrunID AS [ID],<br \/>\nu.UrunAdi AS [\u00dcr\u00fcn Ad\u0131],<br \/>\nu.Barkod AS [Barkod],<br \/>\nk.KategoriAdi AS [Kategori],<br \/>\nu.Fiyat AS [Fiyat (\u20ba)],<br \/>\nu.StokMiktari AS [Stok],<br \/>\nu.EklenmeTarihi AS [Eklenme Tarihi]<br \/>\nFROM Urunler u<br \/>\nJOIN Kategoriler k ON u.KategoriID = k.KategoriID<br \/>\nWHERE u.UrunAdi LIKE @Arama OR u.Barkod LIKE @Arama<br \/>\nORDER BY u.UrunAdi&#8221;;<br \/>\nusing (var cmd = new SqlCommand(sql, conn))<br \/>\n{<br \/>\ncmd.Parameters.AddWithValue(&#8220;@Arama&#8221;, &#8220;%&#8221; + aramaMetni + &#8220;%&#8221;);<br \/>\nvar adapter = new SqlDataAdapter(cmd);<br \/>\nvar tablo = new DataTable();<br \/>\nadapter.Fill(tablo);<br \/>\ndgvUrunler.DataSource = tablo;<br \/>\nlblToplamKayit.Text = $&#8221;Toplam: {tablo.Rows.Count} kay\u0131t&#8221;;<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\ncatch (Exception ex)<br \/>\n{<br \/>\nMessageBox.Show(&#8220;Veri y\u00fckleme hatas\u0131: &#8221; + ex.Message, &#8220;Hata&#8221;,<br \/>\nMessageBoxButtons.OK, MessageBoxIcon.Error);<br \/>\n}<br \/>\n}<br \/>\n\/\/ Ara butonu<br \/>\nprivate void btnAra_Click(object sender, EventArgs e)<br \/>\n{<br \/>\nUrunleriYukle(txtArama.Text.Trim());<br \/>\n}<br \/>\n\/\/ T\u00fcm\u00fcn\u00fc G\u00f6ster butonu<br \/>\nprivate void btnTumunuGoster_Click(object sender, EventArgs e)<br \/>\n{<br \/>\ntxtArama.Clear();<br \/>\nUrunleriYukle();<br \/>\n}<br \/>\n\/\/ Enter tu\u015fuyla arama<br \/>\nprivate void txtArama_KeyDown(object sender, KeyEventArgs e)<br \/>\n{<br \/>\nif (e.KeyCode == Keys.Enter)<br \/>\nUrunleriYukle(txtArama.Text.Trim());<br \/>\n}<br \/>\n\/\/ Sil butonu<br \/>\nprivate void btnSil_Click(object sender, EventArgs e)<br \/>\n{<br \/>\nif (dgvUrunler.SelectedRows.Count == 0)<br \/>\n{<br \/>\nMessageBox.Show(&#8220;L\u00fctfen silmek istedi\u011finiz \u00fcr\u00fcn\u00fc se\u00e7in!&#8221;, &#8220;Uyar\u0131&#8221;,<br \/>\nMessageBoxButtons.OK, MessageBoxIcon.Warning);<br \/>\nreturn;<br \/>\n}<br \/>\n\/\/ Se\u00e7ilen sat\u0131rdan ID ve ad\u0131 al<br \/>\nvar seciliSatir = dgvUrunler.SelectedRows[0];<br \/>\nint urunId = Convert.ToInt32(seciliSatir.Cells[&#8220;ID&#8221;].Value);<br \/>\nstring urunAdi = seciliSatir.Cells[&#8220;\u00dcr\u00fcn Ad\u0131&#8221;].Value.ToString();<br \/>\n\/\/ Onay sor<br \/>\nvar sonuc = MessageBox.Show(<br \/>\n$&#8221;&#8216;{urunAdi}&#8217; \u00fcr\u00fcn\u00fcn\u00fc silmek istedi\u011finizden emin misiniz?&#8221;,<br \/>\n&#8220;Silme Onay\u0131&#8221;,<br \/>\nMessageBoxButtons.YesNo,<br \/>\nMessageBoxIcon.Question);<br \/>\nif (sonuc != DialogResult.Yes) return;<br \/>\n\/\/ Veritaban\u0131ndan sil<br \/>\ntry<br \/>\n{<br \/>\nusing (var conn = DbHelper.GetConnection())<br \/>\n{<br \/>\nconn.Open();<br \/>\nstring sql = &#8220;DELETE FROM Urunler WHERE UrunID = @UrunID&#8221;;<br \/>\nusing (var cmd = new SqlCommand(sql, conn))<br \/>\n{<br \/>\ncmd.Parameters.AddWithValue(&#8220;@UrunID&#8221;, urunId);<br \/>\ncmd.ExecuteNonQuery();<br \/>\n}<br \/>\n}<br \/>\nMessageBox.Show(&#8220;\u2705 \u00dcr\u00fcn ba\u015far\u0131yla silindi!&#8221;, &#8220;Ba\u015far\u0131l\u0131&#8221;,<br \/>\nMessageBoxButtons.OK, MessageBoxIcon.Information);<br \/>\nUrunleriYukle(); \/\/ Listeyi yenile<br \/>\n}<br \/>\ncatch (Exception ex)<br \/>\n{<br \/>\nMessageBox.Show(&#8220;Silme hatas\u0131: &#8221; + ex.Message, &#8220;Hata&#8221;,<br \/>\nMessageBoxButtons.OK, MessageBoxIcon.Error);<br \/>\n}<br \/>\n}<br \/>\n\/\/ D\u00fczenle butonu<br \/>\nprivate void btnDuzenle_Click(object sender, EventArgs e)<br \/>\n{<br \/>\nif (dgvUrunler.SelectedRows.Count == 0)<br \/>\n{<br \/>\nMessageBox.Show(&#8220;L\u00fctfen d\u00fczenlemek istedi\u011finiz \u00fcr\u00fcn\u00fc se\u00e7in!&#8221;, &#8220;Uyar\u0131&#8221;,<br \/>\nMessageBoxButtons.OK, MessageBoxIcon.Warning);<br \/>\nreturn;<br \/>\n}<br \/>\nint urunId = Convert.ToInt32(dgvUrunler.SelectedRows[0].Cells[&#8220;ID&#8221;].Value);<br \/>\nvar guncelleFormu = new UrunGuncelleFormu(urunId);<br \/>\nguncelleFormu.ShowDialog();<br \/>\nUrunleriYukle(); \/\/ G\u00fcncelleme sonras\u0131 listeyi yenile<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\n\u2705 Saat 4 Kontrol Listesi<br \/>\nDataGridView \u00fcr\u00fcnleri listeliyor<br \/>\nArama kutusu \u00e7al\u0131\u015f\u0131yor<br \/>\nEnter tu\u015fuyla arama yap\u0131l\u0131yor<br \/>\nSilme onay penceresi \u00e7\u0131k\u0131yor<br \/>\nSilme sonras\u0131 liste yenileniyor<br \/>\n\u23f1\ufe0f 5. SAAT \u2014 \u00dcr\u00fcn G\u00fcncelleme<br \/>\n\ud83d\udccc Hedef<br \/>\nSe\u00e7ilen \u00fcr\u00fcn\u00fcn bilgilerini d\u00fczenleyip veritaban\u0131n\u0131 g\u00fcncellemek.<\/p>\n<p>\ud83c\udfa8 Form Tasar\u0131m\u0131<br \/>\nUrunEkleFormu ile ayn\u0131 kontroller \u2014 sadece ba\u015fl\u0131k ve buton metni farkl\u0131.<\/p>\n<p>Kontrol Name A\u00e7\u0131klama<br \/>\nTextBox txtUrunAdi \u2014<br \/>\nTextBox txtBarkod \u2014<br \/>\nTextBox txtFiyat \u2014<br \/>\nTextBox txtStokMiktari \u2014<br \/>\nComboBox cmbKategori \u2014<br \/>\nButton btnGuncelle \ud83d\udcbe G\u00fcncelle<br \/>\nButton btnIptal \u2716\ufe0f \u0130ptal<br \/>\n\ud83d\udcbb UrunGuncelleFormu.cs \u2014 Tam Kod<br \/>\ncsharp<br \/>\nusing System;<br \/>\nusing System.Windows.Forms;<br \/>\nusing Microsoft.Data.SqlClient;<br \/>\nusing StokYonetimi.Helpers;<br \/>\nnamespace StokYonetimi.Forms<br \/>\n{<br \/>\npublic partial class UrunGuncelleFormu : Form<br \/>\n{<br \/>\nprivate readonly int _urunId;<br \/>\n\/\/ Constructor: g\u00fcncellenecek \u00fcr\u00fcn\u00fcn ID&#8217;si parametre olarak gelir<br \/>\npublic UrunGuncelleFormu(int urunId)<br \/>\n{<br \/>\nInitializeComponent();<br \/>\n_urunId = urunId;<br \/>\n}<br \/>\nprivate void UrunGuncelleFormu_Load(object sender, EventArgs e)<br \/>\n{<br \/>\nKategorileriYukle();<br \/>\nUrunBilgileriniGetir();<br \/>\n}<br \/>\nprivate void KategorileriYukle()<br \/>\n{<br \/>\ntry<br \/>\n{<br \/>\nusing (var conn = DbHelper.GetConnection())<br \/>\n{<br \/>\nconn.Open();<br \/>\nstring sql = &#8220;SELECT KategoriID, KategoriAdi FROM Kategoriler ORDER BY KategoriAdi&#8221;;<br \/>\nusing (var cmd = new SqlCommand(sql, conn))<br \/>\nusing (var reader = cmd.ExecuteReader())<br \/>\n{<br \/>\ncmbKategori.Items.Clear();<br \/>\nwhile (reader.Read())<br \/>\n{<br \/>\ncmbKategori.Items.Add(new<br \/>\n{<br \/>\nID = reader.GetInt32(0),<br \/>\nAd = reader.GetString(1)<br \/>\n});<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\ncmbKategori.DisplayMember = &#8220;Ad&#8221;;<br \/>\ncmbKategori.ValueMember = &#8220;ID&#8221;;<br \/>\n}<br \/>\ncatch (Exception ex)<br \/>\n{<br \/>\nMessageBox.Show(&#8220;Kategori y\u00fckleme hatas\u0131: &#8221; + ex.Message);<br \/>\n}<br \/>\n}<br \/>\n\/\/ Mevcut \u00fcr\u00fcn bilgilerini forma getir<br \/>\nprivate void UrunBilgileriniGetir()<br \/>\n{<br \/>\ntry<br \/>\n{<br \/>\nusing (var conn = DbHelper.GetConnection())<br \/>\n{<br \/>\nconn.Open();<br \/>\nstring sql = @&#8221;SELECT UrunAdi, Barkod, Fiyat, StokMiktari, KategoriID<br \/>\nFROM Urunler WHERE UrunID = @UrunID&#8221;;<br \/>\nusing (var cmd = new SqlCommand(sql, conn))<br \/>\n{<br \/>\ncmd.Parameters.AddWithValue(&#8220;@UrunID&#8221;, _urunId);<br \/>\nusing (var reader = cmd.ExecuteReader())<br \/>\n{<br \/>\nif (reader.Read())<br \/>\n{<br \/>\ntxtUrunAdi.Text = reader[&#8220;UrunAdi&#8221;].ToString();<br \/>\ntxtBarkod.Text = reader[&#8220;Barkod&#8221;] == DBNull.Value<br \/>\n? &#8220;&#8221; : reader[&#8220;Barkod&#8221;].ToString();<br \/>\ntxtFiyat.Text = reader[&#8220;Fiyat&#8221;].ToString();<br \/>\ntxtStokMiktari.Text = reader[&#8220;StokMiktari&#8221;].ToString();<br \/>\n\/\/ Kategoriye ait ComboBox \u00f6\u011fesini se\u00e7<br \/>\nint kategoriId = Convert.ToInt32(reader[&#8220;KategoriID&#8221;]);<br \/>\nfor (int i = 0; i &lt; cmbKategori.Items.Count; i++)<br \/>\n{<br \/>\ndynamic item = cmbKategori.Items[i];<br \/>\nif (item.ID == kategoriId)<br \/>\n{<br \/>\ncmbKategori.SelectedIndex = i;<br \/>\nbreak;<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\ncatch (Exception ex)<br \/>\n{<br \/>\nMessageBox.Show(&#8220;Veri getirme hatas\u0131: &#8221; + ex.Message, &#8220;Hata&#8221;,<br \/>\nMessageBoxButtons.OK, MessageBoxIcon.Error);<br \/>\n}<br \/>\n}<br \/>\n\/\/ G\u00fcncelle butonu<br \/>\nprivate void btnGuncelle_Click(object sender, EventArgs e)<br \/>\n{<br \/>\n\/\/ &#8212;&#8211; Validasyon &#8212;&#8211;<br \/>\nif (string.IsNullOrWhiteSpace(txtUrunAdi.Text))<br \/>\n{<br \/>\nMessageBox.Show(&#8220;\u00dcr\u00fcn ad\u0131 bo\u015f olamaz!&#8221;, &#8220;Uyar\u0131&#8221;,<br \/>\nMessageBoxButtons.OK, MessageBoxIcon.Warning);<br \/>\nreturn;<br \/>\n}<br \/>\nif (!decimal.TryParse(txtFiyat.Text, out decimal fiyat) || fiyat &lt; 0)<br \/>\n{<br \/>\nMessageBox.Show(&#8220;Ge\u00e7erli bir fiyat girin!&#8221;, &#8220;Uyar\u0131&#8221;,<br \/>\nMessageBoxButtons.OK, MessageBoxIcon.Warning);<br \/>\nreturn;<br \/>\n}<br \/>\nif (!int.TryParse(txtStokMiktari.Text, out int stok) || stok &lt; 0)<br \/>\n{<br \/>\nMessageBox.Show(&#8220;Ge\u00e7erli bir stok miktar\u0131 girin!&#8221;, &#8220;Uyar\u0131&#8221;,<br \/>\nMessageBoxButtons.OK, MessageBoxIcon.Warning);<br \/>\nreturn;<br \/>\n}<br \/>\nif (cmbKategori.SelectedItem == null)<br \/>\n{<br \/>\nMessageBox.Show(&#8220;L\u00fctfen bir kategori se\u00e7in!&#8221;, &#8220;Uyar\u0131&#8221;,<br \/>\nMessageBoxButtons.OK, MessageBoxIcon.Warning);<br \/>\nreturn;<br \/>\n}<br \/>\n\/\/ &#8212;&#8211; Veritaban\u0131n\u0131 G\u00fcncelle &#8212;&#8211;<br \/>\ntry<br \/>\n{<br \/>\ndynamic seciliKategori = cmbKategori.SelectedItem;<br \/>\nint kategoriId = seciliKategori.ID;<br \/>\nusing (var conn = DbHelper.GetConnection())<br \/>\n{<br \/>\nconn.Open();<br \/>\nstring sql = @&#8221;UPDATE Urunler SET<br \/>\nUrunAdi = @UrunAdi,<br \/>\nBarkod = @Barkod,<br \/>\nFiyat = @Fiyat,<br \/>\nStokMiktari = @StokMiktari,<br \/>\nKategoriID = @KategoriID<br \/>\nWHERE UrunID = @UrunID&#8221;;<br \/>\nusing (var cmd = new SqlCommand(sql, conn))<br \/>\n{<br \/>\ncmd.Parameters.AddWithValue(&#8220;@UrunAdi&#8221;, txtUrunAdi.Text.Trim());<br \/>\ncmd.Parameters.AddWithValue(&#8220;@Barkod&#8221;, string.IsNullOrWhiteSpace(txtBarkod.Text)<br \/>\n? DBNull.Value<br \/>\n: (object)txtBarkod.Text.Trim());<br \/>\ncmd.Parameters.AddWithValue(&#8220;@Fiyat&#8221;, fiyat);<br \/>\ncmd.Parameters.AddWithValue(&#8220;@StokMiktari&#8221;, stok);<br \/>\ncmd.Parameters.AddWithValue(&#8220;@KategoriID&#8221;, kategoriId);<br \/>\ncmd.Parameters.AddWithValue(&#8220;@UrunID&#8221;, _urunId);<br \/>\ncmd.ExecuteNonQuery();<br \/>\n}<br \/>\n}<br \/>\nMessageBox.Show(&#8220;\u2705 \u00dcr\u00fcn ba\u015far\u0131yla g\u00fcncellendi!&#8221;, &#8220;Ba\u015far\u0131l\u0131&#8221;,<br \/>\nMessageBoxButtons.OK, MessageBoxIcon.Information);<br \/>\nthis.Close();<br \/>\n}<br \/>\ncatch (SqlException ex) when (ex.Number == 2627)<br \/>\n{<br \/>\nMessageBox.Show(&#8220;Bu barkod zaten kay\u0131tl\u0131!&#8221;, &#8220;Hata&#8221;,<br \/>\nMessageBoxButtons.OK, MessageBoxIcon.Error);<br \/>\n}<br \/>\ncatch (Exception ex)<br \/>\n{<br \/>\nMessageBox.Show(&#8220;G\u00fcncelleme hatas\u0131: &#8221; + ex.Message, &#8220;Hata&#8221;,<br \/>\nMessageBoxButtons.OK, MessageBoxIcon.Error);<br \/>\n}<br \/>\n}<br \/>\n\/\/ \u0130ptal butonu<br \/>\nprivate void btnIptal_Click(object sender, EventArgs e)<br \/>\n{<br \/>\nthis.Close();<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\n\u2705 Saat 5 Kontrol Listesi<br \/>\nG\u00fcncelleme formu a\u00e7\u0131l\u0131yor<br \/>\nMevcut \u00fcr\u00fcn bilgileri forma geliyor<br \/>\nKategori do\u011fru se\u00e7ili geliyor<br \/>\nG\u00fcncelleme veritaban\u0131na yans\u0131yor<br \/>\nListe otomatik yenileniyor<br \/>\n\u23f1\ufe0f 6. SAAT \u2014 Son Dokunu\u015flar &amp; Test<br \/>\n\ud83d\udccc Hedef<br \/>\nStok durumuna g\u00f6re renklendirme, kategori bazl\u0131 filtreleme, genel test.<\/p>\n<p>\ud83c\udfa8 \u00d6zellik 1 \u2014 Stok Uyar\u0131s\u0131 (K\u0131rm\u0131z\u0131 Renk)<br \/>\nUrunListeFormu.cs&#8217;e ekleyin \u2014 DataGridView&#8217;in CellFormatting olay\u0131na:<\/p>\n<p>csharp<br \/>\nprivate void dgvUrunler_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)<br \/>\n{<br \/>\nif (e.RowIndex &lt; 0) return;<br \/>\nvar satir = dgvUrunler.Rows[e.RowIndex];<br \/>\nvar stokHucresi = satir.Cells[&#8220;Stok&#8221;];<br \/>\nif (stokHucresi.Value != null &amp;&amp; int.TryParse(stokHucresi.Value.ToString(), out int stok))<br \/>\n{<br \/>\nif (stok == 0)<br \/>\n{<br \/>\n\/\/ Stok yok \u2192 k\u0131rm\u0131z\u0131<br \/>\nsatir.DefaultCellStyle.BackColor = Color.FromArgb(255, 200, 200);<br \/>\nsatir.DefaultCellStyle.ForeColor = Color.DarkRed;<br \/>\n}<br \/>\nelse if (stok &lt; 5)<br \/>\n{<br \/>\n\/\/ Stok az \u2192 sar\u0131<br \/>\nsatir.DefaultCellStyle.BackColor = Color.FromArgb(255, 255, 180);<br \/>\nsatir.DefaultCellStyle.ForeColor = Color.DarkOliveGreen;<br \/>\n}<br \/>\nelse<br \/>\n{<br \/>\nsatir.DefaultCellStyle.BackColor = Color.White;<br \/>\nsatir.DefaultCellStyle.ForeColor = Color.Black;<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\n\ud83d\udcca \u00d6zellik 2 \u2014 Stok \u00d6zet Raporu<br \/>\nAna sayfaya veya liste formuna ekleyebilirsiniz:<\/p>\n<p>csharp<br \/>\nprivate void StokRaporuGoster()<br \/>\n{<br \/>\ntry<br \/>\n{<br \/>\nusing (var conn = DbHelper.GetConnection())<br \/>\n{<br \/>\nconn.Open();<br \/>\nstring sql = @&#8221;<br \/>\nSELECT<br \/>\nCOUNT(*) AS ToplamUrun,<br \/>\nSUM(StokMiktari) AS ToplamStok,<br \/>\nCOUNT(CASE WHEN StokMiktari = 0 THEN 1 END) AS TukenenUrun,<br \/>\nCOUNT(CASE WHEN StokMiktari &lt; 5 AND StokMiktari &gt; 0 THEN 1 END) AS KritikStok<br \/>\nFROM Urunler&#8221;;<br \/>\nusing (var cmd = new SqlCommand(sql, conn))<br \/>\nusing (var reader = cmd.ExecuteReader())<br \/>\n{<br \/>\nif (reader.Read())<br \/>\n{<br \/>\nlblToplamUrun.Text = $&#8221;Toplam \u00dcr\u00fcn: {reader[&#8220;ToplamUrun&#8221;]}&#8221;;<br \/>\nlblToplamStok.Text = $&#8221;Toplam Stok: {reader[&#8220;ToplamStok&#8221;]}&#8221;;<br \/>\nlblTukenenUrun.Text = $&#8221;T\u00fckenen: {reader[&#8220;TukenenUrun&#8221;]}&#8221;;<br \/>\nlblKritikStok.Text = $&#8221;Kritik Stok: {reader[&#8220;KritikStok&#8221;]}&#8221;;<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\n}<br \/>\ncatch (Exception ex)<br \/>\n{<br \/>\nMessageBox.Show(&#8220;Rapor hatas\u0131: &#8221; + ex.Message);<br \/>\n}<br \/>\n}<br \/>\n\ud83e\uddea Final Test Senaryolar\u0131<br \/>\n# Test Ad\u0131m\u0131 Beklenen Sonu\u00e7<br \/>\n1 Uygulama ba\u015flat DB ba\u011flant\u0131s\u0131 ba\u015far\u0131l\u0131<br \/>\n2 Yeni \u00fcr\u00fcn ekle (bo\u015f ad ile) &#8220;\u00dcr\u00fcn ad\u0131 bo\u015f olamaz!&#8221; uyar\u0131s\u0131<br \/>\n3 Ayn\u0131 barkodla 2. \u00fcr\u00fcn ekle &#8220;Barkod zaten kay\u0131tl\u0131!&#8221; hatas\u0131<br \/>\n4 Ge\u00e7ersiz fiyat gir (harf) &#8220;Ge\u00e7erli bir fiyat girin!&#8221; uyar\u0131s\u0131<br \/>\n5 \u00dcr\u00fcn ekle (ge\u00e7erli verilerle) &#8220;Ba\u015far\u0131yla eklendi!&#8221; mesaj\u0131<br \/>\n6 Listede \u00fcr\u00fcn\u00fc arayla Sadece e\u015fle\u015fenler gelsin<br \/>\n7 \u00dcr\u00fcn\u00fc d\u00fczenle &amp; kaydet Listede de\u011fi\u015fsin<br \/>\n8 \u00dcr\u00fcn\u00fc sil (Evet ile) Listeden kalks\u0131n<br \/>\n9 \u00dcr\u00fcn\u00fc sil (Hay\u0131r ile) Silinmesin<br \/>\n10 Stok=0 olan \u00fcr\u00fcn K\u0131rm\u0131z\u0131 renk g\u00f6sterin<br \/>\n\u2705 Saat 6 Kontrol Listesi<br \/>\nStok renklendirme \u00e7al\u0131\u015f\u0131yor (k\u0131rm\u0131z\u0131\/sar\u0131\/beyaz)<br \/>\nStok raporu do\u011fru say\u0131lar\u0131 g\u00f6steriyor<br \/>\nT\u00fcm test senaryolar\u0131 ge\u00e7ti<br \/>\nUygulama hatas\u0131z \u00e7al\u0131\u015f\u0131yor<br \/>\n\ud83d\udcc1 SQL Script \u2014 H\u0131zl\u0131 Referans<br \/>\nsql<br \/>\n&#8212; T\u00fcm \u00fcr\u00fcnleri listele<br \/>\nSELECT u.*, k.KategoriAdi FROM Urunler u JOIN Kategoriler k ON u.KategoriID = k.KategoriID;<br \/>\n&#8212; T\u00fckenen \u00fcr\u00fcnler<br \/>\nSELECT * FROM Urunler WHERE StokMiktari = 0;<br \/>\n&#8212; Kritik stok (5&#8217;ten az)<br \/>\nSELECT * FROM Urunler WHERE StokMiktari &gt; 0 AND StokMiktari &lt; 5;<br \/>\n&#8212; Kategoriye g\u00f6re \u00fcr\u00fcn say\u0131s\u0131<br \/>\nSELECT k.KategoriAdi, COUNT(u.UrunID) AS UrunSayisi<br \/>\nFROM Kategoriler k LEFT JOIN Urunler u ON k.KategoriID = u.KategoriID<br \/>\nGROUP BY k.KategoriAdi;<br \/>\n&#8212; En pahal\u0131 5 \u00fcr\u00fcn<br \/>\nSELECT TOP 5 UrunAdi, Fiyat FROM Urunler ORDER BY Fiyat DESC;<br \/>\n\ud83d\udea8 S\u0131k Yap\u0131lan Hatalar &amp; \u00c7\u00f6z\u00fcmleri<br \/>\nHata Sebep \u00c7\u00f6z\u00fcm<br \/>\nCannot open server Sunucu ad\u0131 yanl\u0131\u015f Connection string&#8217;de server ad\u0131n\u0131 kontrol et<br \/>\nLogin failed Windows auth \u00e7al\u0131\u015fm\u0131yor Trusted_Connection=True ekle<br \/>\nSSL connection error Sertifika sorunu TrustServerCertificate=True ekle<br \/>\nObject reference null ComboBox se\u00e7ilmedi SelectedItem == null kontrol\u00fc ekle<br \/>\nInput string not in correct format TryParse kullan\u0131lmad\u0131 decimal.TryParse ile kontrol et<br \/>\nDuplicate key error Ayn\u0131 barkod SqlException.Number == 2627 yakala<\/p>\n","protected":false},"excerpt":{"rendered":"<p>SQL Server&#8217;da StokDB veritaban\u0131n\u0131 ve tablolar\u0131n\u0131 olu\u015fturmak. Kategoriler Urunler &#8212;&#8212;&#8212;&#8211; &#8212;&#8212;- KategoriID (PK) \u2190\u2500\u2500 KategoriID (FK) KategoriAdi UrunID (PK) UrunAdi [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2327,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,180],"tags":[],"class_list":["post-2704","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-programlama","category-sql"],"_links":{"self":[{"href":"https:\/\/www.aydiner.gen.tr\/index.php\/wp-json\/wp\/v2\/posts\/2704","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.aydiner.gen.tr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.aydiner.gen.tr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.aydiner.gen.tr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.aydiner.gen.tr\/index.php\/wp-json\/wp\/v2\/comments?post=2704"}],"version-history":[{"count":1,"href":"https:\/\/www.aydiner.gen.tr\/index.php\/wp-json\/wp\/v2\/posts\/2704\/revisions"}],"predecessor-version":[{"id":2705,"href":"https:\/\/www.aydiner.gen.tr\/index.php\/wp-json\/wp\/v2\/posts\/2704\/revisions\/2705"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.aydiner.gen.tr\/index.php\/wp-json\/wp\/v2\/media\/2327"}],"wp:attachment":[{"href":"https:\/\/www.aydiner.gen.tr\/index.php\/wp-json\/wp\/v2\/media?parent=2704"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.aydiner.gen.tr\/index.php\/wp-json\/wp\/v2\/categories?post=2704"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.aydiner.gen.tr\/index.php\/wp-json\/wp\/v2\/tags?post=2704"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}