как написать запрос для дополнительных параметров - PullRequest
1 голос
/ 15 августа 2010

Привет, друзья! Я слежу за 3-х уровневой архитектурой для своего проекта. уровень представления, уровень бизнес-логики и, наконец, уровень базы данных мой вопрос заключается в том, что я делаю функцию поиска для моего проекта, где мне нужно отправить параметр через метод для поискового запроса, который должен сделать на уровне бизнес-логики Я должен отправить параметр из уровня представления, вызвав некоторый метод, и эти параметры будут использоваться в методе уровня бизнес-логики, чтобы сделать соответствующий запрос я не уверен, сколько параметров будет отправляться каждый раз, когда я имею в виду, что параметры являются необязательными поэтому мой вопрос заключается в том, как мне отправить этот необязательный параметр для получения в точности параметра require на уровне бизнес-логики.

Как лучше, я программирую на asp.net

1 Ответ

0 голосов
/ 15 августа 2010

Если вы используете бизнес-объекты, пометьте все свойства по пользовательскому атрибуту с помощью (mask = 1, 2, 4, 8 ..., обязательный = true / false).

class Product
{

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

тогда вы можете использовать отражение, чтобы прочитать все необходимые свойства и передать их в sp.если некоторые необязательные параметры имеют значение null (используйте Nullable <>), не увеличивайте маску (mask & = propertyMask).

Используйте целочисленную маску для частичного обновления.выберите, используйте две маски (выберите и где)

/*
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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...