none
Sql server 2008 insert into date format datetimepicker hata RRS feed

  • Soru

  • Merhaba

    datetimepicker ile sql veritabanında  datetime tipine veri girişi  yapmaya çalışıyorum. bi kaç kod deneidm araştırdım ancak başaramadım. örneğin datetimepickerda format short iken tarih olarak bugünü seçiyorum ve kayıt etmeye çalışıyorum ay ile günün yerleri değişerek kayıt oluyor. mayısın 13 ünü seçtiğimde şu hatayı alıyorum ;

    The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.
    The statement has been terminated.

    smalldatetime olarak da denedim sonuç aynı textbox la deniyorum 12.13.2013 giriyorum kayıt olan 13.12.2013(dd.mm.yyyy). convert i de denedim ancak başaramadım yardımlarınızı bekliyorum kodlarım  aşağıdadır 

    Teşekkürler

    using System.Data.SqlClient;

    namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            SqlConnection baglanti = new SqlConnection("Data Source=BURAKAKKAN-PC\\SQLEXPRESS;Initial Catalog=dbkarya;Integrated Security=True");

            private void dpet()
            {
                //SqlCommand cmd = new SqlCommand("select AD,CONVERT(nvarchar(50),DTARİH,104) AS date from tablo1", baglanti);
                SqlCommand cmd = new SqlCommand("select * from tablo1", baglanti);
                SqlDataAdapter adap = new SqlDataAdapter(cmd);
                DataTable dtable = new DataTable();
                adap.Fill(dtable);
                dataGridView1.DataSource = dtable;
            }

            private void button1_Click(object sender, EventArgs e)
            {
                if (baglanti.State == ConnectionState.Closed)
                {
                    baglanti.Open();
                }
                //SqlCommand kayit = new SqlCommand("insert into tablo1 values ('" + textBox1.Text + "',CONVERT(nvarchar(50),'" + textBox2.Text + "',104))", baglanti);
                //SqlCommand kayit = new SqlCommand("insert into tablo1 values ('" + textBox1.Text + "','" + textBox2.Text + "')", baglanti);
                SqlCommand kayit = new SqlCommand("insert into tablo1 values ('" + textBox1.Text + "','" + dateTimePicker1.Text + "')", baglanti);
                kayit.ExecuteNonQuery();
                baglanti.Close();
                dpet();
            }

            private void Form1_Load(object sender, EventArgs e)
            {
                dpet();
            }

        }
    }

    10 Mayıs 2014 Cumartesi 13:22

Yanıtlar

  • Arastirdim demissin ama pek arastirmamissin :) Hemen hemen her gun bu forumlarda en az bier mesajda ASLA ve ASLA senin yazsigin gibi SQL yazilmamasi gerektigi vurgulaniyor ve ornek kod yaziliyor (ben bile dun gene yazdim).

    public partial class Form1 : Form
    {
       public Form1()
       {
           InitializeComponent();
       }
    	
    	string strBag = @"Data Source=.\SQLEXPRESS;Initial Catalog=dbkarya;Integrated Security=True";
    	
       private void dpet()
       {
    		DataTable dtable = new DataTable();
    	    using (SqlConnection baglanti=new SqlConnection(strBag))
    		{
    	       SqlCommand cmd = new SqlCommand("select * from tablo1", baglanti);
    		   baglanti.Open();
    		   dtable.Load( cmd.ExecuteReader());
    		   baglanti.Close();
    		}
           dataGridView1.DataSource = dtable;
       }
    
       private void button1_Click(object sender, EventArgs e)
       {
    	    using (SqlConnection baglanti=new SqlConnection(strBag))
    		{
    			SqlCommand kayit = new SqlCommand(@"insert into tablo1
    			(alanAdi1, tarihAlani2)
    			values 
    			(@v1, @v2)", baglanti);
    			
    			kayit.Parameters.AddWithValue("@v1", textBox1.Text);
    			kayit.Parameters.AddWithValue("@v2", dateTimePicker1.Value);
    			
    			baglanti.Open();
    			kayit.ExecuteNonQuery();
    			baglanti.Close();
    		}
    
           dpet();
       }
    
       private void Form1_Load(object sender, EventArgs e)
       {
           dpet();
       }
    }

    1. ASLA ve ASLA senin yazdigin gibi SQL yazma, parametre kullan ("SQL injection Attack" diye ararsan hem burada hem de internetde tonlarca aciklama bulursun.
    2. Datetimepicker degeri DateTime (adi ustunde). Sen bunu SQL serverda Date veya DateTime alanini doldurmak icin kullaniyorsun. Onun icin dogrudan .Value kullan (ya da sadece Date parcasi icin .Value.Date). Oyle garip dtring cevirimlerine ihtiyacin yok. Parametre kullanmanin faydali yan etkisi :)  Taruh ve Tarih-Saat SQL serverda Tarih ve Tarih-saat olarak saklanir. Her zaman da oyle kayit edilir. Gosterim sekli, ya da string olarak gondermeye kalktgindaki anlasilan tarih bulundugun yere gore degisebilir.Ornek:


    1/2/2014 - Ayarlar Turkiye ile uyumluysa 1 Subat 2014, Amerika ile uyumluysa 2 Ocak 2014

    Oysa parametre kullanarak dogrudan Tarih gonderince bu gibi karmasalara yer kalmaz.

    Not: Bu tip sorularini C# forumunda sorarsan daha iyi. Soruda SQL servera ozgu bir sey yok.
    • Düzenleyen CetinBasoz 10 Mayıs 2014 Cumartesi 14:36
    • Yanıt Olarak İşaretleyen Burak Akkan 11 Mayıs 2014 Pazar 17:12
    10 Mayıs 2014 Cumartesi 14:34

Tüm Yanıtlar

  • Arastirdim demissin ama pek arastirmamissin :) Hemen hemen her gun bu forumlarda en az bier mesajda ASLA ve ASLA senin yazsigin gibi SQL yazilmamasi gerektigi vurgulaniyor ve ornek kod yaziliyor (ben bile dun gene yazdim).

    public partial class Form1 : Form
    {
       public Form1()
       {
           InitializeComponent();
       }
    	
    	string strBag = @"Data Source=.\SQLEXPRESS;Initial Catalog=dbkarya;Integrated Security=True";
    	
       private void dpet()
       {
    		DataTable dtable = new DataTable();
    	    using (SqlConnection baglanti=new SqlConnection(strBag))
    		{
    	       SqlCommand cmd = new SqlCommand("select * from tablo1", baglanti);
    		   baglanti.Open();
    		   dtable.Load( cmd.ExecuteReader());
    		   baglanti.Close();
    		}
           dataGridView1.DataSource = dtable;
       }
    
       private void button1_Click(object sender, EventArgs e)
       {
    	    using (SqlConnection baglanti=new SqlConnection(strBag))
    		{
    			SqlCommand kayit = new SqlCommand(@"insert into tablo1
    			(alanAdi1, tarihAlani2)
    			values 
    			(@v1, @v2)", baglanti);
    			
    			kayit.Parameters.AddWithValue("@v1", textBox1.Text);
    			kayit.Parameters.AddWithValue("@v2", dateTimePicker1.Value);
    			
    			baglanti.Open();
    			kayit.ExecuteNonQuery();
    			baglanti.Close();
    		}
    
           dpet();
       }
    
       private void Form1_Load(object sender, EventArgs e)
       {
           dpet();
       }
    }

    1. ASLA ve ASLA senin yazdigin gibi SQL yazma, parametre kullan ("SQL injection Attack" diye ararsan hem burada hem de internetde tonlarca aciklama bulursun.
    2. Datetimepicker degeri DateTime (adi ustunde). Sen bunu SQL serverda Date veya DateTime alanini doldurmak icin kullaniyorsun. Onun icin dogrudan .Value kullan (ya da sadece Date parcasi icin .Value.Date). Oyle garip dtring cevirimlerine ihtiyacin yok. Parametre kullanmanin faydali yan etkisi :)  Taruh ve Tarih-Saat SQL serverda Tarih ve Tarih-saat olarak saklanir. Her zaman da oyle kayit edilir. Gosterim sekli, ya da string olarak gondermeye kalktgindaki anlasilan tarih bulundugun yere gore degisebilir.Ornek:


    1/2/2014 - Ayarlar Turkiye ile uyumluysa 1 Subat 2014, Amerika ile uyumluysa 2 Ocak 2014

    Oysa parametre kullanarak dogrudan Tarih gonderince bu gibi karmasalara yer kalmaz.

    Not: Bu tip sorularini C# forumunda sorarsan daha iyi. Soruda SQL servera ozgu bir sey yok.
    • Düzenleyen CetinBasoz 10 Mayıs 2014 Cumartesi 14:36
    • Yanıt Olarak İşaretleyen Burak Akkan 11 Mayıs 2014 Pazar 17:12
    10 Mayıs 2014 Cumartesi 14:34
  • Cevap için teşekkürler. araştırdım derken sadece tarihi aktarmaya bakmıştım. parametre kullanımını da daha önce gördüm forumlarda ama dediğiniz gibi sql injection hakkında uyaran bi yazı görmemiştim (adını görüp ilgimi çekmediği için içeriğine bakmadığımdan olacak sanırım:D) ve görmezden gelip kısayola kaçmışım sanırım :) programlama da kısa yola kaçılmayacağını anlamış oldum . hatta o kadar cahilim ki keşke ölsem demek geliyor içimden :) İlginize tekrar teşekkürler.
    11 Mayıs 2014 Pazar 17:19