• 04-07-2025, 20:27:07
    #10
    BigCoder adlı üyeden alıntı: mesajı görüntüle
    Hazırda mevcut olan System.Data ve System.Data.SqlClient kütüphanelerini projeye ekleyip yanlış/eksik kodlama ile bu işler olmuyor.


    1. Bağlantı Yönetimi Sorunu (Connection Leak Riski)

    • baglan adında sınıfa ait bir SqlConnection örneği tutuluyor, ama:
      • BaglantiAc() metodu bağlantıyı açıyor ama BaglantiKapat() manuel çağrılmadıkça kapatılmıyor.
      • Her VeriEkle, VeriGuncelle, TabloAra vb. metot using bloğuyla açılıp kapanmıyor; bu da bağlantı sızıntısına sebep olur.
    • Çözüm: using bloğu ile geçici bağlantı oluşturulmalı veya bağlantı havuzu mantığı düzgün oturtulmalı.

    2. SQL Injection Riski

    • TabloGetir ve TabloSil, TabloEkle gibi metotlarda tablo adı doğrudan SQL'e gömülüyor:
      string cmdText = "SELECT * FROM [" + tabloAdi + "]";
      • Eğer Regex ile kısıtlama yapılmamışsa bu durum ciddi bir SQL Injection açığı oluşturur.
      • TabloAra metodu kısmen güvenli (Regex kontrolü ve parametre kullanımı var), ama bu diğerleri için eksik.

    3. Exception Handling Kötü Kullanımı

    • Her catch bloğunda hata mesajı yalnızca SqlHataKontrol içine yazılıyor, fakat exception fırlatılmıyor veya loglanmıyor. Bu da hataların izlenmesini zorlaştırır.

    4. Aşırı Sorumluluk (SRP - Single Responsibility Violation)

    • TrSql sınıfı:
      • Bağlantıyı yönetiyor.
      • Veri işliyor (Insert/Update/Delete).
      • Tabloları oluşturuyor/siliyor.
      • Hata mesajı tutuyor.
      • Yani hem servis hem bağlantı yöneticisi hem hata takipçisi olmuş.
    • Çözüm: Repository ve ConnectionManager gibi ayrı sorumluluklara bölünmeli.

    5. Durum Bağımlılığı (Statefulness)

    • Sınıf this._sqlDurum bayrağına çok bağlı. Bu, programı tahmin edilmesi zor hale getirir.
    • Örneğin bağlantı durumu açılıp kapatıldığında _sqlDurum senkronize kalmayabilir.
    Bence yaşına göre iyi ilerliyor adım adım o sorunları kapatır 11. sınıfa gidiyor
  • 04-07-2025, 20:27:24
    #11
    BigCoder adlı üyeden alıntı: mesajı görüntüle
    Hazırda mevcut olan System.Data ve System.Data.SqlClient kütüphanelerini projeye ekleyip yanlış/eksik kodlama ile bu işler olmuyor.


    1. Bağlantı Yönetimi Sorunu (Connection Leak Riski)

    • baglan adında sınıfa ait bir SqlConnection örneği tutuluyor, ama:
      • BaglantiAc() metodu bağlantıyı açıyor ama BaglantiKapat() manuel çağrılmadıkça kapatılmıyor.
      • Her VeriEkle, VeriGuncelle, TabloAra vb. metot using bloğuyla açılıp kapanmıyor; bu da bağlantı sızıntısına sebep olur.
    • Çözüm: using bloğu ile geçici bağlantı oluşturulmalı veya bağlantı havuzu mantığı düzgün oturtulmalı.

    2. SQL Injection Riski

    • TabloGetir ve TabloSil, TabloEkle gibi metotlarda tablo adı doğrudan SQL'e gömülüyor:
      string cmdText = "SELECT * FROM [" + tabloAdi + "]";
      • Eğer Regex ile kısıtlama yapılmamışsa bu durum ciddi bir SQL Injection açığı oluşturur.
      • TabloAra metodu kısmen güvenli (Regex kontrolü ve parametre kullanımı var), ama bu diğerleri için eksik.

    3. Exception Handling Kötü Kullanımı

    • Her catch bloğunda hata mesajı yalnızca SqlHataKontrol içine yazılıyor, fakat exception fırlatılmıyor veya loglanmıyor. Bu da hataların izlenmesini zorlaştırır.

    4. Aşırı Sorumluluk (SRP - Single Responsibility Violation)

    • TrSql sınıfı:
      • Bağlantıyı yönetiyor.
      • Veri işliyor (Insert/Update/Delete).
      • Tabloları oluşturuyor/siliyor.
      • Hata mesajı tutuyor.
      • Yani hem servis hem bağlantı yöneticisi hem hata takipçisi olmuş.
    • Çözüm: Repository ve ConnectionManager gibi ayrı sorumluluklara bölünmeli.

    5. Durum Bağımlılığı (Statefulness)

    • Sınıf this._sqlDurum bayrağına çok bağlı. Bu, programı tahmin edilmesi zor hale getirir.
    • Örneğin bağlantı durumu açılıp kapatıldığında _sqlDurum senkronize kalmayabilir.
    Evet çoğu durumun farkındayım fakat dediğim gibi bu proje daha ilk versiyonu eklemeleri yapıcam şuan ileri bir düzeyde değil bu seviye gende yorumun için teşekkür ederim