ASP .NET Core'da Areas üzerinden çalışma yaparken bazı sorunlar ile karşılaştım. Bu yaşadığım sorunlardan biri ViewModel tanımlama sorunuydu. Şöyleki projemde ...
Conversion Failed When Converting The Nvarchar Value 'xxxx' to Data Type Int Hatası Çözümü
SQL Server'da önceden oluşturulmuş olan bir view'de bir zaman sonra veri getiremediğini ve Conversion Failed When Converting The Nvarchar Value ' 442901' to Data Type Int şeklinde bir hata aldığını gördüm. View üzerinde birçok alan olduğu için de hangi alandan kaynaklı olabileceğini bulmak kolay olmayabiliyor. Bu hata tahmin edeceğimiz üzere nvarchar tipindeki veriyi int tipine çevirmeye çalışırken yaşanıyor. Normal koşullarda çevirip hatasız olarak yazmasını bekleriz. Fakat gelen veri ' 442901' olduğunda dönüştürme işlemi yapamadığı gibi tüm listeyi etkileyerek hata vermektedir. Sayısının başında boşluk karakter içerdiği için de int tipine dönüştüremiyor. Bu hatayı en basit şekilde çözmenin bazı yolları var.
CAST Kaynaklı Hatanın Çözümü
En başta yapılması gereken hata aldığınız yerdeki sorguyu incelemektir. Sorgu içerisinde CAST işleminin yapıldığı kısma dikkat edilmelidir. Buradaki farklı durumlardan kaynaklı hata alınabilmektedir.
CAST işlemi yapmadan önce gelen veriyi RTRIM, LTRIM veya TRIM fonksiyonları ile temizleyip sonrasında işleme alınmalıdır. Bu durumdan önce de gelen veri boş olup olmama durumu kontrol edilebilir. Bu sayede daha sağlıklı bir sonuç alabilirsiniz. Eğer veri boş ise veriyi dönüştürme işlemi yapmadan varsayılan olarak 0 değeri atayabilirsiniz. ISNULL(data, '0') kullanımı ile gelen data boş ise 0 değerini göstersin diyebilirsiniz. 0 yazmak yerine dönüştürme yapmadan NULL olarak görünmesini sağlayabilirsiniz.
Hatayı Çözme İşlemi
Hatayı çözme işlemi sırasında SQL Server Profiler'ı kullanarak sorgudaki adımları inceleyerek hatanın sebebini tespit edebilirsiniz.
Sorunu View'de Yaşadıysanız
View'de bu durumu yaşadıysanız view'deki alanları nvchar tipine dönüştürebilirsiniz. Böylelikle hata almazsınız. Fakat bu durum pek mantıklı ve uygun olmayacaktır.
Umarım faydalı olmuştur. iyi çalışmalar dilerim.
Yorum yapabilmek için giriş yapmalısınız. Giriş yapmak için tıklayınız.