J'utilise un DataSet typé avec une instruction d'insertion; J'ai une table qui a un champ smalldatetime défini pour accepter des valeurs nulles. Lorsque je l'insère à partir d'un .NET 2.0 FormView, j'obtiens un "débordement SqlDateTime" doit être entre 1/1/1753 12:00:00 AM et 31/12/9999 23:59:59 PM. "débordement SqlDateTime jeté par DataSet typé Insérer
Maintenant, je l'ai lu this post, et le paramètre comme envoyé au constructeur de la classe est définie comme
global::System.Nullable<global::System.DateTime> DoB
, il semble donc que cela devrait accepter un obj Nullable. De plus, le code généré teste la valeur envoyée.
if ((DoB.HasValue == true)) {
command.Parameters[6].Value = ((System.DateTime)(DoB.Value));
}
else {
command.Parameters[6].Value = global::System.DBNull.Value;
}
Plus précisément, l'erreur se produit lorsque généré SqlClient.SqlCommand.ExecuteScalar() fonctionne:
try {
returnValue = command.ExecuteScalar();
}
Donc, je suppose que ma question est: comment puis-je utiliser un DataSet typé pour définir un vide valeur (passé d'un FormView sur CommandName = Insérer) à une valeur nulle dans une base de données?
Suivi supplémentaire: Une partie du problème est que je ne peux pas déboguer ceci. Comme une solution de rechange, j'ai copié l'objet et fait le mien. Puisque les ensembles de données typés créent des classes partielles pour leurs tableadapters, je l'ai tapoté dedans et ai ajouté un double de l'objet d'insertion. Cela m'a permis d'y mettre un point d'arrêt et de voir quelles sont les valeurs. Partie II: Si vous examinez FormViewInsertEventArgs, la date est envoyée comme nulle. Cependant, lorsque vous le comparez à la méthode Insert, vous verrez que cela a changé pour {1/1/0001 12:00:00 AM} ... Plus de travail nécessaire ... –
Ok, il doit y avoir un bug dans la façon dont MS a mis en œuvre leurs routines de réflexion. Si je change le type de paramètre dans ma méthode en chaîne, il est vide. Si j'évalue Nullable nix = ""; Je * * obtiens un null. Il doit y avoir * quelque chose de faux dans l'appel ObjectDataSourceMethod GetResolvedMethodData() car il crée une liste de paramètres avec lesquels appeler la méthode. Quelque part, je pense qu'il fait juste un nouveau DateTime(), pas un nouveau Nullable (). Je n'ai juste plus le temps de le chercher. –