String Or Binary Data Would Be Truncated, 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.
🔥 String Or Binary Data Would Be Truncated Hata Çözümü
Hatanın Tam Hali
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ında ki adsoyad alanınızın türü nvarchar(50) ve karakter sınırlaması olarak ta 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
1 2 3 4 5 6 7 8 9 10 11 12 | try { SqlConnection con = new SqlConnection("Data Source=PC;Initial Catalog=test;User ID=sa;Password=123"); con.Open(); SqlCommand com = new SqlCommand("insert into kullanici (adsoyad) Values(@adsoyad)", con); com.Parameters.AddWithValue("@adsoyad", textBox1.Text); com.ExecuteNonQuery(); } catch (SqlException ex) { throw; } |
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 şu an.
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ü SqlException 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
1 2 3 4 5 6 7 8 9 10 11 12 13 | if (textBox1.Text.Trim().Length > 50) { MessageBox.Show("50 karakterden büyük metin girdiniz."); } else { SqlConnection con = new SqlConnection("Data Source=MHG-PC;Initial Catalog=test;User ID=sa;Password=12345"); con.Open(); SqlCommand com = new SqlCommand("insert into kullanici (adsoyad) Values(@adsoyad)", con); com.Parameters.AddWithValue("@adsoyad", textBox1.Text); com.ExecuteNonQuery(); } |
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 ile de textBox1 nesnesi içerisindeki Text(Metin)’in uzunluğunu alıyoruz.
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.
String Or Binary Data Would Be Truncated Makale Özeti
Aslında konunun oldukça basit bir hata olduğunu görebildiğinizi düşünüyorum ve bir daha karşılaştığınızda büyük olasılıkla bir kaynağa ihtiyaç duymadan hatayı gideceğinizi düşünüyorum. Sonuç olarak tabloda bir alan belirlerken o alana girilecek verinin maksimum boyutunu önceden öngörmek yada öngörülemeyen bir alan ise client side/server side kontroller koymakta fayda var.
📚 String Or Binary Data Would Be Truncated Benzer Makaleler
✍ Lütfen olumlu-olumsuz tüm görüşlerinizi bana yorum yada mail yolu ile iletmeyi ihmal etmeyin.
🔗 Sosyal medya kanallarından makaleyi paylaşarak destek olursanız çok sevinirim.
👋 Bir sonraki makalede görüşmek dileğiyle.