Sql Query Работает в Management Studio, но не в программе - PullRequest
0 голосов
/ 25 ноября 2011

Рассмотрим следующий запрос.

SELECT     LP.project_id, LP.title, LP.type, LU.NAME, LP.reference, LP.status, LP.correspondence, LP.source, LP.deadline, LP.mstat, LP.num_pages, LP.done, 
                      LP.ss_notes
FROM         LogiCpsProjects AS LP LEFT OUTER JOIN
                      LogiCpsProjectAssignments AS LPA ON LP.project_id = LPA.project_id LEFT OUTER JOIN
                      LogiCpsUsers AS LU ON LPA.writer_id = LU.ID
WHERE     (LP.status <> 'Closed') AND (LP.status <> 'Cancelled') AND (LP.type LIKE '%' + @type + '%') AND (LP.status LIKE '%' + @status + '%') AND 
                      (LP.source LIKE '%' + @source + '%') AND (CAST(LP.mstat AS VARCHAR(50)) LIKE '%' + @mstat + '%')
ORDER BY LP.project_id

В этом запросе я пытаюсь выполнить поиск по четырем параметрам, а именно: @type, @status, @source и @mstat. Проблема в том, что этот запрос работает точно так же, как и в Sql Server Management Studio, например, если я ввожу «Article» в параметре type и оставляю другие пустыми, тогда он возвращает все записи с type = 'Article' и если я ввожу type = 'Article 'and status =' Working ', тогда он возвращает все записи с type =' Article 'и status =' Working 'и т. д. ... Простыми словами, поиск является динамическим, так как пользователь может ввести, оставить все параметры пустыми или поместить значения во все четыре. Он отлично работает в MS, но не в реальной программе.

Я использую SqlDataSource, с тем же запросом, если я оставляю все параметры пустыми, он ничего не возвращает, если я ввожу 1 параметр, он все равно ничего не возвращает, он возвращает только записи, если я ввожу все четыре параметра, что означает, что это не работает с пустыми параметрами. Для отправки параметров я использую четыре выпадающих списка. Все они выглядят так.

        <asp:DropDownList ID="ddlStatus" runat="server" Width="220px">
<asp:ListItem Selected="True" Value="" Text="">All</asp:ListItem>
<asp:ListItem>Details Pending</asp:ListItem>
<asp:ListItem>Working</asp:ListItem>
<asp:ListItem>Awaiting Feedback</asp:ListItem>
<asp:ListItem>Project Complete (AFB)</asp:ListItem>
<asp:ListItem>Revision Required Client</asp:ListItem>
<asp:ListItem>Revision Required Editor</asp:ListItem>
<asp:ListItem>To be Cancelled</asp:ListItem>
<asp:ListItem>Cancelled</asp:ListItem>
<asp:ListItem>Requirements Not Clear</asp:ListItem>
<asp:ListItem>Hold</asp:ListItem>
<asp:ListItem>Closed</asp:ListItem>
    </asp:DropDownList>

Первый элемент определен как ВСЕ, и его значение и текст установлены на «» (пустая строка), поэтому, когда пользователь выбирает ВСЕ, это означает все записи для этого конкретного параметра.

Что я делаю не так?

1 Ответ

1 голос
/ 25 ноября 2011

Обратите внимание, отправляете ли вы пустую или пустую строку для всех параметров. Если вы запустите оператор sql "select '%' + null + '%'" в Management Studio, вы обнаружите, что результатом является null, а это не то, что вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...