2012-01-06 3 views
0

J'ai un assistant ASP.NET où un utilisateur remplit ses données personnelles et les valeurs des zones de texte sont insérées dans un enregistrement MS SQL. Cependant, lors de l'insertion du disque, je reçois l'erreur suivante:Comment utiliser la zone de texte comme date dans ADO.NET

SQL Server error #241: Conversion failed when converting date and/or time from character string

code:

string insertSQL; 
insertSQL = "INSERT INTO member ("; 
insertSQL += "UserId, mem_dob,) "; 
insertSQL += "VALUES ("; 
insertSQL += "@UserId, @mem_dob"; 
insertSQL += ")"; 

SqlConnection con = new SqlConnection(connectionString); 
SqlCommand cmd = new SqlCommand(insertSQL, con); 

//Add the parameters. 
cmd.Parameters.AddWithValue("@UserId", providerIdKeyString); 
cmd.Parameters.AddWithValue("@mem_dob", DateOfBirth.Text); 

Toutes les idées de la meilleure façon de résoudre ce problème? Ne devrais-je pas utiliser une zone de texte mais quelque chose d'autre? Je voulais garder le formulaire web simple - il valide les dates OK alors j'ai pensé que la date devrait être valide.

Merci

+0

Comment validez-vous la date dans le formulaire Web? –

Répondre

0

vous devriez sélectionner simplement le Text à un DateTime valide.

cmd.Parameters.AddWithValue("@mem_dob", DateTime.Parse(DateOfBirth.Text)); 

http://msdn.microsoft.com/en-us/library/1k1skd40%28v=VS.100%29.aspx

Bien sûr, vous devriez déjà avoir validé l'entrée « date » est valable à ce stade.

+0

Merci - voir mon commentaire dans la réponse ci-dessus. – bjh

0

Il semble que la date entrée dans votre zone de texte soit une date non valide selon SQL. Avant de tenter d'ajouter la date en tant que paramètre, vérifiez d'abord sa validité. par exemple.

DateTime myDate; 
if(textBox1.TryParse(DateOfBirth.Text, out myDate)) 
{ 
    // Date is valid. 
} else 
{ 
    // Take corrective actions to fix the date. 
} 

simplement tenter d'analyser la date sans savoir si elle est valide ou non laissera votre application ouverte à une défaillance, comme vous devriez tout simplement pas faire confiance à l'utilisateur d'entrer une date valide.

+0

Merci, mais j'ai validé la date dans le contrôle de l'assistant. – bjh

0
DateTime t; 
String Date = String.Empty; 
if (DateTime.TryParse(Date, out t)) 
{ 
    cmd.Parameters.AddWithValue("@mem_dob", t); 
} 
+0

Merci! Également trouvé que cela fonctionne: cmd.Parameters.AddWithValue ("@ mem_dob", Convert.ToDateTime (DateOfBirth.Text)); mais analyser est probablement mieux? – bjh

0

Vous devriez avoir à créer utilisateur simple contrôle qui contient trois contrôles déroulants - pour le jour, le mois et l'année et un bien public/méthode pour définir/obtenir la date. Vous pouvez penser aux contrôles ASP.NET Ajax.

Dans le cas où vous souhaitez utiliser Textbox puis restreindre l'entrée de l'utilisateur via le contrôle CompareValidator ou une sorte d'expression JavaScript et régulière.

Pour analyser la chaîne de caractères, utilisez la méthode DateTime.TryParse ou DateTime.ParseExact (DateTime.TryParseExact).

string[] inputFormat = {"dd-MM-yy","dd/mm/yy","dd-MMM-yyyy"}; 
string userDate = "31-12-11"; 
DateTime date; 
if (DateTime.TryParseExact(userDate, 
          inputFormat, 
          CultureInfo.InvariantCulture, 
          DateTimeStyles.None, 
          out date)) 
      { 
       //valid 
      } 
Questions connexes