2011-01-04 1 views
0

Disons que j'ai une classeLe meilleur moyen pour valider le paramètre IDbCommand

public class foo { public string FooId { get; set; } } 

maintenant dans ma couche de données, je suis en train d'écrire du code qui va créer une instance de IDataCommand et mis en fooid que sur des paramètres de commande quelque chose comme ça

public void save(foo f, IDbConnection conn) 
{ 
    IDataCommand cmd = conn.CreateCommand(); 
    cmd.CommandName = "SP_SAVE_INFO" ; 
    IDataDbParameter param = cmd.CreateParameter(); 
    param.name = "@fooId"; 
    param.value=(f.id>0)?f.id:(object)DbNull.Value; 
    cmd.parameters.add(param); 
    cmd.ExecuteNonQuery(); 
} 

Si vous remarquez la ligne de code - param.value = (f.FooId> 0) f.id: (objet) DBNull.Value; . Ma question concerne exactement ce domaine. Si j'ai trop de paramètres à fournir. Il semble un peu mauvais quand je vérifie la valeur comme ceci sur chaque paramètre. La question ici est quelle est la meilleure façon de faire ce genre de chose? Qui devrait faire ce DL ou BL? Si BL, alors devrait-il assigner DBNull Value là? Y a-t-il une autre manière standard de faire cela?

+0

Est-ce que quelqu'un sait, comment je peux faire mon code apparaissent en format au lieu d'une ligne en post ci-dessus? –

+0

Formatez le bloc de code pour vous. Vous devez ajouter de nouvelles lignes avec indentation pour chaque ligne de code. –

Répondre

0

Pourquoi ne pas essayer une méthode d'extension générique?

public static class IDataDbParameterExtensions 
{ 
    public static void SetValue<T>(this IDataDbParameter parameter, T value) 
    { 
     if(value == default(T)) // for structs (ValueTypes) like Int, default(T) will be 0 and for classes (RefTypes), it will be null. 
     { 
      parameter.Value = DBNull.Value; 
     } 
     else 
     { 
      parameter.Value = value; 
     } 
    } 
} 

utiliser comme suit:

param.SetValue(f.id); 
+0

Ceci est une excellente solution, propre et le meilleur ajustement. Merci beaucoup. –

0

La solution la plus complète n'est pas de le faire vous-même. Il existe de nombreux frameworks qui vous aideront ici - regardez par exemple NHibernate ou Entity Framework.

Si vous avez vraiment besoin de le faire manuellement, vous pouvez refactoriser les contrôles en méthodes réutilisables. Quelque chose comme ceci:

public void AddIntParameterWithNullForZero(IDataCommand command, string parameterName, int parameterValue) 
    { 
    // Add the parameter and perform the checks here. 
    } 
Questions connexes