2012-05-23 6 views
0

J'ai un champ DateTime dans ma base de données SQL auquel je veux écrire une heure, mais comment faire? Je veux le faire comme un horodatage, donc quand l'utilisateur clique sur un bouton "ajouter" il ajoute les données aux autres champs, et un horodatage dans le champ DateTime, mais je reçois toujours l'erreur suivanteInsérer DateTime dans la base de données

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

Ceci est mon code actuel dans le fichier CS

insertSQL = "INSERT INTO Posts (TopicID, PostBody, PostDate, UserID)" 
     + "VALUES ('" + topic + "', '" + newPostText + "', '" + DateTime.Now.ToString() + "', '" + User_ID + "')"; 

S'il vous plaît noter que je suis vouloir afficher que des informations beaucoup plus de temps que je peux. Par exemple: 23/05/2012 10:58:00 a.m.

+0

Dans SQL Server, définissez la "Valeur par défaut ou obligatoire" pour (getdate()) pour smalldatetime – dpDesignz

Répondre

4

Votre mise en œuvre est sujette à SQL Injection. Pour résoudre cela, et votre problème de DateTime, les paramètres d'utilisation - http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx

Quelque chose comme ceci:

string commandText = "INSERT INTO Posts (TopicID, PostBody, PostDate, UserID)" 
    + "VALUES (@Topic, @NewPostText, @PostDate, @UserID)"; 

using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    SqlCommand command = new SqlCommand(commandText, connection); 
    command.Parameters.AddWithValue("@Topic", "My Topic"); 
    command.Parameters.AddWithValue("@NewPostText", "Post text goes here"); 
    command.Parameters.AddWithValue("@PostDate", dateObject); 
    command.Parameters.AddWithValue("@UserID", "UserA"); 

    try 
    { 
     connection.Open(); 
     Int32 rowsAffected = command.ExecuteNonQuery(); 
    } 
    catch (Exception) 
    { 
     // Handle Errors  
    } 
} 
+0

Merci. Je sais que c'est actuellement sujettes, mais cela n'a pas répondu à ma question – dpDesignz

+0

En utilisant les paramètres _is_ la réponse à votre problème. Les paramètres peuvent préserver les types de données. Ainsi, au lieu d'injecter le DateTime dans le SQL sous la forme d'une chaîne et de forcer SQL à essayer de le convertir en DateTime, le moteur SQL recevra un objet DateTime. – Snixtor

+0

+1 pour passer d'un mauvais lien à une vraie réponse avec un lien comme référence – peroija

-2

Demandez-vous strtotime()?

<?php 
$d = date('y-m-d'); 
echo date('d M Y',strtotime($d)); 
echo "<br>"; 
echo date('Y-m-d H:i:s'); ?> 

soupir, ma faute, il est pour Php ~

+0

:). Merci de donner un coup si – dpDesignz

+0

Désolé, je ne suis pas familier avec asp.net^_^Bonne chance. – zhenjie

+0

-1: Bienvenue dans StackOverflow! Malheureusement, vous n'avez pas répondu à la question. Lorsque vous répondez à une question sur un problème ASP.net, la solution va probablement impliquer asp.net, pas PHP. Et lorsque vous répondez à une question sur l'insertion d'une valeur dans une base de données, la réponse correcte affichera probablement l'insertion d'une valeur dans une base de données, et pas seulement le formatage. Regardez la réponse de @ Snixtor pour voir comment vous pourriez améliorer votre solution. –

Questions connexes