none
c# tarih hatası hk. RRS feed

  • Soru

  •   

    public void tarihsecimi() { DateTime zaman = dateTimePicker1.Value.Date; DateTime zaman1 = dateTimePicker2.Value.Date; if(checkBox7.Checked==true) { ls.check2 = "SELECT CAST(H.TARIH as datetime),H.CARI_KOD as FİRMA,c.CARI_ISIM,H.BELGE_NO,H.ACIKLAMA,CAST(H.BORC as decimal(15, 2)) AS BORÇ, CAST(H.ALACAK AS decimal(15, 2)) AS ALACAK, H.HAREKET_TURU FROM TBLCAHAR AS H INNER JOIN TBLCASABIT AS C ON H.CARI_KOD = C.CARI_KOD WHERE CAST(H.TARIH AS datetime) BETWEEN '" + zaman + "' and '" + zaman1 + "'"; ls.da3 = new SqlDataAdapter(ls.check2, DXApplication6.Program.netsis_db); DataSet ds49 = new DataSet(); ls.da3.Fill(ds49); dataGridView1.DataSource = ds49.Tables[0]; } }


    Herkese merhaba,Yukarıda ki kodu çalıştırdığımda aşağıda ki hatayı almaktayım.Convert ile ilgili bir sorun olduğunu düşünüyorum ama  değişiklikler yaptım bir türlü olmadı.Sql üzerinde de  tarih alanın veri tipi "datetime" breakpoint ile de baktım ama  bulamadım.

    System.Data.SqlClient.SqlException: 'The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.'

    15 Eylül 2019 Pazar 10:02

Yanıtlar

  • Hata açık aslında, mesajda yazıyor. Daha once de tarihler ile ilgili uyarilar yaptigimi hatırlıyorum ama ne yazık ki ayni hatalar devam ediyor gibi. Forumlarda defalarca ASLA ve ASLA bu sekilde SQL sorgusu yazilmamasi, onun yerine parametre kullanılması gerektiği belirtildi.

    SQL server'daki data tipi datetime ise (ki normali o) ne diye cast() ediyorsunuz? Kodunuzdaki hata SQL Server'dan gelse de, SQL Server tarafında degil, parametre kullanmamanızda. 

    if (checkBox7.Checked) {
    DateTime baslangic = dateTimePicker1.Value.Date;
    DateTime bitis = dateTimePicker2.Value.Date.AddDays(1);
    var sorgu = @"SELECT H.TARIH,H.CARI_KOD as FİRMA,
    	c.CARI_ISIM,H.BELGE_NO,H.ACIKLAMA,
    	CAST(H.BORC as decimal(15, 2)) AS BORÇ, 
    	CAST(H.ALACAK AS  decimal(15, 2)) AS ALACAK, H.HAREKET_TURU 
    	FROM  TBLCAHAR AS H 
    	INNER JOIN TBLCASABIT AS C ON H.CARI_KOD = C.CARI_KOD  
    	WHERE  H.TARIH >= @baslangic and H.TARIH < @bitis";
    
    DataTable tbl = new DataTable();
    
    var adapter = new SqlDataAdapter(sorgu, DXApplication6.Program.netsis_db);
    
    adapter.SelectCommand.Parameters.Add("@baslangic", SqlDbType.Date).Value = baslangic;
    adapter.SelectCommand.Parameters.Add("@bitis", SqlDbType.Date).Value = bitis;
    
    adapter.Fill(tbl);
    
    dataGridView1.DataSource = tbl;
    }



    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.




    15 Eylül 2019 Pazar 10:38
    Yanıtlayıcı