none
ERROR CONVERTİNG DATA TYPE NVARCHAR TO TİNYİNT RRS feed

  • Soru

  • Öncelikle konuyu ve başlığı doğru seçtim mi onu bile bilmiyorum.

    Öğrenciyim ve daha bu konularda çok acemiyim internetten izlediğim videolarla bir otomasyon programı yaptım.

    Stok Kaydet kısmında bu hatayı alıyorum.

    Error converting data type nvarchar to tinyint.

    BUTON CLİCK KISMINDAKİ KODLAR ---

    try
                {
                    SqlConnection con = bgl.baglantim();
                    SqlCommand kmt = new SqlCommand("sp_urun_ekle1", con);
                    kmt.CommandType = CommandType.StoredProcedure;
                    kmt.Parameters.AddWithValue("@urun_kodu", txt_urun_kodu.Text.Trim());
                    kmt.Parameters.AddWithValue("@urun_adi", txt_urun_adi.Text.Trim());
                    kmt.Parameters.AddWithValue("@urun_fiyati", float.Parse(txt_urun_fiyati.Text.Trim()));
                    kmt.Parameters.AddWithValue("@urun_cinsi", txt_urun_cinsi.Text.Trim());
                    kmt.Parameters.AddWithValue("@urun_adedi", txt_urun_adedi.Text.Trim());
                    kmt.Parameters.AddWithValue("@kritik_stok", txt_kritik_stok.Text.Trim());
                    kmt.Parameters.AddWithValue("@urun_ekleyen", gr.k_yetki.ToString());
                    kmt.Parameters.AddWithValue("@bgn_tarih", DateTime.Now.ToString());
                    int sonuc = kmt.ExecuteNonQuery();
                    if (sonuc == -1)
                    {
                        MessageBox.Show("Bu ürün stoklarda mevcuttur.");
                    }
                    else
                    {
                        MessageBox.Show("Ürün Başarılıyla Kaydedildi.");
                    }

                    con.Close();

                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, " Paradise Stok Takip Otomasyonu");

                }

    --------

    ALTER proc [dbo].[sp_urun_ekle1]
    (
    @urun_kodu int,
    @urun_adi nvarchar(100),
    @urun_fiyati money,
    @urun_cinsi nvarchar(100),
    @urun_adedi tinyint,
    @kritik_stok tinyint,
    @urun_ekleyen nvarchar(50),
    @bgn_tarih nvarchar(max)
    )
    as
    if not exists (select urun_kodu from Stok where urun_kodu=@urun_kodu)
    begin
    insert into Stok(urun_kodu,urun_adi,urun_fiyati,urun_cinsi,urun_adedi,kritik_stok,urun_ekleyen,bgn_tarih)
    values (@urun_kodu,@urun_adi,@urun_fiyati,@urun_cinsi,@urun_adedi,@kritik_stok,@urun_ekleyen,@bgn_tarih)
    end
    else
    begin
    select 'Bu ürün kaydedilmiş..' as[Hata]
    end

    Buda sql kodum .  eski notebookumda aynı kodlarla bu program sorunsuz çalışıyordu şuan yeni pc ye kodları tek tek özenle aktarıyorum bir çok kez baktım fark yok ama bu bilgisayarda bu hatayı alıyorum yardımcı olursanız sevinirim..

    Windows 10 Pro 64 Bit İşletim Sistemi

    Visual Studio 2019 

    Microsoft Sql Server Managament 2018



    24 Ocak 2020 Cuma 15:09

Tüm Yanıtlar

  • Sayısal değişkene metin türünden değer veriyorsunuz.

    "45" => metin

    45 => sayı

    Ayrıca "tinyint" kullanmanıza gerek olduğunu düşünmüyorum, "int" olarak devam edin. 

    www.cihanyakar.com


    24 Ocak 2020 Cuma 15:36
  • "tinyint" olan veri türlerini "int" olarak değiştirdim fakat bu seferde --

    "error converting data type  nvarchar to int" diye hata veriyor

    kusura bakmayın dediğim gibi çok yeniyim bu konularda tam olarak ne yapmam gerekiyor sayısal değişkene metin türünden değer veriyosunuz demişsiniz ama anlayamadım.

    24 Ocak 2020 Cuma 15:51
  • Cihan'in söylediğinin sadece son kismini okumuş, daha onemli olan ilk kismini atlamissiniz. "45" seklinde metindir. 45 seklinde sayıdır.

    Arada fiyatı çevirmiş olsanız da, digerlerini sanki text imiş gibi göndermişsiniz. O sekilde gonderince SQL Server cevirimi yapmaya calisiyor ama degerlerden birisi çevirilmiyor diyor. AddWithValue kullanmayınız, Add kullaniniz ve degerlerin hepsini metin gibi göndermek yerine normal tipleriyle gönderiniz. Stored procedure'da da hata var gibi, bgn_tarih nvarchar imiş gibi yazılmis, adından sanki orası bir tarih alanı aslında:

    if (int.TryParse(txt_urun_kodu.Text.Trim(), out int urunKodu) &&
        decimal.TryParse(txt_urun_fiyati.Text.Trim(), out decimal fiyat) &&
    	int.TryParse(txt_urun_adedi.Text.Trim(),out int urunAdet) &&
    	int.TryParse(txt_kritik_stok.Text.Trim(), out int kritikStok)
    	)
    {
    // ...
    	kmt.Parameters.Add("@urun_kodu", SqlDbType.Int).Value = urunKodu;
    	kmt.Parameters.Add("@urun_adi", SqlDbType.NVarChar).Value = txt_urun_adi.Text.Trim();
    	kmt.Parameters.Add("@urun_fiyati", SqlDbType.Decimal).Value = fiyat;
    	kmt.Parameters.Add("@urun_cinsi", SqlDbType.NVarChar).Value = txt_urun_cinsi.Text.Trim();
    	kmt.Parameters.Add("@urun_adedi", SqlDbType.Int).Value = urunAdet;
    	kmt.Parameters.Add("@kritik_stok", SqlDbType.Int).Value = kritikStok;
    	kmt.Parameters.Add("@urun_ekleyen", SqlDbType.NVarChar).Value = gr.k_yetki.ToString());
    	kmt.Parameters.Add("@bgn_tarih", SqlDbType.DateTime).Value = DateTime.Now;
    	int sonuc = kmt.ExecuteNonQuery();
    // ...
    }
    

     


    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    24 Ocak 2020 Cuma 16:25