Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Range Validator da convert sorunu

Konu, 'ASP.NET / Silverlight / Moonlight' kısmında ercanfb tarafından paylaşıldı.

  1. ercanfb

    ercanfb Üye

    Kayıt:
    20 Şubat 2007
    Mesajlar:
    174
    Beğenilen Mesajlar:
    0
    Merhaba

    çalışan bir insert formum vardı. Dedim buna validatorlar ekliim. Ama başıma iş aldım :) puan alanını databasede smallint olarak tutuyorum. Range Validatorda da 0 ile 100 arası bi deger girilip girilmedigini kontrol ettirmek istemistim fakat şöyle bir hata aldım:

    String olan parametre değeri Int16 değerine dönüştürülemedi.

    aspx sayfasındaki validator kontrolumun oldugu kısım:
    Kod:
     
    [COLOR=#0000ff][COLOR=#0000ff]<[COLOR=#a31515][COLOR=#a31515]tdstyle[COLOR=#0000ff][COLOR=#0000ff]="background-color: [COLOR=#0000ff][COLOR=#0000ff]#ffcc00">[COLOR=#0000ff][COLOR=#0000ff]<[COLOR=#a31515][COLOR=#a31515]asp[COLOR=#0000ff][COLOR=#0000ff]:[COLOR=#a31515][COLOR=#a31515]TextBoxID[COLOR=#0000ff][COLOR=#0000ff]="puan"runat[COLOR=#0000ff][COLOR=#0000ff]="server"></[COLOR=#a31515][COLOR=#a31515]asp[COLOR=#0000ff][COLOR=#0000ff]:[COLOR=#a31515][COLOR=#a31515]TextBox[COLOR=#0000ff][COLOR=#0000ff]>&nbsp;[COLOR=#0000ff][COLOR=#0000ff]<[COLOR=#a31515][COLOR=#a31515]asp[COLOR=#0000ff][COLOR=#0000ff]:[COLOR=#a31515][COLOR=#a31515]RangeValidatorID[COLOR=#0000ff][COLOR=#0000ff]="RangeValidator1"runat[COLOR=#0000ff][COLOR=#0000ff]="server"ControlToValidate[COLOR=#0000ff][COLOR=#0000ff]="puan"Display[COLOR=#0000ff][COLOR=#0000ff]="Dynamic"ErrorMessage[COLOR=#0000ff][COLOR=#0000ff]="0-100 arası bir değer girilmeli"MaximumValue[COLOR=#0000ff][COLOR=#0000ff]="100"MinimumValue[COLOR=#0000ff][COLOR=#0000ff]="0"Type[COLOR=#0000ff][COLOR=#0000ff]="Integer"></[COLOR=#a31515][COLOR=#a31515]asp[COLOR=#0000ff][COLOR=#0000ff]:[COLOR=#a31515][COLOR=#a31515]RangeValidator[COLOR=#0000ff][COLOR=#0000ff]>
    [COLOR=#0000ff][COLOR=#0000ff]</[COLOR=#a31515][COLOR=#a31515]td[COLOR=#0000ff][COLOR=#0000ff]>
    [COLOR=#0000ff] 
    [COLOR=#0000ff][COLOR=#0000ff]bu da insert ettirdigim cs sayfasındaki kodum:
    [COLOR=#0000ff] 
    [COLOR=#0000ff][COLOR=#0000ff][COLOR=#2b91af][COLOR=#2b91af]SqlConnection con = [COLOR=#0000ff][COLOR=#0000ff]new[COLOR=#2b91af][COLOR=#2b91af]SqlConnection([COLOR=#a31515][COLOR=#a31515]"Data Source=****;Initial Catalog=****;Persist Security Info=True;User ID=****;Password=****");
    [COLOR=#2b91af][COLOR=#2b91af]SqlCommand sorgu = [COLOR=#0000ff][COLOR=#0000ff]new[COLOR=#2b91af][COLOR=#2b91af]SqlCommand();
    sorgu.Connection = con;
    sorgu.CommandType = [COLOR=#2b91af][COLOR=#2b91af]CommandType.StoredProcedure;
    sorgu.CommandText = [COLOR=#a31515][COLOR=#a31515]"sp_FilmEkle";
    sorgu.Parameters.Add([COLOR=#a31515][COLOR=#a31515]"fadi", [COLOR=#2b91af][COLOR=#2b91af]SqlDbType.VarChar).Value = filmadi.Text;
    sorgu.Parameters.Add([COLOR=#a31515][COLOR=#a31515]"fyili", [COLOR=#2b91af][COLOR=#2b91af]SqlDbType.SmallInt).Value = yil.Text;
    sorgu.Parameters.Add([COLOR=#a31515][COLOR=#a31515]"fsuresi", [COLOR=#2b91af][COLOR=#2b91af]SqlDbType.SmallInt).Value = sure.Text;
    sorgu.Parameters.Add([COLOR=#a31515][COLOR=#a31515]"ftag", [COLOR=#2b91af][COLOR=#2b91af]SqlDbType.VarChar).Value = tagline.Text;
    sorgu.Parameters.Add([COLOR=#a31515][COLOR=#a31515]"fbyeri", [COLOR=#2b91af][COLOR=#2b91af]SqlDbType.VarChar).Value = bulunduguyer.Text;
    sorgu.Parameters.Add([COLOR=#a31515][COLOR=#a31515]"fpuan", [COLOR=#2b91af][COLOR=#2b91af]SqlDbType.SmallInt).Value = puan.Text;
    sorgu.Parameters.Add([COLOR=#a31515][COLOR=#a31515]"fyorum", [COLOR=#2b91af][COLOR=#2b91af]SqlDbType.VarChar).Value = yorum.Text;
    sorgu.Parameters.Add([COLOR=#a31515][COLOR=#a31515]"fdub", [COLOR=#2b91af][COLOR=#2b91af]SqlDbType.TinyInt).Value = dublaj.Text;
    sorgu.Parameters.Add([COLOR=#a31515][COLOR=#a31515]"forj", [COLOR=#2b91af][COLOR=#2b91af]SqlDbType.TinyInt).Value = orijinal.Text;
    sorgu.Parameters.Add([COLOR=#a31515][COLOR=#a31515]"fdadedi", [COLOR=#2b91af][COLOR=#2b91af]SqlDbType.TinyInt).Value = diskadedi.Text;
    sorgu.Parameters.Add([COLOR=#a31515][COLOR=#a31515]"fresim", [COLOR=#2b91af][COLOR=#2b91af]SqlDbType.VarChar).Value = resim.Text;
    sorgu.Parameters.Add([COLOR=#a31515][COLOR=#a31515]"flink", [COLOR=#2b91af][COLOR=#2b91af]SqlDbType.VarChar).Value = link.Text;
    sorgu.Parameters.Add([COLOR=#a31515][COLOR=#a31515]"fatarihi", [COLOR=#2b91af][COLOR=#2b91af]SqlDbType.SmallDateTime).Value = alistarihi.Text;
     
    con.Open();
    sorgu.ExecuteNonQuery();
    con.Close();
    sonuc.Text = [COLOR=#a31515][COLOR=#a31515]"Veri Girişi Başarıyla tamamlandı";
    
    hatayı sorgu.ExecuteNonQueryde veriyor.

    Convert.ToInt16(puan.Text) diyip deniim dedim ama olmadı yine aynı yerde aynı hatayı aldım.

    İlgilenirseniz cok memnun olurum.
     
    Son düzenleme yönetici tarafından yapıldı: 6 Temmuz 2008
  2. anov

    anov erlang programcýsý adayý

    Kayıt:
    29 Nisan 2004
    Mesajlar:
    3,488
    Beğenilen Mesajlar:
    0
    Meslek:
    İnternet Programcısı (Kreatif Design Studio)
    Şehir:
    Mavi kabarcığın içi
    Sorun RangeValidator ile alakalı olmamalı.

    Sorun çevrim de değil. Çünkü SqlParameter nesnesinin .Value özelliği object kabul eder. object tipine ise her nesne açıkça belirtilmeden (implicit) çevrilebilir.

    O halde bu ihtimalleri eleyince karşımıza Sql server aktarımında problem olduğu sonucu çıkıyor. Nasıl anlayabiliriz?
    SqlDbType.SmallInt yerine SqlDbType.Int kullanmayı dener misin?
    Kolay gelsin.
     
  3. ercanfb

    ercanfb Üye

    Kayıt:
    20 Şubat 2007
    Mesajlar:
    174
    Beğenilen Mesajlar:
    0
    saolasin ama sonuc negatif :( denemeler yaptim nereden kaynaklaniyor diye bazi alanların eklenmesini kaldirdim fln ama surekli string degeri bilmemneye cevrilemedi fln deyip duruyo. Halbuki şu validatorları eklemeden evvel sorunsuz çalışıyodu noolduda bozuldu anlamadim? Bi şekilde aldıgı degerlerin hepsini string okuyo ve asıl degerlerine ceviremiyor ! ne kullanmam gerekiyor bunun icin ? parse işimi çözermi çözerse kullanımı icin bi ornek verirmisiniz?
     
  4. anov

    anov erlang programcýsý adayý

    Kayıt:
    29 Nisan 2004
    Mesajlar:
    3,488
    Beğenilen Mesajlar:
    0
    Meslek:
    İnternet Programcısı (Kreatif Design Studio)
    Şehir:
    Mavi kabarcığın içi
    sp_FilmEkle nin kaynak kodunu yazabilir misin?

    Çevirmene gerek yok object kabul eden bir üye neye çevirirsen çevir object kabul eder zaten. Adamlar boşuna mı "ultimate base class" demiş :)
     
  5. ercanfb

    ercanfb Üye

    Kayıt:
    20 Şubat 2007
    Mesajlar:
    174
    Beğenilen Mesajlar:
    0
    ALTERPROCEDURE [dbo].[sp_FilmEkle]
    @fadi varchar(100), @ftag varchar(250),@fatarihi smalldatetime[COLOR=#808080][COLOR=#808080], @fresim [COLOR=#0000ff][COLOR=#0000ff]varchar[COLOR=#808080][COLOR=#808080](150[COLOR=#808080][COLOR=#808080]),
    @fyili [COLOR=#0000ff][COLOR=#0000ff]smallint[COLOR=#808080][COLOR=#808080], @fsuresi [COLOR=#0000ff][COLOR=#0000ff]smallint[COLOR=#808080][COLOR=#808080], @flink [COLOR=#0000ff][COLOR=#0000ff]varchar[COLOR=#808080][COLOR=#808080](50[COLOR=#808080][COLOR=#808080]), @fdub [COLOR=#0000ff][COLOR=#0000ff]tinyint[COLOR=#808080][COLOR=#808080],
    @fpuan [COLOR=#0000ff][COLOR=#0000ff]smallint[COLOR=#808080][COLOR=#808080], @fbyeri [COLOR=#0000ff][COLOR=#0000ff]varchar[COLOR=#808080][COLOR=#808080](5[COLOR=#808080][COLOR=#808080]),@forj [COLOR=#0000ff][COLOR=#0000ff]tinyint[COLOR=#808080][COLOR=#808080], @fdadedi [COLOR=#0000ff][COLOR=#0000ff]smallint
    AS
    BEGIN
    [COLOR=#0000ff][COLOR=#0000ff]insert[COLOR=#0000ff][COLOR=#0000ff]into Filmler [COLOR=#808080][COLOR=#808080](FilmAdi[COLOR=#808080][COLOR=#808080],Yil[COLOR=#808080][COLOR=#808080],Sure[COLOR=#808080][COLOR=#808080],tagline[COLOR=#808080][COLOR=#808080],BulunduguYer[COLOR=#808080][COLOR=#808080],Puan[COLOR=#808080][COLOR=#808080],Dublaj[COLOR=#808080][COLOR=#808080],Orj[COLOR=#808080][COLOR=#808080],DiskAdedi[COLOR=#808080][COLOR=#808080],resim[COLOR=#808080][COLOR=#808080],link[COLOR=#808080][COLOR=#808080],AlisTarihi[COLOR=#808080][COLOR=#808080])
    [COLOR=#0000ff][COLOR=#0000ff]values[COLOR=#808080][COLOR=#808080](@fadi[COLOR=#808080][COLOR=#808080],@fyili[COLOR=#808080][COLOR=#808080],@fsuresi[COLOR=#808080][COLOR=#808080],@ftag[COLOR=#808080][COLOR=#808080],@fbyeri[COLOR=#808080][COLOR=#808080],@fpuan[COLOR=#808080][COLOR=#808080],@fdub[COLOR=#808080][COLOR=#808080],@forj[COLOR=#808080][COLOR=#808080],@fdadedi[COLOR=#808080][COLOR=#808080],@fresim[COLOR=#808080][COLOR=#808080],@flink[COLOR=#808080][COLOR=#808080],@fatarihi[COLOR=#808080][COLOR=#808080])
    [COLOR=#0000ff][COLOR=#0000ff]END

    yukardaki cs koduna bakıp yorum alanı nerede diye soracak olursan sildim :) cs tarafını da aspx tarafını da yeniledim bu arada. Textboxların hepsini silip yeniden olusturdum. parametrelere gidecek degerleri yeni textboxlara gore ayarladım. Range validatorımı yeniden ayarladim. Ama sonuc degismedi halen sorgu.ExecuteNonQuery() kısmında int16 ya cevrilemedi hatası alıyorum :(
    [/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR][/COLOR]
     
  6. UuuR

    UuuR Daimi Üye

    Kayıt:
    29 Nisan 2007
    Mesajlar:
    733
    Beğenilen Mesajlar:
    0
    Meslek:
    Yazılım uzmanı
    gönderdiğin değerler eksik veya anlış gidiyor bence. break koyarak debug et,teker teker değişkenlerininin aldığı değerleri incelemelisin bence..
     
  7. ercanfb

    ercanfb Üye

    Kayıt:
    20 Şubat 2007
    Mesajlar:
    174
    Beğenilen Mesajlar:
    0
    ilk alanimdan baslayip 2 ser alan arttırarak tamamını doldurup butona basinca insert etti. Validator i koydum yine tum alanları calistirdim ve yine insert etti ama Yil,Sure vs gibi smallint tanımlanan alanları boş bıraktıgımda o bahsettigim Failed to convert parameter value from a String to a Int16. mesajıyla karsilasiyorum. Her zaman tum alanları doldurmak zorunda olmadigimdan bu alanlar boşken de insert etmesi lazim.

    Sanırım şimdi daha iyi bir analizle geldim. :) Bu soruna karşı nasil bir yol yordam bulmalı? cevaplarsanız cok memnun olurum.
     
  8. FoX_

    FoX_ Üye

    Kayıt:
    28 Şubat 2007
    Mesajlar:
    99
    Beğenilen Mesajlar:
    0
    Bu durumda bahsettigin alanlari NULL degerlere izin verecek bicimde yarattigini varsayarak asagidaki kodu incelemeni oneriyorum.Eger DBNull.Value kullanmazsan ve breakpoint koyup bakarsan o parametrenin SqlValue ozelliginin {} oldugunu , kullanirsan {NULL} oldugunu gorebilirsin...

    Kod:
    if(puan.Text == "")
      cmd.Parameters.Add(...).Value = DBNull.Value;
    else
      cmd.Parameters.Add(...).Value = puan.Text;