2013-02-02 5 views
1

je dois stocker la date rapportez de la zone de texte ASP.Net dans un SQL Server 2008 colonne date.Date de SQL Server Conversion de chaîne

Je reçois le message d'exception suivant.

La conversion a échoué lors de la conversion de la date et/ou de l'heure de la chaîne de caractères.

Mon code est:

SqlConnection cn; 
SqlCommand cmd; 
SqlDataAdapter da; 

int n=4; 
protected void Page_Load(object sender, EventArgs e) 
{ 
    cn = new SqlConnection(<Connection String>); 
} 

protected void Button1_Click(object sender, EventArgs e) 
{ 
     try 
     { 
      string query = "insert into temp values('" + TextBox1.Text + "')"; 
      cn.Open(); 
      cmd = new SqlCommand(query, cn); 
      cmd.ExecuteNonQuery(); 
      cn.Close(); 
      Response.Write("Record inserted successfully"); 
    } 
    catch (Exception ex) 
    { 
     Response.Write(ex.Message); 
    } 

} 

S'il vous plaît aider ..

Merci à l'avance

+2

Couple de choses. 1) Votre code est largement ouvert à une attaque par injection SQL. 2) Je suppose que vous essayez d'insérer dans un champ 'DateTime' mais votre logique le passe comme une chaîne. –

+0

Encore une fois, ces questions sont toutes les mêmes. La concaténation de chaîne est BAD. http://stackoverflow.com/questions/14660255/read-data-from-sql-database-using-datetime-picker/14660601#14660601 – Steve

Répondre

0

vous avez à faire plusieurs changements

  1. Convertissez votre date DateTime
  2. valeur passe en paramètre pour éviter l'injection SQL
  3. Définissez le champ comme DateTime dans DB.

Votre code serait comme ça

SqlConnection cn; 
SqlCommand cmd; 
SqlDataAdapter da; 

int n=4; 
protected void Page_Load(object sender, EventArgs e) 
{ 
cn = new SqlConnection(<Connection String>); 
} 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     string query = "insert into temp values(@date))"; 
     cn.Open(); 
     cmd = new SqlCommand(query, cn); 
     cmd.Parameters.AddWithValue("@date",Convert.DateTime(TextBox1.Text)); 
     cmd.ExecuteNonQuery(); 
     cn.Close(); 
     Response.Write("Record inserted successfully"); 
    } 
    catch (Exception ex) 
    { 
    Response.Write(ex.Message); 
    } 

} 
+1

Merci @syed mohsin ... Le code fonctionne parfaitement –

4

Changer votre code à la suivante (en supposant que la colonne temp est en fait un DateTime) :

protected void Button1_Click(object sender, EventArgs e) 
{ 
    try 
    { 
     string query = "insert into temp values(@Value)"; 
     cn.Open(); 
     cmd = new SqlCommand(query, cn); 
     cmd.Parameters.AddWithValue("@Value", DateTime.Parse(TextBox1.Text)); 
     cmd.ExecuteNonQuery(); 
     cn.Close(); 
     Response.Write("Record inserted successfully"); 
} 
catch (Exception ex) 
{ 
    Response.Write(ex.Message); 
} 

}

Vous devez également modifier votre logique pour valider que TextBox1.Text est réellement une date valide.

+0

Essayé ce code, mais obtenir la même erreur Kelley @ Daniel –

+2

@ user2017483 Quelle valeur est TextBox1.Text au moment où vous cliquez sur le bouton? Quel type de données est la colonne dans 'temp'? –

+0

Le type de données de la colonne dans le serveur sql est Date .. Et la valeur dans la zone de texte serait 13-05-1990 (jj-mm-aaaa) –

0
  1. Ne pas vérifier si le type de données de colonne est datetime
  2. Utilisez Convert.ToString avant d'insérer dans la base de données