2012-02-07 4 views
3

Почти у каждого проекта есть панель поиска и пользовательские фильтры в моей компании. Трудно создать, когда в проекте слишком много фильтра.Шаблон проектирования для создания запросов Sql

Есть ли хороший шаблон дизайна для создания пользовательских запросов sql для использования с фильтрами?

Я всегда пишу что-то вроде этого:

commandText = "SELECT * FROM XXX " 

innerJoinCommand = "" 
whereCommand = "" 

if (??.length > 0) 
    whereCommand += "AND ??? " 

if (??.Count > 0) 
    innerJoinCommand += "??? " 

//... 

if (innerJoinCommand.length > 0) 
    commandText += innerJoinCommand 

if (whereCommand.length > 0) 
    commandText += "WHERE " + whereCommand 
+0

"Дизайн-шаблон"? Вы продолжаете использовать этот термин. Я не думаю, что это означает, что вы думаете, что это значит. : D Извините, пришлось. –

+0

так что вы предпочитаете вместо «шаблона дизайна»? – ogun

+1

Я шутил. В объектно-ориентированном мире термин «шаблон дизайна» превратился во что-то, что несколько иронически вписывается в подмножество архетипов кодирования. Большие шаблоны на самом деле не охватывают взаимодействие с базами данных, поэтому я сказал это. –

ответ

3

Такого рода вещи часто делается с помощью Builder Pattern.

Если вы хотите поддерживать очень сложные запросы, это может быть довольно сложный конструктор, и другие шаблоны могут вступить в игру, но это то, где я начну.

+0

спасибо ... и я нашел его с вашей помощью: http://www.codeproject.com/Статьи/13419/SelectQueryBuilder-Building-complex-and-flexible-S – ogun

0

это, как я делаю: (SRP это объект, который содержит все возможные параметры)

string query = "select * from TABLE"; 

     if (srp != null) 
     { 
      query += " Where "; 
      bool firstParameter = true; 

      if (srp.ID!= 0) 
      { 
       if (!firstParameter) 
       { 
        query += " and "; 
       } 
       query += " ID= " + srp.ID.ToString(); 
       firstParameter = false; 
      } 
     } 

, то вы можете повторить внутренний если столько, сколько вам нужно.

Конечно, это будет работать только с параметрами И, все еще не было, чтобы создать более сложную логику для использования или

+0

спасибо за ваш ответ, но я думаю, что это слишком запутанно и сложно реализовать ... это должно быть проще, чем я думаю :) – ogun

1

Я использовал следующий дизайн:

Is it a oop good design?

Маленькая хитрость заключается в поставить «WHERE 1 = 1», так что вы не должны обращаться, если ти это и или где вы должны Добавить.

+0

Небольшой, но действительно полезный трюк. Спасибо что подметил это. –

Смежные вопросы