2010-08-15 3 views
1

bonjour amis je suis 3 architecture de couche pour mon projet je veux dire couche de présentation, couche de logique métier et enfin couche de base de données ma question est que je fais une fonction de recherche pour mon projet où je besoin d'envoyer un paramètre via une méthode de requête de recherche qui doit faire sur la couche logique métier je dois envoyer un paramètre de la couche de présentation en appelant une méthode et ce paramètre sera utilisé sur la méthode de la couche logique métier pour faire la requête appropriée il n'est pas sûr sûr combien de paramètres seront envoyés chaque fois que je veux dire les paramètres sont optionnels alors ma question est que comment dois-je envoyer ces paramètre facultatif pour obtenir exactement le paramètre require sur la couche de logique métier.comment écrire la requête pour les paramètres optionnels

Quelle est la meilleure façon, je suis la programmation en asp.net

+0

J'ai mis à jour ma réponse – garik

+0

Ponctuation - c'est où il est ... –

Répondre

0

Si vous utilisez des entités commerciales, marque tous les propriétés par attribut personnalisé avec (masque = 1, 2, 4, 8 ..., nécessaire = vrai faux). Alors vous pouvez utiliser la réflexion pour lire toutes les propriétés requises et les transmettre à sp.

class Product 
{ 

    [FieldAttribute(Required=true, Mask= 0)] 
    public int Id {get; set;} 
... 
    [FieldAttribute(Required=false, Mask=1)] 
    public string ProductName { get; set;}  
} 

si certains paramètres non requis sont null (utiliser Nullable <>), ne pas incrémenter le masque (masque & = propertyMask).

Utilisez un masque d'entier pour une mise à jour partielle.

/* 

    exec dbo.Update_Product @product_id = 1, @quantity = 3, @mask = 0x0004 
    exec dbo.Update_Product @product_id = 1, @product_name = 'new name', @comment = 'new comment', @mask = 0x0003 

*/ 


alter proc dbo.Update_Product 
    @product_id int   
    ,@product_name nvarchar(100) = NULL -- 0x0001 
    ,@comment nvarchar(255)   = NULL -- 0x0002 
    ,@quantity int     = NULL -- 0x0004 
    ,@mask  int    
AS  
    update dbo.Product 
    SET 
     ProductName = CASE WHEN (@mask & 0x0001) > 0 THEN @product_name ELSE ProductName END 
     ,Comment  = CASE WHEN (@mask & 0x0002) > 0 THEN @comment  ELSE Comment  END 
     ,Quantity  = CASE WHEN (@mask & 0x0004) > 0 THEN @quantity  ELSE Quantity  END 
    WHERE id = @product_id 

2) Pour sélectionner, utiliser deux masques (sélectionner, et où)

/* 
exec dbo.Select_Product @select_mask = 0x0001, @where_mask = 0 
exec dbo.Select_Product @select_mask = 0x0003, @where_mask = 0 

exec dbo.Select_Product @select_mask = 0x0003, @where_mask = 0x0004, @quantity = 2 

*/ 
alter proc dbo.Select_Product 
    @select_mask  int 
    ,@where_mask  int 
    ,@product_name nvarchar(100) = NULL -- 0x0001 
    ,@comment nvarchar(255)   = NULL -- 0x0002 
    ,@quantity int     = NULL -- 0x0004 
as 
DECLARE @select varchar(max) 
DECLARE @where varchar(max) 
SET @select = 'select Id ' 

IF (@select_mask & 0x0001) > 0 
    SET @select = @select + ',ProductName' 
IF (@select_mask & 0x0002) > 0 
    SET @select = @select + ',Comment' 
IF (@select_mask & 0x0004) > 0 
    SET @select = @select + ',Quantity' 

SET @select = @select + ' from dbo.Product' 

IF @where_mask > 0 
    SET @where = ' where ' + CASE WHEN (@where_mask & 0x0001) > 0 THEN 'ProductName = ''' + @product_name + '''' ELSE '' END 
      + CASE WHEN (@where_mask & 0x0002) > 0 THEN 'Comment = ''' + @comment + '''' ELSE '' END 
      + CASE WHEN (@where_mask & 0x0004) > 0 THEN 'Quantity = ' + CONVERT(varchar(10), @quantity) ELSE '' END 

PRINT @select + @where 
exec (@select + @where) 
+0

il semble être une procédure stockée, mais Je veux savoir pour simple requête parametrize je veux savoir comment dois-je passer paramètre facultatif à la méthode et comment dois-je utiliser seulement nécessaire un devrait-je utiliser dictionnaire ou toute autre collection ... – NoviceToDotNet

+0

@NoviceToDotNet J'ai mis à jour ma réponse. les attributs personnalisés de l'utilisateur sur les entités commerciales. – garik

Questions connexes