2012-07-23 5 views
1

J'ai une classe comme indiqué ci-dessous qui a une table correspondante dans Access 2007Comment vérifier null dans les requêtes paramétrées?

Class Product 
{ 
    public int ProductId 
    { 
     get;set; 
    } 
    public string ProductName 
    { 
     get;set; 
    } 
    public string ProductColor 
    { 
     get;set; 
    } 
} 

c'est la méthode que j'utilise pour ajouter des produits à base de données.

public static void AddProduct(Product product) 
    { 
     con.Open(); 
     string strSql = @"INSERT INTO PRODUCTS (PRODUCTID,PRODUCTNAME,PRODUCTCOLOR) 
         VALUES(?,?,?)"; 
     IDbCommand cmd = con.CreateCommand(); 
     cmd.CommandText = strSql; 

     dh.AddInParam(cmd, "@productId", DbType.Int32, product.ProductId); 
     dh.AddInParam(cmd, "@productName", DbType.String, product.ProductName); 
     dh.AddInParam(cmd, "@productColor", DbType.String, product.ProductColor); 
     cmd.ExecuteNonQuery(); 
     con.Close() 
    } 

Maintenant, cela ne me dérange pas si l'utilisateur a entré des valeurs nulles. Dans ce cas, comment puis-je mettre à jour la méthode AddProduct? Le seul cas venir à mon esprit est en train de faire un chèque nul pour chaque paramètre comme ci-dessous ..

if(product.ProductColor = null) 
{ 
    dh.AddInParam(cmd, "@productColor", DbType.String, DbNull.Value); 
} 
else 
{ 
    dh.AddInParam(cmd, "@ProductColor, DbType.String, product.ProductColor) 
} 

Suis-je manque quelque chose évidente? Quelle serait la meilleure méthode pour vérifier les valeurs NULL dans ces requêtes paramétrées? Que diriez-vous d'utiliser l'opérateur de coalescence NULL?

Répondre

4

opérateur Null coalescing pourrait être la solution

dh.AddInParam(cmd, "@productId", DbType.Int32, 
        product.ProductId ?? (object)DBNull.Value); 

Cela nécessite le troisième paramètre de dh.AddInParam être de type de données objet (il devrait déjà être de cette façon)

Probablement ce L'exigence sera vraie pour tous les paramètres que vous passez à AddInParam, donc le meilleur moyen de résoudre ce problème est de changer le code de cette méthode pour prendre en compte les valeurs nulles passées. (Bien sûr, si vous avez ve la source)

+0

oui le troisième paramètre est type..i d'objet a dû changer votre Soulution à Produit.IDProduit ?? (objet) DBNull.Value pour obtenir le travail .. il a montré 'Operator' ?? ' ne peut pas être appliqué aux opérandes de type 'string' et 'System.DBNull' 'en premier .. – vinayan

+0

Corrigé la réponse avec vos findigs. Merci- – Steve

2

dh.AddInParam(cmd, "@productColor", DbType.String, product.ProductColor ?? DbNull.Value);

0

essayez d'utiliser l'opérateur coalescent null

Questions connexes