2009-10-22 4 views
2

Récemment converti mon projet ASP.NET de 1.1 à 3.5. Hourra! En train de développer un formulaire qui a une poignée de champs optionnels. Normalement, je passerais par mon code, en ajoutant des tonnes d'instructions if, en vérifiant le champ vide, et en mettant la valeur à 0 si c'est le cas. Donc, je me demande s'il serait préférable de déclarer à la place des variables privées et valables pour chacun de ces champs, puis de les ajouter comme paramètres pour ma mise à jour de base de données? À l'aide de MSSQLS 2000, définissez déjà les champs correspondants pour autoriser les valeurs NULL.Les types NULL sont-ils parfaits pour ma situation?

Pour clarifier: Le formulaire Web comporte des champs pour les montants en dollars. La valeur par défaut sur les entrées est 0, mais si l'utilisateur supprime l'un de ces 0, en laissant le champ vide puis soumet le formulaire, une exception sera générée à Convert.ToDecimal (MoneyField.Text) dans la liste des arguments de la méthode soumet tout cela à la base de données. Y a-t-il une manière plus propre de faire ceci que je manque?

Répondre

1

Il semble inhabituel que vous auriez que de nombreux domaines qui sont vraiment annulable, mais si vous devez décrire « aucune valeur » séparément à une valeur de domaine magique (par exemple) un int, alors oui: Nullable<T> peut aider. Notez que vous devez traduire manuellement à partir null à DbNull.Value à la couche de données, comme null sur un SqlParameter signifie « ne pas envoyer ce paramètre », pas « envoyer la valeur null » (si vous voyez la distinction).

+0

Je ne sais pas si c'est many_ _que; formulaire a 21 champs, 9 d'entre eux sont optionnels, montants en dollars. Donc, en tant qu'argument, j'essaye: Convert.ToDecimal (MoneyField.Text). Maintenant, si rien n'a été entré dans ce champ, la conversion échoue. J'essaie donc de trouver le moyen le plus propre d'autoriser cet argument à être nul, donc je peux passer ce null sur la base de données. –

+0

Construisez les champs d'insertion requis sur ceux qui ont été saisis. Construire une liste de champs à insérer et oublier le reste. –

+0

Je n'ai pas encore traité de listes, donc je vais devoir faire quelques lectures pour voir si c'est une option viable. –

1

Je pense qu'il y a confusion entre la validation de champ et le type Nullable ici ... à moins bien sûr que vous ayez un certain type ... disons DateTime et que vous vouliez être nul ... ce qui ne serait pas possible sauf utilisation de type nullable.

Si tel est le cas, alors ... oui..Les types nulles sont la solution.

0

Eh oui, sonne comme un plan.

Il faudrait changer quelques appels si

static class NConv 
{ 
    static T? ToNullable<T>(string str) where T : struct 
    { 
     return (T?)(string.IsNullOrEmpty(str) ? default(T?) : Convert.ChangeType(str, typeof(T))); 
    } 

    static void HowTo() 
    { 
     double? myBonus = NConv.ToNullable<double>(null); 
    } 
} 
0

build Dynamiquement SQL basé sur les champs fournis.

Questions connexes