Valider DateTime avant de l'insérer dans la base de données SQL Server
Est-il possible de valider datetime
champ avant de l'insérer dans la table appropriée?
D'une tentative d'insertion avec un bloc try/catch n'est pas un moyen.
Merci,
Comment êtes-vous d'insérer les données? En outre, ce type de validation parlez-vous? À l'intérieur d'une certaine plage ou que c'est un format valide?
OriginalL'auteur MichaelVerossa | 2011-08-14
Vous devez vous connecter pour publier un commentaire.
Ne sais pas si je suis trop pointilleux là, mais DateTime.TryParse permettra de valider si une valeur est un objet DateTime valide. OP posées à propos de la vérification d'une valeur avant de l'insérer dans SQL Server datetime. La plage de valeurs acceptables pour un Serveur SQL server datetime est "le 1er janvier 1753, jusqu'au 31 décembre 9999" Qui n'est pas vrai pour le type DateTime .NET des objets. Ce script affecte une valeur de "1/1/0001 12:00:00" à badDateTime et il a réussi à analyse.
Toutefois, si vous tentez de stocker dans un champ datetime, il ne pourrait pas avec "La conversion d'un type de données varchar à un type de données datetime entraîné dans une gamme de valeur."
Un intervenant a demandé pourquoi j'ai utilisé 997 pour millisecondes, ce qui est couvert en vertu de SQL Server 2008 et millisecondes, mais vous sauver un clic, 997 est la plus grande valeur que vous pouvez stocker dans un type de données datetime. 998 sera arrondi à 1 seconde avec 000 millisecondes
C'est probablement la meilleure approche qu'il va tenter de jeter l'objet DateTime en sql type de données datetime
Edité pour ajouter une méthode simple qui permettra de vérifier les valeurs sont dans la gamme. Vais essayer de faire une deuxième approche, peut-être moins enclins à faire des erreurs
Je vais essayer votre méthode! Merci, billinkc!
À l'aide de la SqlDateTime ne fonctionnera pas tout le temps. Si un utilisateur entre 10/17 sans une année, la méthode ci-dessus, il ajoute pour la validation. Mais quand 10/17 arrive à la table dans sql server, il renvoie une erreur.
Une raison en particulier pour l'utilisation de 997 millisecondes, plutôt que de 999 lors de la définition de maxDateTime?
OriginalL'auteur billinkc
Essayez sans coder en dur la valeur de type dateTime de sql:
var minValue = (DateTime) System.Data.SqlTypes.SqlDateTime.MinValue;
OriginalL'auteur Ankush Madankar
C'est une autre de prendre sur billinkc de réponse. Cependant, dans cette méthode, la .La valeur de la propriété de min/max est utilisé pour éviter d'analyse et de try/catch. Quelqu'un a mentionné qu'il voulait s'assurer qu'ils sont l'insertion d'une date valide dans SQL Server. Donc, j'ai pris la démarche de retour d'une date qui est valable pour SQL Server. Cela pourrait facilement être changé pour un booléen qui vérifie pour voir si le dateToVerify est valable de date SQL Server.
OriginalL'auteur Curtis Glesmann
OU
validateur personnalisé:
OriginalL'auteur Bolo
Si vous êtes de mentionner au sujet de côté de serveur de validation de votre champ DateTime, utilisez
DateTime.TryParse
. Un moyen rapide et sale exemple seraOriginalL'auteur naveen
DateTime.TryParse
est le meilleur programme de validationOriginalL'auteur Vinay
Pourrait vous fournir un bt plus d'informations sur l'endroit où la valeur de type datetime est à venir; un formulaire web?
Vous pouvez simplement ajouter un CompareValidator comme suit
stackoverflow.com/editing-help
Grâce Naveen, se révèle un peu de mal à la tête 🙂
OriginalL'auteur Obi Onuorah
Ici est une classe avec une méthode d'extension pour permettre une vérification comme
if(myDateTime.IsValidSqlDateTime()) { ... }
:OriginalL'auteur Chris Peacock
Vous pouvez utiliser SqlCommand avec Parametter pour éviter SQLInjection
Pour examplae:
Et autre(s), vous pouvez afficher dans MSDN
OriginalL'auteur BachT