Kolay Portal XL, projemizin alt yapısı Component Services üzerinde tuttuğumuz Com objelerinden oluşuyor. Neden Com objesi yaptığımız, güvenli olması ve süper hızlı çalışmasında gizli olsa da bu başka bir yazının konusu.
İçerik sistemleri ile uğraşmış veya en azından uzun metinleri saklama ihtiyacı duymuşsanız eski moda Text, yeni moda Varchar(MAX) alanları kullanmışsınızdır. Büyük çapta verileri saklamak için oldukça yararlı oldukları kadar bazen baş ağrıtabiliyorlar. SQL 2000 zamanlarında Text alanlara veri girmek biraz meşakkatli idi, veriyi parçalı olarak içeri atmamız gerekebiliyordu ki bu da başka bir hikaye. Şimdilerde (aslında 2005'den beri diyebiliriz herhalde) direk tek hareketle içeri atmamızda pek sorunla karşılaşmıyoruz. Bazı durumlar hariç...
Kuralına uyulmadığı zaman teknoloji sizi bizi biryere kadar idare edebiliyor, lâkin biryerde bir şekilde mutlaka açık veriyor ve ilginizi bekliyor. İçeriklerde, e-ticaret sistemimizdeki ürün detay bilgilerinde büyük çapta makale girişlerinde hatalar almaya başladık. Bunların bir kısmını bağlantı şeklimizi SQLNCLI10 (Sql Server 2008) olarak düzenleyerek veri girişlerine devam ederek atlatsak da, daha büyük veri girişi ihtiyacının ortaya çıkması beklenen birşeydi. (kaçınılmaz son)
Bir müşterimizden büyük boy içerik giremediklerine dair şikayet gelince, incelemeye başladık. Sistem "Parameter object is improperly defined. Inconsistent or incomplete information was provided" olarak bir hata veriyordu, kısa ve öz olarak Sql prosedürlerimizi çağırdığımız komutun daha iyi düzenlenmesini istiyordu. Sorunun aslında tablo üzerindeki varchar(max) alan(lar)dan kaynaklı olduğunu bilsek de Com objemizin içine dalıp debug etme yoluyla başka bir isteği var mı diye baktık. Sonrasında biraz araştırma ile bu tür alanlar için Microsoft'un yaklaşımının boyut tanımlanırken -1 verilmesi olduğunu anladık. Gerçektende command.parameters("@Content").Size=-1 şeklindeki tanımlama sonrasında gayet başarılı bir şekilde işlemler tamamlandı. (huzura kavuştuk)
Sözün özü: Varchar(max) alanlar için komutlarınızda boyut tanımlaması yapın ve -1 olarak değerini verin.
Kasmıştık, aşmıştık problemi tabii..
Selam ile...
Mehmet D.