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