C# Float Sorunu
-
Arkadaşlar, sorunu araştırdım fakat henüz çözemedim.
Bir tane textbox var bundan gelen değeri request.form ile alıyorum
float fltFiyati = 0;
String strFiyati = Request.Form["fiyati"];
if (String.IsNullOrEmpty(strFiyati) == true)
{
fltFiyati = float.Parse(strFiyati)
}
strFiyati = fltFiyati.ToString();
... Devam eden işlemler vs..
Veritabanına eklerken
SqlCommand cmdSQL = new SqlCommand("INSERT INTO tblDemirbaslar (urun_adi, cinsi, yeri, fiyati, aciklama) VALUES ('" + strUrun_Adi + "', '" + strCinsi + "', '" + strYeri + "', '" + strFiyati + "', '" + strAciklama + "')", bag);
Fakat hata vermektedir.
Error converting data type varchar to float.
Yardımcı olabilir misiniz? -
insert kodundaki strFiyati nın önündeki ve arkasındaki tek tırnakları silip dener misin
-
Yok hocam, sql hatası verdi.
Özetle, float türünde gelen bir değeri sql'de float alanına girmek istiyorum.
-
hocam teamviewer id pass yolla özelden bakayım
-
ontedi bunu yazdı
Yok hocam, sql hatası verdi.
Özetle, float türünde gelen bir değeri sql'de float alanına girmek istiyorum.
abi sen böyle yapmamışsın ki ama,
float ı stringe çevirip db ye string olarak kaydetmişsin.
-
edit
-
parameter kullan hocam. hatta bunu alışkanlık haline getir.
ayrıca eğer yazı giriyorsan ' işaretini kullan, değilse kullanma.
db de fiyati bölümünün değişkenini kontrol et.
str fiyatında "." kullanıyorsa virgül yap, virgül kullanılıyorsa nokta yap.
parameter kullanırsan da bu tür şeyleri kendi halleder ;) -
çevirmeyi şu şekilde yap muhtemelen nokta-virgülle ilgili bir hata var
fltFiyati = float.Parse(strFiyati CultureInfo.InvariantCulture);
ve sql kodunda da strfiyati yerine fltFiyati nı kullan (ama dediğim gibi tek tırnaklar olmayacak çünkü ifade metin türü değil)
bir de bu işi parametrelerle yapman daha kolay ve sağlıklı olur
-
fltFiyati = float.Parse(strFiyati) --> burada aldığın değeri float a çevirmişsin strFiyati = fltFiyati.ToString(); --> burada tekrar float değerini stringe çevirip bu değeri veritabanına yollamışsın Eğer veritabanında float olarak belirtiysen "INSERT INTO tblDemirbaslar (urun_adi, cinsi, yeri, fiyati, aciklama) VALUES ('" + strUrun_Adi + "', '" + strCinsi + "', '" + strYeri + "',
'" + fltFiyati + "', '" + strAciklama + "')" olarak
varchar olarak belitrtiysen "INSERT INTO tblDemirbaslar (urun_adi, cinsi, yeri, fiyati, aciklama) VALUES ('" + strUrun_Adi + "', '" + strCinsi + "', '" + strYeri + "', '" + strFiyati + "', '" + strAciklama + "')" olarak kullanmalısın. yani hatayı veritabanına değeri string olarak yolladığın için alıyorsun -
float fltFiyati = 0; if (String.IsNullOrEmpty(strFiyati) == false) { strFiyati = strFiyati.Replace(",", "."); fltFiyati = float.Parse(strFiyati, System.Globalization.CultureInfo.InvariantCulture); } Response.Write(fltFiyati);
Şimdi arkadaşlar. Gelen değeri ekrana yazdırmak istediğimde Şöyle bir şey karşıma çıkıyor
Mesela metin kutusuna 14.78 gibi bir şey yazıyorum sonuç olarak ekranda bana 14,78 olarak çıktı vermektedir.
Oradaki replace işe yaramıyor galiba.
-
hocam oradaki cultur olayı senin bilgisayarında yüklü olan dilin özelliğine göre şekil alır. biz tam olmayan sayılar için virgül kullandığımız için virgül görüyoruz. eğer bir amerkalı deneseydi nokta görürdü. kodda problem yok. illa ekrana virgül yazdıracaksan oradaki parse ı sil