String Or Binary Data Would Be Truncated Hatasının Çözümü

Bu hata veritabanı ile uygulama geliştirenlerin karşısına çıkan ama zamanla bu hata ile karşılaşıldığında hmm tamam deyip çözeceğiniz bir sorundur bu sorunu uygulama içerisinde nasıl aşarız bunlara değinmeye çalışacağız.

Hata
String or binary data would be truncated. The statement has been terminated.

Bu hatanın anlamı veri tabanında belirtmiş olduğunuz alanın sınırı aşıldı demektir yani veritabanındak adsoyad alanınızın türü nvarchar(50) ve karakter sınırlaması olarakda 50 karakter olarak tanımlandığını varsayalım uygulama üzerinden veri girişinde 50 karakteri aşan bir adsoyad girildiğinde yukarıdaki hatayla kaşılacaksınız. bu hatayı aşmak için ise hemen çözümlere geçelim.

Bilgi
Örneklerimi SQLSERVER Üzerinden yapıcağım için farklı bir veritabanı yazılımı kullanıyorsanız belirtmiş olduğum alan türü yok diye şaşırmayın hangi veritabanını kullanıyorsanız yorum kısmına yazarsanız yardımcı olmaya çalışırım

Çözüm 1

Herkesin kolaya kaçtığı ama benim kesinlikle önermediğim bir yöntem olan nvarchar(MAX) yöntemi ile maximum karakter girişine izin verilmektedir ama büyük projelerde hiç önermediğim bir yöntemdir bu.

Çözüm 2

Bu örnekte ise ilk bakıldığında hiçbir sorun gözükmüyor gibi evet aslında 50 karaktere kadar olan metinlerde bir problem yok 🙂 fakat 50 karakteri aştığımızda veritabanındaki alan türünü nvarchar(50) 50 karakter ile sınırlamıştık. Sizi sevmeyen, çekemeyen açığınızı arayanlara çok iyi bir malzeme vermiş oldunuz şuan bu engeli aşmak için 2.Çözüm örneğindeki gibi try catch blokları arasına alarak hatayı engelleyebilirsiniz fakat bu şekilde hata verilmediği gibi işlemde yapılmıyor catch blokları arasına MessageBox.Show(“Uzun metin girdiniz”); gibi bir yazımda yanlış olur çünkü SqlExcetion ile 100’lerce farklı hata verme olasılığı vardır örnek olarak veritabanına bağlanmadığında bile mesaj ile uzun metin girdiniz demesi ne kadar mantıklı olabilir birde siz düşünün.

Çözüm 3

Benim önerebileceğim yöntem ise budur. Çünkü hem tam olarak hatanın nereden kaynaklandığını kullanıcıya belirtiyorsunuz hemde patlama olasılığını en aza indiriyorsunuz. if koşulunda Trim() metoduyla soldaki ve sağdaki boşlukları atıp Length ilede textBox1 nesnesi içerisindeki Text(Metin)’in uzunluğunu alıyoruz ve 50’den büyükse if koşulu çalışıp messagebox ile “50 karakterden uzun metin girdiniz.” uyarısı verilecek ve işlem yapmayacak 50 karakter altında metin girdiğinde else koşulu çalışıp işleminiz yapılacak.

Bunlar da hoşunuza gidebilir...

Bir Cevap Yazın